@dashadmin/dash-app-common 1.3.24 → 1.3.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DashApp.js +176 -1
- package/dist/DashAppLoader.js +348 -3
- package/dist/DashDefaultResources.js +10 -1
- package/dist/components/DashDefaultPrivateApp.js +150 -1
- package/dist/components/DashDefaultPrivateResources.js +10 -1
- package/dist/components/DashDefaultPublicApp.js +20 -1
- package/dist/components/DashResourceLoader.js +245 -1
- package/dist/defaults/extensions/bootstrap/DashDefaultErrorBoundary.js +78 -1
- package/dist/defaults/extensions/bootstrap/dashDefaultInitializeApp.js +59 -1
- package/dist/defaults/extensions/bootstrap/index.js +24 -1
- package/dist/defaults/extensions/components/DashDefaultLoader.js +43 -2
- package/dist/defaults/extensions/components/dashDefaultAutoAdminComponents.js +67 -1
- package/dist/defaults/extensions/components/dashDefaultNotification.js +28 -1
- package/dist/defaults/extensions/components/dashDefaultStaticComponents.js +15 -1
- package/dist/defaults/extensions/components/index.js +13 -1
- package/dist/defaults/extensions/electron/dashDefaultIpcListeners.js +38 -1
- package/dist/defaults/extensions/electron/index.js +5 -1
- package/dist/defaults/extensions/hooks/index.js +12 -1
- package/dist/defaults/extensions/hooks/useDashDefaultLazyAutoAdminComponents.js +17 -1
- package/dist/defaults/extensions/hooks/useDashDefaultLazyI18nProvider.js +51 -1
- package/dist/defaults/extensions/hooks/useDashDefaultLazyResources.js +19 -1
- package/dist/defaults/extensions/hooks/useDashDefaultMountTracker.js +22 -1
- package/dist/defaults/extensions/hooks/useDashDefaultRoutePath.js +17 -1
- package/dist/defaults/extensions/i18n/dashDefaultI18nProvider.js +44 -1
- package/dist/defaults/extensions/i18n/dashDefaultTranslations.js +87 -1
- package/dist/defaults/extensions/i18n/index.js +24 -1
- package/dist/defaults/extensions/index.js +190 -1
- package/dist/defaults/extensions/layout/dashDefaultDomainAppLayout.js +58 -1
- package/dist/defaults/extensions/layout/index.js +12 -1
- package/dist/defaults/extensions/managers/DashDefaultWSMessagesManager.js +84 -1
- package/dist/defaults/extensions/managers/index.js +5 -1
- package/dist/defaults/extensions/providers/dashDefaultAuthProvider.js +220 -1
- package/dist/defaults/extensions/providers/dashDefaultDataProvider.js +395 -1
- package/dist/defaults/extensions/providers/index.js +24 -1
- package/dist/defaults/extensions/router/DashDefaultLanding.js +46 -1
- package/dist/defaults/extensions/router/dashDefaultPrivateRoutes.js +38 -1
- package/dist/defaults/extensions/router/dashDefaultPublicRoutes.js +65 -1
- package/dist/defaults/extensions/router/dashDefaultRouter.js +39 -1
- package/dist/defaults/extensions/router/dashDefaultSharedRoutes.js +40 -1
- package/dist/defaults/extensions/router/index.js +12 -1
- package/dist/defaults/extensions/state/dashDefaultAppCommon.js +57 -1
- package/dist/defaults/extensions/state/dashDefaultAppSettings.js +38 -1
- package/dist/defaults/extensions/state/dashDefaultInitialAppState.js +31 -1
- package/dist/defaults/extensions/state/dashDefaultLayoutSettings.js +48 -1
- package/dist/defaults/extensions/state/dashDefaultQueryClient.js +58 -1
- package/dist/defaults/extensions/state/dashDefaultResourcesIcons.js +24 -1
- package/dist/defaults/extensions/state/index.js +29 -1
- package/dist/defaults/extensions/styles/index.js +2 -1
- package/dist/defaults/extensions/theme/dashDefaultThemeOptions.js +74 -1
- package/dist/defaults/extensions/theme/index.js +6 -1
- package/dist/defaults/extensions/utils/IPCMessageBrokerContext.js +12 -1
- package/dist/defaults/extensions/utils/dashDefaultAuthProviderUtils.js +29 -1
- package/dist/defaults/extensions/utils/dashDefaultDataProviderUtils.js +37 -1
- package/dist/defaults/extensions/utils/dashDefaultNotificationsProcessor.js +149 -1
- package/dist/defaults/extensions/utils/index.js +44 -1
- package/dist/defaults/filters/demo/dashDefaultDemoFilters.js +36 -1
- package/dist/defaults/filters/demo/index.js +4 -1
- package/dist/defaults/filters/index.js +5 -1
- package/dist/defaults/index.js +14 -1
- package/dist/defaults/pages/Account/DashDefaultRegister.js +282 -1
- package/dist/defaults/pages/Account/DashDefaultSignUp.js +420 -1
- package/dist/defaults/pages/Account/DashDefaultSignUpSuccess.js +101 -1
- package/dist/defaults/pages/Account/index.js +8 -1
- package/dist/defaults/pages/DashDefaultLogin.js +218 -1
- package/dist/defaults/pages/Misc/DashDefaultNotFound.js +74 -1
- package/dist/defaults/pages/Misc/DashDefaultServerError.js +79 -1
- package/dist/defaults/pages/Misc/DashDefaultUnauthorized.js +90 -1
- package/dist/defaults/pages/Misc/index.js +8 -1
- package/dist/defaults/pages/Static/DashDefaultPrivacyPage.js +48 -1
- package/dist/defaults/pages/Static/DashDefaultStaticPage.js +55 -1
- package/dist/defaults/pages/Static/DashDefaultTermsPage.js +52 -1
- package/dist/defaults/pages/Static/index.js +8 -1
- package/dist/defaults/pages/index.js +25 -1
- package/dist/defaults/schemas/dashDefaultSchema.js +14 -1
- package/dist/defaults/schemas/demo/dashDefaultTodoSchema.js +24 -1
- package/dist/defaults/schemas/demo/index.js +4 -1
- package/dist/defaults/schemas/index.js +7 -1
- package/dist/filters/demo/todoFilters.js +36 -1
- package/dist/index.js +56 -5975
- package/dist/resources/demo/todoResource.js +58 -1
- package/dist/schemas/defaultSchema.js +14 -1
- package/dist/schemas/demo/todoSchema.js +24 -1
- package/package.json +132 -77
- package/src/DashApp.tsx +294 -0
- package/src/DashAppLoader.tsx +717 -0
- package/src/DashDefaultResources.tsx +10 -0
- package/src/components/DashDefaultPrivateApp.tsx +358 -0
- package/src/components/DashDefaultPrivateResources.tsx +10 -0
- package/src/components/DashDefaultPublicApp.tsx +40 -0
- package/src/components/DashResourceLoader.tsx +564 -0
- package/src/defaults/extensions/bootstrap/DashDefaultErrorBoundary.tsx +113 -0
- package/src/defaults/extensions/bootstrap/dashDefaultInitializeApp.ts +81 -0
- package/src/defaults/extensions/bootstrap/index.ts +32 -0
- package/src/defaults/extensions/components/DashDefaultLoader.tsx +59 -0
- package/src/defaults/extensions/components/dashDefaultAutoAdminComponents.tsx +49 -0
- package/src/defaults/extensions/components/dashDefaultNotification.tsx +37 -0
- package/src/defaults/extensions/components/dashDefaultStaticComponents.tsx +34 -0
- package/src/defaults/extensions/components/index.ts +17 -0
- package/src/defaults/extensions/electron/dashDefaultIpcListeners.ts +62 -0
- package/src/defaults/extensions/electron/index.ts +7 -0
- package/src/defaults/extensions/hooks/index.ts +11 -0
- package/src/defaults/extensions/hooks/useDashDefaultLazyAutoAdminComponents.ts +25 -0
- package/src/defaults/extensions/hooks/useDashDefaultLazyI18nProvider.ts +38 -0
- package/src/defaults/extensions/hooks/useDashDefaultLazyResources.ts +29 -0
- package/src/defaults/extensions/hooks/useDashDefaultMountTracker.ts +28 -0
- package/src/defaults/extensions/hooks/useDashDefaultRoutePath.ts +27 -0
- package/src/defaults/extensions/i18n/dashDefaultI18nProvider.ts +66 -0
- package/src/defaults/extensions/i18n/dashDefaultTranslations.ts +82 -0
- package/src/defaults/extensions/i18n/index.ts +22 -0
- package/src/defaults/extensions/index.ts +177 -0
- package/src/defaults/extensions/layout/dashDefaultDomainAppLayout.tsx +126 -0
- package/src/defaults/extensions/layout/index.ts +12 -0
- package/src/defaults/extensions/managers/DashDefaultWSMessagesManager.tsx +99 -0
- package/src/defaults/extensions/managers/index.ts +7 -0
- package/src/defaults/extensions/providers/dashDefaultAuthProvider.ts +256 -0
- package/src/defaults/extensions/providers/dashDefaultDataProvider.ts +513 -0
- package/src/defaults/extensions/providers/index.ts +25 -0
- package/src/defaults/extensions/router/DashDefaultLanding.tsx +51 -0
- package/src/defaults/extensions/router/dashDefaultPrivateRoutes.tsx +50 -0
- package/src/defaults/extensions/router/dashDefaultPublicRoutes.tsx +86 -0
- package/src/defaults/extensions/router/dashDefaultRouter.tsx +54 -0
- package/src/defaults/extensions/router/dashDefaultSharedRoutes.tsx +56 -0
- package/src/defaults/extensions/router/index.ts +13 -0
- package/src/defaults/extensions/state/dashDefaultAppCommon.ts +54 -0
- package/src/defaults/extensions/state/dashDefaultAppSettings.ts +29 -0
- package/src/defaults/extensions/state/dashDefaultInitialAppState.ts +75 -0
- package/src/defaults/extensions/state/dashDefaultLayoutSettings.ts +59 -0
- package/src/defaults/extensions/state/dashDefaultQueryClient.ts +59 -0
- package/src/defaults/extensions/state/dashDefaultResourcesIcons.tsx +23 -0
- package/src/defaults/extensions/state/index.ts +29 -0
- package/src/defaults/extensions/styles/index.ts +17 -0
- package/src/defaults/extensions/theme/dashDefaultThemeOptions.ts +89 -0
- package/src/defaults/extensions/theme/index.ts +7 -0
- package/src/defaults/extensions/utils/IPCMessageBrokerContext.tsx +22 -0
- package/src/defaults/extensions/utils/dashDefaultAuthProviderUtils.ts +36 -0
- package/src/defaults/extensions/utils/dashDefaultDataProviderUtils.ts +46 -0
- package/src/defaults/extensions/utils/dashDefaultNotificationsProcessor.tsx +208 -0
- package/src/defaults/extensions/utils/index.ts +42 -0
- package/src/defaults/filters/demo/dashDefaultDemoFilters.tsx +50 -0
- package/src/defaults/filters/demo/index.ts +6 -0
- package/src/defaults/filters/index.ts +11 -0
- package/src/defaults/index.ts +27 -0
- package/src/defaults/pages/Account/DashDefaultRegister.tsx +281 -0
- package/src/defaults/pages/Account/DashDefaultSignUp.tsx +492 -0
- package/src/defaults/pages/Account/DashDefaultSignUpSuccess.tsx +113 -0
- package/src/defaults/pages/Account/index.ts +8 -0
- package/src/defaults/pages/DashDefaultLogin.tsx +224 -0
- package/src/defaults/pages/Misc/DashDefaultNotFound.tsx +96 -0
- package/src/defaults/pages/Misc/DashDefaultServerError.tsx +102 -0
- package/src/defaults/pages/Misc/DashDefaultUnauthorized.tsx +116 -0
- package/src/defaults/pages/Misc/index.ts +8 -0
- package/src/defaults/pages/Static/DashDefaultPrivacyPage.tsx +85 -0
- package/src/defaults/pages/Static/DashDefaultStaticPage.tsx +75 -0
- package/src/defaults/pages/Static/DashDefaultTermsPage.tsx +69 -0
- package/src/defaults/pages/Static/index.ts +8 -0
- package/src/defaults/pages/index.ts +28 -0
- package/src/defaults/schemas/dashDefaultSchema.tsx +25 -0
- package/src/defaults/schemas/demo/dashDefaultTodoSchema.tsx +39 -0
- package/src/defaults/schemas/demo/index.ts +6 -0
- package/src/defaults/schemas/index.ts +14 -0
- package/src/filters/demo/todoFilters.tsx +39 -0
- package/src/index.ts +131 -0
- package/src/resources/demo/todoResource.tsx +68 -0
- package/src/schemas/defaultSchema.tsx +14 -0
- package/src/schemas/demo/todoSchema.tsx +27 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dash Default Auth Provider Utilities
|
|
3
|
+
*
|
|
4
|
+
* Dash default authentication utilities.
|
|
5
|
+
* Uses the base utilities from dash-utils with default configuration.
|
|
6
|
+
*/
|
|
7
|
+
import { AuthPersistenceService, syncLocalStorageToDeviceStore } from 'dash-auth';
|
|
8
|
+
import {
|
|
9
|
+
createLogoutFromStorage,
|
|
10
|
+
isUserAuthenticated,
|
|
11
|
+
getCurrentUser,
|
|
12
|
+
getAuthToken
|
|
13
|
+
} from 'dash-utils';
|
|
14
|
+
import { removeCookie } from 'dash-admin/src/utils/cookies';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Dash default logout function
|
|
18
|
+
* Configured with AuthPersistenceService and cookie removal
|
|
19
|
+
*/
|
|
20
|
+
export const dashDefaultLogoutFromStorage = createLogoutFromStorage({
|
|
21
|
+
clearAuthPersistence: () => AuthPersistenceService.clearAuth(),
|
|
22
|
+
syncToDeviceStore: syncLocalStorageToDeviceStore,
|
|
23
|
+
removeCookies: (names) => names.forEach(name => removeCookie(name))
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
// Re-export utility functions from dash-utils with DashDefault prefix
|
|
27
|
+
export const dashDefaultIsAuthenticated = isUserAuthenticated;
|
|
28
|
+
export const dashDefaultGetCurrentUser = getCurrentUser;
|
|
29
|
+
export const dashDefaultGetToken = getAuthToken;
|
|
30
|
+
|
|
31
|
+
export default {
|
|
32
|
+
dashDefaultLogoutFromStorage,
|
|
33
|
+
dashDefaultIsAuthenticated,
|
|
34
|
+
dashDefaultGetCurrentUser,
|
|
35
|
+
dashDefaultGetToken
|
|
36
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dash Default Data Provider Utilities
|
|
3
|
+
*
|
|
4
|
+
* Dash default data provider utilities.
|
|
5
|
+
* Re-exports from dash-utils with default types.
|
|
6
|
+
*/
|
|
7
|
+
import { IDashAutoAdminResourceConfig } from 'dash-auto-admin';
|
|
8
|
+
import {
|
|
9
|
+
setResourceConfigs as setConfigs,
|
|
10
|
+
getResourceConfig as getConfig,
|
|
11
|
+
processPostData as processData,
|
|
12
|
+
processFormData,
|
|
13
|
+
buildQueryString,
|
|
14
|
+
isFormDataResource
|
|
15
|
+
} from 'dash-utils';
|
|
16
|
+
|
|
17
|
+
// Type-safe wrappers for the app's resource config type
|
|
18
|
+
export const dashDefaultSetResourceConfigs = (configs: IDashAutoAdminResourceConfig[]): void => {
|
|
19
|
+
setConfigs(configs as any);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const dashDefaultGetResourceConfig = (resource: string): IDashAutoAdminResourceConfig | undefined => {
|
|
23
|
+
return getConfig(resource) as IDashAutoAdminResourceConfig | undefined;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export const dashDefaultProcessPostData = (
|
|
27
|
+
resource: string,
|
|
28
|
+
data: Record<string, any>,
|
|
29
|
+
operation: 'create' | 'update' | 'getList' | 'import'
|
|
30
|
+
): Record<string, any> => {
|
|
31
|
+
return processData(resource, data, operation);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// Re-export other utilities with DashDefault prefix
|
|
35
|
+
export const dashDefaultProcessFormData = processFormData;
|
|
36
|
+
export const dashDefaultBuildQueryString = buildQueryString;
|
|
37
|
+
export const dashDefaultIsFormDataResource = isFormDataResource;
|
|
38
|
+
|
|
39
|
+
export default {
|
|
40
|
+
dashDefaultGetResourceConfig,
|
|
41
|
+
dashDefaultSetResourceConfigs,
|
|
42
|
+
dashDefaultProcessPostData,
|
|
43
|
+
dashDefaultProcessFormData,
|
|
44
|
+
dashDefaultBuildQueryString,
|
|
45
|
+
dashDefaultIsFormDataResource
|
|
46
|
+
};
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dash Default Notifications Processor
|
|
3
|
+
*
|
|
4
|
+
* Dash default notification processing utilities.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Audio context for better browser compatibility
|
|
8
|
+
let audioContext: AudioContext | null = null;
|
|
9
|
+
|
|
10
|
+
// Re-export from dash-utils for backward compatibility
|
|
11
|
+
export { requestNotificationPermission as requestDashDefaultNotificationPermission } from 'dash-utils';
|
|
12
|
+
|
|
13
|
+
// Digital watch alarm configuration
|
|
14
|
+
const ALARM_DURATION_SECONDS = 10;
|
|
15
|
+
const ALARM_FREQUENCY_HIGH = 4000; // High frequency like digital watch
|
|
16
|
+
const ALARM_FREQUENCY_LOW = 2500; // Alternating low frequency
|
|
17
|
+
const BEEP_DURATION_MS = 100; // Short beeps
|
|
18
|
+
const BEEP_GAP_MS = 50; // Gap between beeps
|
|
19
|
+
const BEEP_PATTERN_GAP_MS = 300; // Gap between beep patterns
|
|
20
|
+
|
|
21
|
+
const initializeAudio = async (): Promise<boolean> => {
|
|
22
|
+
try {
|
|
23
|
+
// Initialize AudioContext if not already done
|
|
24
|
+
if (!audioContext) {
|
|
25
|
+
audioContext = new (window.AudioContext || (window as any).webkitAudioContext)();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Resume audio context if suspended (required by some browsers)
|
|
29
|
+
if (audioContext.state === 'suspended') {
|
|
30
|
+
await audioContext.resume();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return true;
|
|
34
|
+
} catch (error) {
|
|
35
|
+
console.error('Failed to initialize audio context:', error);
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Play a single beep at specified frequency using oscillator (more reliable than buffer)
|
|
42
|
+
*/
|
|
43
|
+
const playOscillatorBeep = (frequency: number, durationMs: number): Promise<void> => {
|
|
44
|
+
return new Promise((resolve) => {
|
|
45
|
+
if (!audioContext) {
|
|
46
|
+
resolve();
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
const oscillator = audioContext.createOscillator();
|
|
52
|
+
const gainNode = audioContext.createGain();
|
|
53
|
+
|
|
54
|
+
oscillator.connect(gainNode);
|
|
55
|
+
gainNode.connect(audioContext.destination);
|
|
56
|
+
|
|
57
|
+
oscillator.type = 'square'; // Square wave for that classic digital watch sound
|
|
58
|
+
oscillator.frequency.setValueAtTime(frequency, audioContext.currentTime);
|
|
59
|
+
|
|
60
|
+
// Quick attack, sustain, quick release for sharp beep
|
|
61
|
+
const now = audioContext.currentTime;
|
|
62
|
+
gainNode.gain.setValueAtTime(0, now);
|
|
63
|
+
gainNode.gain.linearRampToValueAtTime(0.4, now + 0.005); // 5ms attack
|
|
64
|
+
gainNode.gain.setValueAtTime(0.4, now + (durationMs / 1000) - 0.01);
|
|
65
|
+
gainNode.gain.linearRampToValueAtTime(0, now + (durationMs / 1000)); // 10ms release
|
|
66
|
+
|
|
67
|
+
oscillator.start(now);
|
|
68
|
+
oscillator.stop(now + (durationMs / 1000));
|
|
69
|
+
|
|
70
|
+
oscillator.onended = () => resolve();
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.error('Failed to play oscillator beep:', error);
|
|
73
|
+
resolve();
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Play a digital watch alarm pattern: beep-beep-beep (pause) beep-beep-beep
|
|
80
|
+
* Alternates between high and low frequencies
|
|
81
|
+
*/
|
|
82
|
+
const playAlarmPattern = async (useHighFreq: boolean): Promise<void> => {
|
|
83
|
+
const freq = useHighFreq ? ALARM_FREQUENCY_HIGH : ALARM_FREQUENCY_LOW;
|
|
84
|
+
|
|
85
|
+
// Play 3 quick beeps
|
|
86
|
+
for (let i = 0; i < 3; i++) {
|
|
87
|
+
await playOscillatorBeep(freq, BEEP_DURATION_MS);
|
|
88
|
+
if (i < 2) {
|
|
89
|
+
await new Promise(r => setTimeout(r, BEEP_GAP_MS));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Play the full digital watch alarm sequence for specified duration
|
|
96
|
+
* Returns a Promise that resolves when alarm completes
|
|
97
|
+
* @param durationSeconds - Duration in seconds (default: 10)
|
|
98
|
+
* @param settings - Optional alarm settings to override defaults
|
|
99
|
+
*/
|
|
100
|
+
export interface AlarmSettings {
|
|
101
|
+
alarmDurationSeconds?: number;
|
|
102
|
+
alarmFrequencyHigh?: number;
|
|
103
|
+
alarmFrequencyLow?: number;
|
|
104
|
+
beepDurationMs?: number;
|
|
105
|
+
beepGapMs?: number;
|
|
106
|
+
beepPatternGapMs?: number;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export const playDashDefaultDigitalWatchAlarm = async (
|
|
110
|
+
durationSeconds?: number,
|
|
111
|
+
settings?: AlarmSettings
|
|
112
|
+
): Promise<void> => {
|
|
113
|
+
// Use provided settings or defaults
|
|
114
|
+
const duration = durationSeconds ?? settings?.alarmDurationSeconds ?? ALARM_DURATION_SECONDS;
|
|
115
|
+
const frequencyHigh = settings?.alarmFrequencyHigh ?? ALARM_FREQUENCY_HIGH;
|
|
116
|
+
const frequencyLow = settings?.alarmFrequencyLow ?? ALARM_FREQUENCY_LOW;
|
|
117
|
+
const beepDuration = settings?.beepDurationMs ?? BEEP_DURATION_MS;
|
|
118
|
+
const beepGap = settings?.beepGapMs ?? BEEP_GAP_MS;
|
|
119
|
+
const patternGap = settings?.beepPatternGapMs ?? BEEP_PATTERN_GAP_MS;
|
|
120
|
+
|
|
121
|
+
console.log(`🔔 Starting digital watch alarm for ${duration} seconds...`);
|
|
122
|
+
|
|
123
|
+
const initialized = await initializeAudio();
|
|
124
|
+
if (!initialized) {
|
|
125
|
+
console.error('Failed to initialize audio for alarm');
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const startTime = Date.now();
|
|
130
|
+
const endTime = startTime + (duration * 1000);
|
|
131
|
+
let patternCount = 0;
|
|
132
|
+
|
|
133
|
+
// Custom playAlarmPattern that uses provided settings
|
|
134
|
+
const playPatternWithSettings = async (useHighFreq: boolean): Promise<void> => {
|
|
135
|
+
const freq = useHighFreq ? frequencyHigh : frequencyLow;
|
|
136
|
+
|
|
137
|
+
// Play 3 quick beeps
|
|
138
|
+
for (let i = 0; i < 3; i++) {
|
|
139
|
+
await playOscillatorBeep(freq, beepDuration);
|
|
140
|
+
if (i < 2 && beepGap > 0) {
|
|
141
|
+
await new Promise(r => setTimeout(r, beepGap));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
while (Date.now() < endTime) {
|
|
147
|
+
// Alternate between high and low frequency patterns
|
|
148
|
+
const useHighFreq = patternCount % 2 === 0;
|
|
149
|
+
await playPatternWithSettings(useHighFreq);
|
|
150
|
+
|
|
151
|
+
patternCount++;
|
|
152
|
+
|
|
153
|
+
// Check if we still have time for another pattern
|
|
154
|
+
if (Date.now() < endTime && patternGap > 0) {
|
|
155
|
+
await new Promise(r => setTimeout(r, patternGap));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
console.log(`🔔 Digital watch alarm completed (${patternCount} patterns played)`);
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Legacy single beep for backwards compatibility
|
|
164
|
+
*/
|
|
165
|
+
export const playDashDefaultNotificationSound = async (): Promise<void> => {
|
|
166
|
+
await playOscillatorBeep(ALARM_FREQUENCY_HIGH, BEEP_DURATION_MS);
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export const processDashDefaultNotification = async (notification: any): Promise<{ alarmCompleted: boolean }> => {
|
|
170
|
+
|
|
171
|
+
let marketplace = notification?.data?.marketplace?.system_marketplace?.name || "STORE" ;
|
|
172
|
+
const isConfirmedStatus = notification?.data?.new === "CONFIRMED";
|
|
173
|
+
let play = false;
|
|
174
|
+
|
|
175
|
+
// Play alarm sound, if notification is assistance request or order is confirmed.
|
|
176
|
+
|
|
177
|
+
if (notification?.notificationPayload?.class === "MallStoreAssistanceNotification") {
|
|
178
|
+
play = true;
|
|
179
|
+
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (isConfirmedStatus) {
|
|
183
|
+
play = true;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (play) {
|
|
187
|
+
|
|
188
|
+
console.log("🚨 Playing digital watch alarm for new order...");
|
|
189
|
+
|
|
190
|
+
// Play the digital watch alarm for 10 seconds
|
|
191
|
+
// This returns a Promise that resolves when alarm is complete
|
|
192
|
+
await playDashDefaultDigitalWatchAlarm(ALARM_DURATION_SECONDS);
|
|
193
|
+
|
|
194
|
+
console.log("✅ Alarm sequence completed - TTS can now play");
|
|
195
|
+
|
|
196
|
+
// Also show a browser notification if permissions allow
|
|
197
|
+
if ('Notification' in window && Notification.permission === 'granted') {
|
|
198
|
+
new Notification(`Nueva Orden de ${marketplace}`, {
|
|
199
|
+
body: notification?.data?.message || 'Nueva orden recibida',
|
|
200
|
+
icon: 'https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f6a8.png', // Alarm icon emoji
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return { alarmCompleted: true };
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return { alarmCompleted: false };
|
|
208
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utils Extensions Index
|
|
3
|
+
*
|
|
4
|
+
* Utility functions and contexts.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Auth Provider Utils
|
|
8
|
+
export {
|
|
9
|
+
dashDefaultLogoutFromStorage,
|
|
10
|
+
dashDefaultIsAuthenticated,
|
|
11
|
+
dashDefaultGetCurrentUser,
|
|
12
|
+
dashDefaultGetToken
|
|
13
|
+
} from './dashDefaultAuthProviderUtils';
|
|
14
|
+
|
|
15
|
+
// Data Provider Utils
|
|
16
|
+
export {
|
|
17
|
+
dashDefaultGetResourceConfig,
|
|
18
|
+
dashDefaultSetResourceConfigs,
|
|
19
|
+
dashDefaultProcessPostData,
|
|
20
|
+
dashDefaultProcessFormData,
|
|
21
|
+
dashDefaultBuildQueryString,
|
|
22
|
+
dashDefaultIsFormDataResource
|
|
23
|
+
} from './dashDefaultDataProviderUtils';
|
|
24
|
+
|
|
25
|
+
// IPC Message Broker
|
|
26
|
+
export {
|
|
27
|
+
DashIPCMessageBrokerContext,
|
|
28
|
+
DashIPCMessageBrokerProvider,
|
|
29
|
+
useDashIPCMessageBroker,
|
|
30
|
+
type DashLogMessage,
|
|
31
|
+
type DashSubprocessOutput,
|
|
32
|
+
type DashIPCMessageBrokerContextType,
|
|
33
|
+
type DashIPCMessageBrokerConfig
|
|
34
|
+
} from './IPCMessageBrokerContext';
|
|
35
|
+
|
|
36
|
+
// Notifications Processor
|
|
37
|
+
export {
|
|
38
|
+
processDashDefaultNotification,
|
|
39
|
+
playDashDefaultNotificationSound,
|
|
40
|
+
playDashDefaultDigitalWatchAlarm,
|
|
41
|
+
requestDashDefaultNotificationPermission
|
|
42
|
+
} from './dashDefaultNotificationsProcessor';
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dash Default Demo Filters
|
|
3
|
+
*
|
|
4
|
+
* Example filter configurations for demonstration purposes.
|
|
5
|
+
* These filters showcase different filter types and configurations.
|
|
6
|
+
*/
|
|
7
|
+
import React from "react";
|
|
8
|
+
import { SelectInput } from "react-admin";
|
|
9
|
+
import IReferenceFilter from "dash-auto-admin/src/interfaces/IReferenceFilter";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Dash default demo filters for resource lists
|
|
13
|
+
*
|
|
14
|
+
* Demonstrates:
|
|
15
|
+
* - Text filters (name, description)
|
|
16
|
+
* - Select filters with static options (status)
|
|
17
|
+
*/
|
|
18
|
+
const dashDefaultDemoFilters: IReferenceFilter[] = [
|
|
19
|
+
{
|
|
20
|
+
id: 'name',
|
|
21
|
+
label: 'Name',
|
|
22
|
+
source: 'name',
|
|
23
|
+
alwaysOn: true,
|
|
24
|
+
reference: null,
|
|
25
|
+
optionText: null,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: 'description',
|
|
29
|
+
label: 'Description',
|
|
30
|
+
source: 'description',
|
|
31
|
+
alwaysOn: true,
|
|
32
|
+
reference: null,
|
|
33
|
+
optionText: null,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: 'status',
|
|
37
|
+
label: 'Status',
|
|
38
|
+
source: 'status',
|
|
39
|
+
reference: [
|
|
40
|
+
{ id: 'active', name: 'Active' },
|
|
41
|
+
{ id: 'inactive', name: 'Inactive' },
|
|
42
|
+
{ id: 'pending', name: 'Pending' },
|
|
43
|
+
],
|
|
44
|
+
optionText: 'status',
|
|
45
|
+
alwaysOn: true,
|
|
46
|
+
referenceComponent: SelectInput,
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
export default dashDefaultDemoFilters;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default Filters Index
|
|
3
|
+
*
|
|
4
|
+
* Default filter configurations for resource lists.
|
|
5
|
+
* These filters provide common filtering patterns that can be
|
|
6
|
+
* customized or extended for specific resources.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
// Demo filters
|
|
10
|
+
export * from './demo';
|
|
11
|
+
export { default as dashDefaultDemoFilters } from './demo/dashDefaultDemoFilters';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defaults Index
|
|
3
|
+
*
|
|
4
|
+
* Exports all default components, routes, extensions, pages, filters, and schemas
|
|
5
|
+
* for the dash-app-common package. This provides a complete zero-config solution
|
|
6
|
+
* that can be customized or extended by applications.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
// Default routes (from extensions/router)
|
|
10
|
+
export { dashDefaultPublicRoutes as defaultPublicRoutes } from './extensions/router/dashDefaultPublicRoutes';
|
|
11
|
+
export { dashDefaultPrivateRoutes as defaultPrivateRoutes } from './extensions/router/dashDefaultPrivateRoutes';
|
|
12
|
+
|
|
13
|
+
// Default app components
|
|
14
|
+
export { default as DashDefaultPublicApp } from '../components/DashDefaultPublicApp';
|
|
15
|
+
export { default as DashDefaultPrivateApp } from '../components/DashDefaultPrivateApp';
|
|
16
|
+
|
|
17
|
+
// Extensions
|
|
18
|
+
export * from './extensions';
|
|
19
|
+
|
|
20
|
+
// Pages
|
|
21
|
+
export * from './pages';
|
|
22
|
+
|
|
23
|
+
// Filters
|
|
24
|
+
export * from './filters';
|
|
25
|
+
|
|
26
|
+
// Schemas
|
|
27
|
+
export * from './schemas';
|