@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.
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,256 @@
1
+ /**
2
+ * Dash Default Auth Provider Extension
3
+ *
4
+ * This file wraps the dash-auto-admin DashAuthProvider factory,
5
+ * providing default app overrides and customizations.
6
+ */
7
+
8
+ import {
9
+ createDashAuthProvider,
10
+ type DashAuthProviderConfig,
11
+ type DashAuthProviderOverrides
12
+ } from 'dash-auto-admin';
13
+ import { getEnv } from 'dash-constants';
14
+ import { DASHAppConstants, DASHAdminSystemConstants } from 'dash-constants';
15
+ import { setAuthEvent } from 'dash-admin/src/contexts/auth';
16
+ import { AuthPersistenceService, syncDeviceStoreToLocalStorage, syncLocalStorageToDeviceStore } from 'dash-auth';
17
+ import { useAxios } from 'dash-axios-hook';
18
+ import { dashStorage } from 'dash-utils';
19
+ import { dashDefaultLogoutFromStorage } from '../utils/dashDefaultAuthProviderUtils';
20
+
21
+
22
+ /**
23
+ * Dash default auth provider configuration
24
+ */
25
+ export const dashDefaultAuthProviderConfig: DashAuthProviderConfig = {
26
+ useAxios: useAxios,
27
+ storage: dashStorage,
28
+ authPersistence: AuthPersistenceService,
29
+ syncToDeviceStore: syncLocalStorageToDeviceStore,
30
+ syncFromDeviceStore: syncDeviceStoreToLocalStorage,
31
+ setAuthEvent: setAuthEvent,
32
+ logoutFromStorage: dashDefaultLogoutFromStorage,
33
+ getAuthEndpoint: () => getEnv('APP_GETAUTH_ENDPOINT') || '/auth',
34
+ guestRole: DASHAppConstants.system.GUEST_ROLE,
35
+ enableTenantImpersonation: JSON.parse(
36
+ DASHAdminSystemConstants.system.ENABLE_TENANT_IMPERSONATION?.toString() || 'false'
37
+ ),
38
+ };
39
+
40
+ /**
41
+ * Dash default auth provider overrides
42
+ * These override the default implementations from dash-auto-admin
43
+ */
44
+ export const dashDefaultAuthProviderOverrides: DashAuthProviderOverrides = {
45
+ /**
46
+ * Dash default login implementation with Dash-specific logic
47
+ */
48
+ login: async ({ username, password }) => {
49
+ await syncDeviceStoreToLocalStorage();
50
+
51
+ const axios = useAxios();
52
+
53
+ if (!(username && password)) {
54
+ return Promise.reject();
55
+ }
56
+
57
+ try {
58
+ const loginResponse = await axios.post('/login', {
59
+ email: username,
60
+ password,
61
+ });
62
+
63
+ if (loginResponse.status >= 200 && loginResponse.status <= 299) {
64
+ const redirectTo = loginResponse.data.redirectTo;
65
+
66
+ if (loginResponse.data !== "") {
67
+ dashStorage.setItem('token', loginResponse.data.token);
68
+ }
69
+
70
+ try {
71
+ // Get complete auth data
72
+ const { data: auth } = await axios.get(getEnv('APP_GETAUTH_ENDPOINT'));
73
+
74
+ // Use AuthPersistenceService to save auth data
75
+ AuthPersistenceService.saveAuth(auth);
76
+
77
+ // Set basic localStorage for react-admin compatibility
78
+ dashStorage.setItem('authenticated', 'true');
79
+ dashStorage.setItem('user', JSON.stringify(auth.user));
80
+ dashStorage.setItem(
81
+ 'roles',
82
+ auth.user?.roles
83
+ ? JSON.stringify(auth.user.roles)
84
+ : JSON.stringify(DASHAppConstants.system.GUEST_ROLE),
85
+ );
86
+
87
+ // Trigger auth context update
88
+ setAuthEvent({
89
+ authenticated: true,
90
+ user: auth.user,
91
+ auth: auth.auth,
92
+ token: loginResponse.data.token,
93
+ roles: auth.user?.roles
94
+ });
95
+
96
+ await syncLocalStorageToDeviceStore();
97
+
98
+ // Handle redirect from backend response
99
+ if (redirectTo) {
100
+ return Promise.resolve({ redirectTo });
101
+ } else {
102
+ return Promise.resolve(auth);
103
+ }
104
+
105
+ } catch (error) {
106
+ console.error('Error getting user auth');
107
+ dashDefaultLogoutFromStorage("login get auth error");
108
+ return Promise.reject(error);
109
+ }
110
+ }
111
+ } catch (error) {
112
+ console.error(error);
113
+ dashDefaultLogoutFromStorage("login error logout");
114
+ return Promise.reject(error);
115
+ }
116
+
117
+ dashDefaultLogoutFromStorage("login default error logout");
118
+ return Promise.reject();
119
+ },
120
+
121
+ /**
122
+ * Dash default logout implementation
123
+ */
124
+ logout: async (params?: any, redirectTo?: string | false) => {
125
+ await dashDefaultLogoutFromStorage("logout");
126
+ return Promise.resolve(redirectTo || "/login");
127
+ },
128
+
129
+ /**
130
+ * Dash default getIdentity implementation
131
+ */
132
+ getIdentity: async () => {
133
+ const axios = useAxios();
134
+ const token = dashStorage.getItem('token');
135
+
136
+ if (!token) {
137
+ return Promise.reject('No token present');
138
+ }
139
+
140
+ try {
141
+ const { data: auth } = await axios.get(getEnv('APP_GETAUTH_ENDPOINT'));
142
+
143
+ dashStorage.setItem(
144
+ 'roles',
145
+ auth.user?.roles
146
+ ? JSON.stringify(auth.user.roles)
147
+ : JSON.stringify(DASHAppConstants.system.GUEST_ROLE),
148
+ );
149
+ dashStorage.setItem('authenticated', 'true');
150
+ dashStorage.setItem('user', JSON.stringify(auth.user));
151
+
152
+ if (
153
+ JSON.parse(
154
+ DASHAdminSystemConstants.system.ENABLE_TENANT_IMPERSONATION.toString(),
155
+ ) &&
156
+ auth.user?.tenant_id
157
+ ) {
158
+ dashStorage.setItem('tenant_id', auth.user?.tenant_id);
159
+ dashStorage.setItem('user_id', auth.user?.id);
160
+ }
161
+
162
+ return await Promise.resolve(auth);
163
+ } catch (error) {
164
+ dashDefaultLogoutFromStorage("get identity error logout");
165
+ return Promise.reject(error);
166
+ } finally {
167
+ await syncLocalStorageToDeviceStore();
168
+ }
169
+ },
170
+
171
+ /**
172
+ * Dash default checkAuth implementation
173
+ */
174
+ checkAuth: async () => {
175
+ const isAuthenticated = JSON.parse(dashStorage.getItem('authenticated') || 'false');
176
+ const user = JSON.parse(dashStorage.getItem('user') || 'null');
177
+
178
+ if (isAuthenticated && user?.id) {
179
+ const persistedAuth = AuthPersistenceService.getAuth();
180
+ if (persistedAuth) {
181
+ return Promise.resolve();
182
+ }
183
+ }
184
+
185
+ return Promise.reject();
186
+ },
187
+
188
+ /**
189
+ * Dash default checkError implementation with Dash error handling
190
+ */
191
+ checkError: (error) => {
192
+ const errorStatus = error?.response?.status;
193
+
194
+ window.dispatchEvent(
195
+ new MessageEvent('dash-global-loader', { data: false }),
196
+ );
197
+
198
+ if (errorStatus) {
199
+ const errors: any = {};
200
+ switch (errorStatus) {
201
+ case 400:
202
+ case 401:
203
+ case 403:
204
+ case 500:
205
+ window.dispatchEvent(
206
+ new MessageEvent('GlobalError', {
207
+ data: { error: error.response.data || error }
208
+ }),
209
+ );
210
+ return Promise.resolve();
211
+ case 422:
212
+ case 409:
213
+ errors.error =
214
+ 'An undefined error has occurred, please try again later';
215
+ if (error.response.data?.errors) {
216
+ Object.keys(error.response.data?.errors).forEach((key) => {
217
+ errors[key] = error.response.data?.errors[key].join(' , ');
218
+ });
219
+ } else if (error.response.data?.message) {
220
+ errors.error = error.response.data?.message;
221
+ }
222
+
223
+ window.dispatchEvent(
224
+ new MessageEvent('GlobalError', { data: { error: errors } }),
225
+ );
226
+ return Promise.resolve();
227
+ default:
228
+ window.dispatchEvent(
229
+ new MessageEvent('GlobalError', {
230
+ data: { error: error.response.data || error }
231
+ }),
232
+ );
233
+ return Promise.resolve();
234
+ }
235
+ } else {
236
+ const _errors: any = {};
237
+ Object.keys(error).forEach((key) => {
238
+ _errors[key] = Array.isArray(error[key])
239
+ ? error[key].join(' , ')
240
+ : error[key];
241
+ });
242
+ return Promise.resolve();
243
+ }
244
+ },
245
+ };
246
+
247
+ /**
248
+ * Create the dash default auth provider using the factory
249
+ * This combines the base implementation with app-specific overrides
250
+ */
251
+ export const dashDefaultAuthProvider = createDashAuthProvider(
252
+ dashDefaultAuthProviderConfig,
253
+ dashDefaultAuthProviderOverrides
254
+ );
255
+
256
+ export default dashDefaultAuthProvider;