@dashadmin/dash-app-common 1.3.25 → 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.
Files changed (165) hide show
  1. package/dist/DashApp.js +176 -1
  2. package/dist/DashAppLoader.js +348 -3
  3. package/dist/DashDefaultResources.js +10 -1
  4. package/dist/components/DashDefaultPrivateApp.js +150 -1
  5. package/dist/components/DashDefaultPrivateResources.js +10 -1
  6. package/dist/components/DashDefaultPublicApp.js +20 -1
  7. package/dist/components/DashResourceLoader.js +245 -1
  8. package/dist/defaults/extensions/bootstrap/DashDefaultErrorBoundary.js +78 -1
  9. package/dist/defaults/extensions/bootstrap/dashDefaultInitializeApp.js +59 -1
  10. package/dist/defaults/extensions/bootstrap/index.js +24 -1
  11. package/dist/defaults/extensions/components/DashDefaultLoader.js +43 -2
  12. package/dist/defaults/extensions/components/dashDefaultAutoAdminComponents.js +67 -1
  13. package/dist/defaults/extensions/components/dashDefaultNotification.js +28 -1
  14. package/dist/defaults/extensions/components/dashDefaultStaticComponents.js +15 -1
  15. package/dist/defaults/extensions/components/index.js +13 -1
  16. package/dist/defaults/extensions/electron/dashDefaultIpcListeners.js +38 -1
  17. package/dist/defaults/extensions/electron/index.js +5 -1
  18. package/dist/defaults/extensions/hooks/index.js +12 -1
  19. package/dist/defaults/extensions/hooks/useDashDefaultLazyAutoAdminComponents.js +17 -1
  20. package/dist/defaults/extensions/hooks/useDashDefaultLazyI18nProvider.js +51 -1
  21. package/dist/defaults/extensions/hooks/useDashDefaultLazyResources.js +19 -1
  22. package/dist/defaults/extensions/hooks/useDashDefaultMountTracker.js +22 -1
  23. package/dist/defaults/extensions/hooks/useDashDefaultRoutePath.js +17 -1
  24. package/dist/defaults/extensions/i18n/dashDefaultI18nProvider.js +44 -1
  25. package/dist/defaults/extensions/i18n/dashDefaultTranslations.js +87 -1
  26. package/dist/defaults/extensions/i18n/index.js +24 -1
  27. package/dist/defaults/extensions/index.js +190 -1
  28. package/dist/defaults/extensions/layout/dashDefaultDomainAppLayout.js +58 -1
  29. package/dist/defaults/extensions/layout/index.js +12 -1
  30. package/dist/defaults/extensions/managers/DashDefaultWSMessagesManager.js +84 -1
  31. package/dist/defaults/extensions/managers/index.js +5 -1
  32. package/dist/defaults/extensions/providers/dashDefaultAuthProvider.js +220 -1
  33. package/dist/defaults/extensions/providers/dashDefaultDataProvider.js +395 -1
  34. package/dist/defaults/extensions/providers/index.js +24 -1
  35. package/dist/defaults/extensions/router/DashDefaultLanding.js +46 -1
  36. package/dist/defaults/extensions/router/dashDefaultPrivateRoutes.js +38 -1
  37. package/dist/defaults/extensions/router/dashDefaultPublicRoutes.js +65 -1
  38. package/dist/defaults/extensions/router/dashDefaultRouter.js +39 -1
  39. package/dist/defaults/extensions/router/dashDefaultSharedRoutes.js +40 -1
  40. package/dist/defaults/extensions/router/index.js +12 -1
  41. package/dist/defaults/extensions/state/dashDefaultAppCommon.js +57 -1
  42. package/dist/defaults/extensions/state/dashDefaultAppSettings.js +38 -1
  43. package/dist/defaults/extensions/state/dashDefaultInitialAppState.js +31 -1
  44. package/dist/defaults/extensions/state/dashDefaultLayoutSettings.js +48 -1
  45. package/dist/defaults/extensions/state/dashDefaultQueryClient.js +58 -1
  46. package/dist/defaults/extensions/state/dashDefaultResourcesIcons.js +24 -1
  47. package/dist/defaults/extensions/state/index.js +29 -1
  48. package/dist/defaults/extensions/styles/index.js +2 -1
  49. package/dist/defaults/extensions/theme/dashDefaultThemeOptions.js +74 -1
  50. package/dist/defaults/extensions/theme/index.js +6 -1
  51. package/dist/defaults/extensions/utils/IPCMessageBrokerContext.js +12 -1
  52. package/dist/defaults/extensions/utils/dashDefaultAuthProviderUtils.js +29 -1
  53. package/dist/defaults/extensions/utils/dashDefaultDataProviderUtils.js +37 -1
  54. package/dist/defaults/extensions/utils/dashDefaultNotificationsProcessor.js +149 -1
  55. package/dist/defaults/extensions/utils/index.js +44 -1
  56. package/dist/defaults/filters/demo/dashDefaultDemoFilters.js +36 -1
  57. package/dist/defaults/filters/demo/index.js +4 -1
  58. package/dist/defaults/filters/index.js +5 -1
  59. package/dist/defaults/index.js +14 -1
  60. package/dist/defaults/pages/Account/DashDefaultRegister.js +282 -1
  61. package/dist/defaults/pages/Account/DashDefaultSignUp.js +420 -1
  62. package/dist/defaults/pages/Account/DashDefaultSignUpSuccess.js +101 -1
  63. package/dist/defaults/pages/Account/index.js +8 -1
  64. package/dist/defaults/pages/DashDefaultLogin.js +218 -1
  65. package/dist/defaults/pages/Misc/DashDefaultNotFound.js +74 -1
  66. package/dist/defaults/pages/Misc/DashDefaultServerError.js +79 -1
  67. package/dist/defaults/pages/Misc/DashDefaultUnauthorized.js +90 -1
  68. package/dist/defaults/pages/Misc/index.js +8 -1
  69. package/dist/defaults/pages/Static/DashDefaultPrivacyPage.js +48 -1
  70. package/dist/defaults/pages/Static/DashDefaultStaticPage.js +55 -1
  71. package/dist/defaults/pages/Static/DashDefaultTermsPage.js +52 -1
  72. package/dist/defaults/pages/Static/index.js +8 -1
  73. package/dist/defaults/pages/index.js +25 -1
  74. package/dist/defaults/schemas/dashDefaultSchema.js +14 -1
  75. package/dist/defaults/schemas/demo/dashDefaultTodoSchema.js +24 -1
  76. package/dist/defaults/schemas/demo/index.js +4 -1
  77. package/dist/defaults/schemas/index.js +7 -1
  78. package/dist/filters/demo/todoFilters.js +36 -1
  79. package/dist/index.js +56 -5975
  80. package/dist/resources/demo/todoResource.js +58 -1
  81. package/dist/schemas/defaultSchema.js +14 -1
  82. package/dist/schemas/demo/todoSchema.js +24 -1
  83. package/package.json +132 -77
  84. package/src/DashApp.tsx +294 -0
  85. package/src/DashAppLoader.tsx +717 -0
  86. package/src/DashDefaultResources.tsx +10 -0
  87. package/src/components/DashDefaultPrivateApp.tsx +358 -0
  88. package/src/components/DashDefaultPrivateResources.tsx +10 -0
  89. package/src/components/DashDefaultPublicApp.tsx +40 -0
  90. package/src/components/DashResourceLoader.tsx +564 -0
  91. package/src/defaults/extensions/bootstrap/DashDefaultErrorBoundary.tsx +113 -0
  92. package/src/defaults/extensions/bootstrap/dashDefaultInitializeApp.ts +81 -0
  93. package/src/defaults/extensions/bootstrap/index.ts +32 -0
  94. package/src/defaults/extensions/components/DashDefaultLoader.tsx +59 -0
  95. package/src/defaults/extensions/components/dashDefaultAutoAdminComponents.tsx +49 -0
  96. package/src/defaults/extensions/components/dashDefaultNotification.tsx +37 -0
  97. package/src/defaults/extensions/components/dashDefaultStaticComponents.tsx +34 -0
  98. package/src/defaults/extensions/components/index.ts +17 -0
  99. package/src/defaults/extensions/electron/dashDefaultIpcListeners.ts +62 -0
  100. package/src/defaults/extensions/electron/index.ts +7 -0
  101. package/src/defaults/extensions/hooks/index.ts +11 -0
  102. package/src/defaults/extensions/hooks/useDashDefaultLazyAutoAdminComponents.ts +25 -0
  103. package/src/defaults/extensions/hooks/useDashDefaultLazyI18nProvider.ts +38 -0
  104. package/src/defaults/extensions/hooks/useDashDefaultLazyResources.ts +29 -0
  105. package/src/defaults/extensions/hooks/useDashDefaultMountTracker.ts +28 -0
  106. package/src/defaults/extensions/hooks/useDashDefaultRoutePath.ts +27 -0
  107. package/src/defaults/extensions/i18n/dashDefaultI18nProvider.ts +66 -0
  108. package/src/defaults/extensions/i18n/dashDefaultTranslations.ts +82 -0
  109. package/src/defaults/extensions/i18n/index.ts +22 -0
  110. package/src/defaults/extensions/index.ts +177 -0
  111. package/src/defaults/extensions/layout/dashDefaultDomainAppLayout.tsx +126 -0
  112. package/src/defaults/extensions/layout/index.ts +12 -0
  113. package/src/defaults/extensions/managers/DashDefaultWSMessagesManager.tsx +99 -0
  114. package/src/defaults/extensions/managers/index.ts +7 -0
  115. package/src/defaults/extensions/providers/dashDefaultAuthProvider.ts +256 -0
  116. package/src/defaults/extensions/providers/dashDefaultDataProvider.ts +513 -0
  117. package/src/defaults/extensions/providers/index.ts +25 -0
  118. package/src/defaults/extensions/router/DashDefaultLanding.tsx +51 -0
  119. package/src/defaults/extensions/router/dashDefaultPrivateRoutes.tsx +50 -0
  120. package/src/defaults/extensions/router/dashDefaultPublicRoutes.tsx +86 -0
  121. package/src/defaults/extensions/router/dashDefaultRouter.tsx +54 -0
  122. package/src/defaults/extensions/router/dashDefaultSharedRoutes.tsx +56 -0
  123. package/src/defaults/extensions/router/index.ts +13 -0
  124. package/src/defaults/extensions/state/dashDefaultAppCommon.ts +54 -0
  125. package/src/defaults/extensions/state/dashDefaultAppSettings.ts +29 -0
  126. package/src/defaults/extensions/state/dashDefaultInitialAppState.ts +75 -0
  127. package/src/defaults/extensions/state/dashDefaultLayoutSettings.ts +59 -0
  128. package/src/defaults/extensions/state/dashDefaultQueryClient.ts +59 -0
  129. package/src/defaults/extensions/state/dashDefaultResourcesIcons.tsx +23 -0
  130. package/src/defaults/extensions/state/index.ts +29 -0
  131. package/src/defaults/extensions/styles/index.ts +17 -0
  132. package/src/defaults/extensions/theme/dashDefaultThemeOptions.ts +89 -0
  133. package/src/defaults/extensions/theme/index.ts +7 -0
  134. package/src/defaults/extensions/utils/IPCMessageBrokerContext.tsx +22 -0
  135. package/src/defaults/extensions/utils/dashDefaultAuthProviderUtils.ts +36 -0
  136. package/src/defaults/extensions/utils/dashDefaultDataProviderUtils.ts +46 -0
  137. package/src/defaults/extensions/utils/dashDefaultNotificationsProcessor.tsx +208 -0
  138. package/src/defaults/extensions/utils/index.ts +42 -0
  139. package/src/defaults/filters/demo/dashDefaultDemoFilters.tsx +50 -0
  140. package/src/defaults/filters/demo/index.ts +6 -0
  141. package/src/defaults/filters/index.ts +11 -0
  142. package/src/defaults/index.ts +27 -0
  143. package/src/defaults/pages/Account/DashDefaultRegister.tsx +281 -0
  144. package/src/defaults/pages/Account/DashDefaultSignUp.tsx +492 -0
  145. package/src/defaults/pages/Account/DashDefaultSignUpSuccess.tsx +113 -0
  146. package/src/defaults/pages/Account/index.ts +8 -0
  147. package/src/defaults/pages/DashDefaultLogin.tsx +224 -0
  148. package/src/defaults/pages/Misc/DashDefaultNotFound.tsx +96 -0
  149. package/src/defaults/pages/Misc/DashDefaultServerError.tsx +102 -0
  150. package/src/defaults/pages/Misc/DashDefaultUnauthorized.tsx +116 -0
  151. package/src/defaults/pages/Misc/index.ts +8 -0
  152. package/src/defaults/pages/Static/DashDefaultPrivacyPage.tsx +85 -0
  153. package/src/defaults/pages/Static/DashDefaultStaticPage.tsx +75 -0
  154. package/src/defaults/pages/Static/DashDefaultTermsPage.tsx +69 -0
  155. package/src/defaults/pages/Static/index.ts +8 -0
  156. package/src/defaults/pages/index.ts +28 -0
  157. package/src/defaults/schemas/dashDefaultSchema.tsx +25 -0
  158. package/src/defaults/schemas/demo/dashDefaultTodoSchema.tsx +39 -0
  159. package/src/defaults/schemas/demo/index.ts +6 -0
  160. package/src/defaults/schemas/index.ts +14 -0
  161. package/src/filters/demo/todoFilters.tsx +39 -0
  162. package/src/index.ts +131 -0
  163. package/src/resources/demo/todoResource.tsx +68 -0
  164. package/src/schemas/defaultSchema.tsx +14 -0
  165. package/src/schemas/demo/todoSchema.tsx +27 -0
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Dash Default i18n Translations Extension
3
+ *
4
+ * Default translations that extend the base dash-admin translations.
5
+ */
6
+ import polyglotI18nProvider from 'ra-i18n-polyglot';
7
+ import { en, es } from 'dash-admin/src/providers/i18n/languages';
8
+
9
+ /**
10
+ * Dash default merged translations combining dash-admin base translations
11
+ */
12
+ export const dashDefaultTranslations: Record<string, any> = {
13
+ en: {
14
+ ...en,
15
+ },
16
+ es: {
17
+ ...es,
18
+ },
19
+ };
20
+
21
+ /**
22
+ * Dash default available locales configuration
23
+ */
24
+ export const dashDefaultAvailableLocales = [
25
+ { locale: 'en', name: 'English' },
26
+ { locale: 'es', name: 'Español' }
27
+ ];
28
+
29
+ /**
30
+ * Dash default locale
31
+ */
32
+ export const dashDefaultLocale = 'en';
33
+
34
+ /**
35
+ * Create dash default i18n provider with merged translations
36
+ */
37
+ export const createDashDefaultI18nProvider = (locale: string = dashDefaultLocale) => {
38
+ return polyglotI18nProvider(
39
+ (loc) => dashDefaultTranslations[loc as keyof typeof dashDefaultTranslations] || dashDefaultTranslations.en,
40
+ locale,
41
+ dashDefaultAvailableLocales
42
+ );
43
+ };
44
+
45
+ /**
46
+ * Load dash default translations asynchronously
47
+ * Useful for lazy loading to reduce initial bundle size
48
+ */
49
+ export const loadDashDefaultTranslationsAsync = async () => {
50
+ try {
51
+ const [enLang, esLang] = await Promise.all([
52
+ import('dash-admin').then(module => module.en),
53
+ import('dash-admin').then(module => module.es)
54
+ ]);
55
+
56
+ return {
57
+ en: { ...enLang },
58
+ es: { ...esLang },
59
+ };
60
+ } catch (error) {
61
+ console.error('Failed to load dash default translations:', error);
62
+ return dashDefaultTranslations;
63
+ }
64
+ };
65
+
66
+ /**
67
+ * Create dash default i18n provider asynchronously
68
+ */
69
+ export const createDashDefaultI18nProviderAsync = async (
70
+ locale: string = dashDefaultLocale,
71
+ locales?: Array<{ locale: string; name: string }>
72
+ ) => {
73
+ const loadedTranslations = await loadDashDefaultTranslationsAsync();
74
+
75
+ return polyglotI18nProvider(
76
+ (loc) => loadedTranslations[loc as keyof typeof loadedTranslations] || loadedTranslations.en,
77
+ locale,
78
+ locales || dashDefaultAvailableLocales
79
+ );
80
+ };
81
+
82
+ export default dashDefaultTranslations;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * i18n Extensions Index
3
+ *
4
+ * Internationalization configurations and providers.
5
+ */
6
+
7
+ // Default Translations
8
+ export {
9
+ dashDefaultTranslations,
10
+ dashDefaultAvailableLocales,
11
+ dashDefaultLocale,
12
+ createDashDefaultI18nProvider,
13
+ loadDashDefaultTranslationsAsync,
14
+ createDashDefaultI18nProviderAsync
15
+ } from './dashDefaultTranslations';
16
+
17
+ // Default i18n Provider hook and factory
18
+ export {
19
+ useDashDefaultI18nProvider,
20
+ createDashDefaultI18nProviderWithSettings,
21
+ createDashDefaultI18nProviderFromAppState
22
+ } from './dashDefaultI18nProvider';
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Default Extensions Index
3
+ *
4
+ * This is the main entry point for all default extensions.
5
+ * Applications can import what they need and override with their custom implementations.
6
+ */
7
+
8
+ // ============================================================================
9
+ // BOOTSTRAP EXTENSIONS
10
+ // ============================================================================
11
+ export {
12
+ dashDefaultInitializeApp,
13
+ dashDefaultBootstrapApp,
14
+ DashDefaultErrorBoundary,
15
+ type DashDefaultInitializeAppConfig,
16
+ type DashDefaultErrorBoundaryProps,
17
+ type DashDefaultErrorBoundaryState
18
+ } from './bootstrap';
19
+
20
+ // ============================================================================
21
+ // COMPONENT EXTENSIONS
22
+ // ============================================================================
23
+ export {
24
+ DashDefaultLoader,
25
+ DashDefaultReactAdminNotification,
26
+ loadDashDefaultAutoAdminComponents,
27
+ dashDefaultAutoAdminComponents,
28
+ dashDefaultStaticComponents,
29
+ getDashDefaultStaticComponents,
30
+ dashDefaultNotificationConfig,
31
+ type DashDefaultLoaderProps
32
+ } from './components';
33
+
34
+ // ============================================================================
35
+ // HOOK EXTENSIONS
36
+ // ============================================================================
37
+ export {
38
+ useDashDefaultMountTracker,
39
+ useDashDefaultRoutePath,
40
+ useDashDefaultLazyI18nProvider,
41
+ useDashDefaultLazyAutoAdminComponents,
42
+ useDashDefaultLazyResources
43
+ } from './hooks';
44
+
45
+ // ============================================================================
46
+ // ROUTER EXTENSIONS
47
+ // ============================================================================
48
+ export {
49
+ dashDefaultPublicRoutes,
50
+ dashDefaultPrivateRoutes,
51
+ dashDefaultSharedRoutes,
52
+ DashDefaultRouterWrapper,
53
+ createDashDefaultRouterWrapper,
54
+ getDashDefaultRouterEnvVars
55
+ } from './router';
56
+
57
+ // ============================================================================
58
+ // STATE EXTENSIONS
59
+ // ============================================================================
60
+ export {
61
+ dashDefaultAppSettings,
62
+ getDashDefaultThemeType,
63
+ getDashDefaultAppCommon,
64
+ getDashDefaultAppPath,
65
+ getDashDefaultPanelImages,
66
+ DASH_DEFAULT_INITIAL_APP_STATE,
67
+ getDashDefaultInitialAppState,
68
+ dashDefaultQueryClient,
69
+ createDashDefaultQueryClient,
70
+ dashDefaultQueryClientConfig,
71
+ dashDefaultDevQueryClientConfig,
72
+ dashDefaultLayoutSettings,
73
+ getDashDefaultTheme,
74
+ getDashDefaultLightTheme,
75
+ getDashDefaultDarkTheme,
76
+ dashDefaultResourceIcons,
77
+ type DashDefaultLayoutSettings,
78
+ type IDashDefaultUser,
79
+ type IDashDefaultAuth
80
+ } from './state';
81
+
82
+ // ============================================================================
83
+ // I18N EXTENSIONS
84
+ // ============================================================================
85
+ export {
86
+ dashDefaultTranslations,
87
+ dashDefaultAvailableLocales,
88
+ dashDefaultLocale,
89
+ createDashDefaultI18nProvider,
90
+ loadDashDefaultTranslationsAsync,
91
+ createDashDefaultI18nProviderAsync,
92
+ useDashDefaultI18nProvider,
93
+ createDashDefaultI18nProviderWithSettings,
94
+ createDashDefaultI18nProviderFromAppState
95
+ } from './i18n';
96
+
97
+ // ============================================================================
98
+ // PROVIDER EXTENSIONS
99
+ // ============================================================================
100
+ export {
101
+ dashDefaultAuthProvider,
102
+ dashDefaultAuthProviderConfig,
103
+ dashDefaultAuthProviderOverrides,
104
+ dashDefaultDataProvider,
105
+ dashDefaultDataProviderConfig,
106
+ dashDefaultDataProviderOverrides,
107
+ dashDefaultDataProviderExtensions,
108
+ dashAuthProvider,
109
+ dashDataProvider
110
+ } from './providers';
111
+
112
+ // ============================================================================
113
+ // THEME EXTENSIONS
114
+ // ============================================================================
115
+ export {
116
+ dashDefaultExtendedThemeOptions,
117
+ dashDefaultPalette,
118
+ dashDefaultTypography
119
+ } from './theme';
120
+
121
+ // ============================================================================
122
+ // LAYOUT EXTENSIONS
123
+ // ============================================================================
124
+ export {
125
+ createDashDefaultDomainAppLayout,
126
+ createDashDefaultDomainAppLayoutWithIPC,
127
+ useDashDefaultDomainAppLayout,
128
+ useDashDefaultDomainAppLayoutWithIPC
129
+ } from './layout';
130
+
131
+ // ============================================================================
132
+ // ELECTRON EXTENSIONS
133
+ // ============================================================================
134
+ export {
135
+ useDashDefaultIPCListeners,
136
+ setupDashDefaultIPCListeners
137
+ } from './electron';
138
+
139
+ // ============================================================================
140
+ // MANAGER EXTENSIONS
141
+ // ============================================================================
142
+ export {
143
+ DashDefaultWSMessagesManager
144
+ } from './managers';
145
+
146
+ // ============================================================================
147
+ // UTILITY EXTENSIONS
148
+ // ============================================================================
149
+ export {
150
+ dashDefaultLogoutFromStorage,
151
+ dashDefaultIsAuthenticated,
152
+ dashDefaultGetCurrentUser,
153
+ dashDefaultGetToken,
154
+ dashDefaultGetResourceConfig,
155
+ dashDefaultSetResourceConfigs,
156
+ dashDefaultProcessPostData,
157
+ dashDefaultProcessFormData,
158
+ dashDefaultBuildQueryString,
159
+ dashDefaultIsFormDataResource,
160
+ DashIPCMessageBrokerContext,
161
+ DashIPCMessageBrokerProvider,
162
+ useDashIPCMessageBroker,
163
+ processDashDefaultNotification,
164
+ playDashDefaultNotificationSound,
165
+ playDashDefaultDigitalWatchAlarm,
166
+ requestDashDefaultNotificationPermission,
167
+ type DashLogMessage,
168
+ type DashSubprocessOutput,
169
+ type DashIPCMessageBrokerContextType,
170
+ type DashIPCMessageBrokerConfig
171
+ } from './utils';
172
+
173
+ // ============================================================================
174
+ // STYLES (Side-effect import)
175
+ // ============================================================================
176
+ // Note: Import this in your app's entry point to load default styles
177
+ // import 'dash-app-common/src/defaults/extensions/styles';
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Dash Default Domain App Layout Extension
3
+ *
4
+ * Dash default app layout wrapper that includes window controls for Electron.
5
+ */
6
+ import React, { useCallback, Suspense } from 'react';
7
+ import DASHAppLayout from 'dash-admin/src/default-theme/DomainAppLayout';
8
+ import { IDomainAppLayout } from 'dash-admin/src/default-theme/DomainAppLayout';
9
+ import { getEnv } from 'dash-constants';
10
+
11
+ // Lazy load components
12
+ const IPCMessageBrokerProvider = React.lazy(() =>
13
+ import('dash-utils').then(m => ({ default: m.IPCMessageBrokerProvider }))
14
+ );
15
+
16
+ // Simple loading fallback
17
+ const DashDefaultLayoutLoadingFallback = () => (
18
+ <div style={{
19
+ display: 'flex',
20
+ justifyContent: 'center',
21
+ alignItems: 'center',
22
+ minHeight: '200px'
23
+ }}>
24
+ Loading...
25
+ </div>
26
+ );
27
+
28
+ /**
29
+ * Check if running in Electron
30
+ */
31
+ const isElectron = (): boolean => {
32
+ try {
33
+ return JSON.parse(getEnv('IS_ELECTRON') || 'false');
34
+ } catch {
35
+ return false;
36
+ }
37
+ };
38
+
39
+ /**
40
+ * Create Dash Default Domain App Layout component (sync version)
41
+ * Wraps the default DASHAppLayout
42
+ */
43
+ export const createDashDefaultDomainAppLayout = () => {
44
+ const DashDefaultDomainAppLayout = <U, A>(props: IDomainAppLayout<U, A>): React.JSX.Element => {
45
+ const { ThemeComponent, children } = props;
46
+ return (
47
+ <DASHAppLayout ThemeComponent={ThemeComponent}>
48
+ {children}
49
+ </DASHAppLayout>
50
+ );
51
+ };
52
+
53
+ return DashDefaultDomainAppLayout;
54
+ };
55
+
56
+ /**
57
+ * Create Dash Default Domain App Layout with Electron IPC support
58
+ * Wraps with IPCMessageBrokerProvider when in Electron
59
+ */
60
+ export const createDashDefaultDomainAppLayoutWithIPC = () => {
61
+ const DashDefaultDomainAppLayout = <U, A>(props: IDomainAppLayout<U, A>): React.JSX.Element => {
62
+ const { ThemeComponent, children } = props;
63
+ const inElectron = isElectron();
64
+
65
+ const LayoutContent = inElectron ? (
66
+ <Suspense fallback={<DashDefaultLayoutLoadingFallback />}>
67
+ <IPCMessageBrokerProvider>
68
+ {children}
69
+ </IPCMessageBrokerProvider>
70
+ </Suspense>
71
+ ) : (
72
+ children
73
+ );
74
+
75
+ return (
76
+ <DASHAppLayout ThemeComponent={ThemeComponent}>
77
+ {LayoutContent}
78
+ </DASHAppLayout>
79
+ );
80
+ };
81
+
82
+ return DashDefaultDomainAppLayout;
83
+ };
84
+
85
+ /**
86
+ * Hook to get memoized Dash Default DomainAppLayout
87
+ */
88
+ export const useDashDefaultDomainAppLayout = () => {
89
+ return useCallback(<U, A>(props: IDomainAppLayout<U, A>): React.JSX.Element => {
90
+ const { ThemeComponent, children } = props;
91
+ return (
92
+ <DASHAppLayout ThemeComponent={ThemeComponent}>
93
+ {children}
94
+ </DASHAppLayout>
95
+ );
96
+ }, []);
97
+ };
98
+
99
+ /**
100
+ * Hook to get memoized Dash Default DomainAppLayout with Electron IPC support
101
+ */
102
+ export const useDashDefaultDomainAppLayoutWithIPC = () => {
103
+ const inElectron = isElectron();
104
+
105
+ return useCallback(<U, A>(props: IDomainAppLayout<U, A>): React.JSX.Element => {
106
+ const { ThemeComponent, children } = props;
107
+
108
+ const LayoutContent = inElectron ? (
109
+ <Suspense fallback={<DashDefaultLayoutLoadingFallback />}>
110
+ <IPCMessageBrokerProvider>
111
+ {children}
112
+ </IPCMessageBrokerProvider>
113
+ </Suspense>
114
+ ) : (
115
+ children
116
+ );
117
+
118
+ return (
119
+ <DASHAppLayout ThemeComponent={ThemeComponent}>
120
+ {LayoutContent}
121
+ </DASHAppLayout>
122
+ );
123
+ }, [inElectron]);
124
+ };
125
+
126
+ export default createDashDefaultDomainAppLayout;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Layout Extensions Index
3
+ *
4
+ * Layout-related configurations and components.
5
+ */
6
+
7
+ export {
8
+ createDashDefaultDomainAppLayout,
9
+ createDashDefaultDomainAppLayoutWithIPC,
10
+ useDashDefaultDomainAppLayout,
11
+ useDashDefaultDomainAppLayoutWithIPC
12
+ } from './dashDefaultDomainAppLayout';
@@ -0,0 +1,99 @@
1
+ import { useContext, useEffect, useState } from 'react';
2
+ import { Notification } from 'react-admin';
3
+ import type { ILaravelEchoManager } from 'dash-admin/src/contexts/com/LaravelEchoMgr';
4
+ import useLaravelEcho from 'dash-admin/src/contexts/com/useLaravelEcho';
5
+ import { useAuthContext } from 'dash-admin/src/contexts/auth/AuthContext';
6
+ import type { IAuthContext } from 'dash-admin/src/contexts/auth';
7
+ import { IDashNotificationPayloadBase } from 'dash-admin/src/interfaces/communication/INotification';
8
+
9
+
10
+ export const DashDefaultReactAdminNotification = () => {
11
+ return <Notification
12
+ className='dash-notification'
13
+ autoHideDuration={8000}
14
+ multiLine={true}
15
+ anchorOrigin={{ vertical: 'top', horizontal: 'right' }}
16
+ />
17
+ };
18
+
19
+ const DashDefaultWSMessagesManager = (): ILaravelEchoManager => {
20
+
21
+ const [events, setEvents] = useState<IDashNotificationPayloadBase[]>([]);
22
+ const [lastEvent, setLastEvent] = useState<IDashNotificationPayloadBase>(null);
23
+ const authContext: IAuthContext = useAuthContext();
24
+
25
+ const [userId, setUserId] = useState(null);
26
+ const [tenantId, setTenantId] = useState(null);
27
+
28
+
29
+ useEffect(() => {
30
+
31
+ if (!authContext?.user) {
32
+ return;
33
+ }
34
+
35
+
36
+ setUserId(authContext.user.id);
37
+ setTenantId(authContext.user.tenant_id);
38
+
39
+
40
+
41
+ }, [authContext])
42
+
43
+ const clear = () => {
44
+ setLastEvent(null);
45
+ };
46
+
47
+
48
+ const { echoChannel: channel2,
49
+ isConnected: isConnected2,
50
+ lastEvent: event2,
51
+ ping: pingConnection2,
52
+ addListener: addListener2,
53
+ removeListener: reoveListener2 } = useLaravelEcho({
54
+ type: 'private',
55
+ channel: userId ? `user.${userId}` : null,
56
+ enabled: !!userId // Only enable if userId exists
57
+ });
58
+
59
+ const { echoChannel: channel3,
60
+ isConnected: isConnected3,
61
+ lastEvent: event3,
62
+ ping: pingConnection3,
63
+ addListener: addListener3,
64
+ removeListener: reoveListener3 } = useLaravelEcho({
65
+ type: 'private',
66
+ channel: tenantId ? `tenant.${tenantId}.system` : null,
67
+ enabled: !!tenantId // Only enable if tenantId exists
68
+ });
69
+
70
+ useEffect(() => {
71
+ console.log("Private Tenant Message", event2);
72
+ const _lastEvent = event3?.data;
73
+ console.log(_lastEvent);
74
+ setLastEvent(_lastEvent);
75
+
76
+ }, [event3]);
77
+
78
+
79
+ useEffect(() => {
80
+ console.log("Private User Message", event2);
81
+ const _lastEvent = event2?.data;
82
+ console.log(_lastEvent);
83
+ setLastEvent(_lastEvent);
84
+
85
+ }, [event2]);
86
+
87
+
88
+ useEffect(() => {
89
+
90
+ setEvents((prev) => [...prev, lastEvent])
91
+ }, [lastEvent])
92
+
93
+ return {
94
+ events,
95
+ lastEvent,
96
+ clear
97
+ };
98
+ };
99
+ export default DashDefaultWSMessagesManager;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Managers Index
3
+ *
4
+ * Manager components for handling various app-level concerns.
5
+ */
6
+
7
+ export { default as DashDefaultWSMessagesManager, DashDefaultReactAdminNotification } from './DashDefaultWSMessagesManager';