@dashadmin/dash-app-common 1.3.25 → 1.3.28

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 (166) hide show
  1. package/README.md +35 -0
  2. package/dist/DashApp.js +176 -1
  3. package/dist/DashAppLoader.js +348 -3
  4. package/dist/DashDefaultResources.js +10 -1
  5. package/dist/components/DashDefaultPrivateApp.js +150 -1
  6. package/dist/components/DashDefaultPrivateResources.js +10 -1
  7. package/dist/components/DashDefaultPublicApp.js +20 -1
  8. package/dist/components/DashResourceLoader.js +245 -1
  9. package/dist/defaults/extensions/bootstrap/DashDefaultErrorBoundary.js +78 -1
  10. package/dist/defaults/extensions/bootstrap/dashDefaultInitializeApp.js +59 -1
  11. package/dist/defaults/extensions/bootstrap/index.js +24 -1
  12. package/dist/defaults/extensions/components/DashDefaultLoader.js +43 -2
  13. package/dist/defaults/extensions/components/dashDefaultAutoAdminComponents.js +67 -1
  14. package/dist/defaults/extensions/components/dashDefaultNotification.js +28 -1
  15. package/dist/defaults/extensions/components/dashDefaultStaticComponents.js +15 -1
  16. package/dist/defaults/extensions/components/index.js +13 -1
  17. package/dist/defaults/extensions/electron/dashDefaultIpcListeners.js +38 -1
  18. package/dist/defaults/extensions/electron/index.js +5 -1
  19. package/dist/defaults/extensions/hooks/index.js +12 -1
  20. package/dist/defaults/extensions/hooks/useDashDefaultLazyAutoAdminComponents.js +17 -1
  21. package/dist/defaults/extensions/hooks/useDashDefaultLazyI18nProvider.js +51 -1
  22. package/dist/defaults/extensions/hooks/useDashDefaultLazyResources.js +19 -1
  23. package/dist/defaults/extensions/hooks/useDashDefaultMountTracker.js +22 -1
  24. package/dist/defaults/extensions/hooks/useDashDefaultRoutePath.js +17 -1
  25. package/dist/defaults/extensions/i18n/dashDefaultI18nProvider.js +44 -1
  26. package/dist/defaults/extensions/i18n/dashDefaultTranslations.js +87 -1
  27. package/dist/defaults/extensions/i18n/index.js +24 -1
  28. package/dist/defaults/extensions/index.js +190 -1
  29. package/dist/defaults/extensions/layout/dashDefaultDomainAppLayout.js +58 -1
  30. package/dist/defaults/extensions/layout/index.js +12 -1
  31. package/dist/defaults/extensions/managers/DashDefaultWSMessagesManager.js +84 -1
  32. package/dist/defaults/extensions/managers/index.js +5 -1
  33. package/dist/defaults/extensions/providers/dashDefaultAuthProvider.js +220 -1
  34. package/dist/defaults/extensions/providers/dashDefaultDataProvider.js +395 -1
  35. package/dist/defaults/extensions/providers/index.js +24 -1
  36. package/dist/defaults/extensions/router/DashDefaultLanding.js +46 -1
  37. package/dist/defaults/extensions/router/dashDefaultPrivateRoutes.js +38 -1
  38. package/dist/defaults/extensions/router/dashDefaultPublicRoutes.js +65 -1
  39. package/dist/defaults/extensions/router/dashDefaultRouter.js +39 -1
  40. package/dist/defaults/extensions/router/dashDefaultSharedRoutes.js +40 -1
  41. package/dist/defaults/extensions/router/index.js +12 -1
  42. package/dist/defaults/extensions/state/dashDefaultAppCommon.js +57 -1
  43. package/dist/defaults/extensions/state/dashDefaultAppSettings.js +38 -1
  44. package/dist/defaults/extensions/state/dashDefaultInitialAppState.js +31 -1
  45. package/dist/defaults/extensions/state/dashDefaultLayoutSettings.js +48 -1
  46. package/dist/defaults/extensions/state/dashDefaultQueryClient.js +58 -1
  47. package/dist/defaults/extensions/state/dashDefaultResourcesIcons.js +24 -1
  48. package/dist/defaults/extensions/state/index.js +29 -1
  49. package/dist/defaults/extensions/styles/index.js +2 -1
  50. package/dist/defaults/extensions/theme/dashDefaultThemeOptions.js +74 -1
  51. package/dist/defaults/extensions/theme/index.js +6 -1
  52. package/dist/defaults/extensions/utils/IPCMessageBrokerContext.js +12 -1
  53. package/dist/defaults/extensions/utils/dashDefaultAuthProviderUtils.js +29 -1
  54. package/dist/defaults/extensions/utils/dashDefaultDataProviderUtils.js +37 -1
  55. package/dist/defaults/extensions/utils/dashDefaultNotificationsProcessor.js +149 -1
  56. package/dist/defaults/extensions/utils/index.js +44 -1
  57. package/dist/defaults/filters/demo/dashDefaultDemoFilters.js +36 -1
  58. package/dist/defaults/filters/demo/index.js +4 -1
  59. package/dist/defaults/filters/index.js +5 -1
  60. package/dist/defaults/index.js +14 -1
  61. package/dist/defaults/pages/Account/DashDefaultRegister.js +282 -1
  62. package/dist/defaults/pages/Account/DashDefaultSignUp.js +420 -1
  63. package/dist/defaults/pages/Account/DashDefaultSignUpSuccess.js +101 -1
  64. package/dist/defaults/pages/Account/index.js +8 -1
  65. package/dist/defaults/pages/DashDefaultLogin.js +218 -1
  66. package/dist/defaults/pages/Misc/DashDefaultNotFound.js +74 -1
  67. package/dist/defaults/pages/Misc/DashDefaultServerError.js +79 -1
  68. package/dist/defaults/pages/Misc/DashDefaultUnauthorized.js +90 -1
  69. package/dist/defaults/pages/Misc/index.js +8 -1
  70. package/dist/defaults/pages/Static/DashDefaultPrivacyPage.js +48 -1
  71. package/dist/defaults/pages/Static/DashDefaultStaticPage.js +55 -1
  72. package/dist/defaults/pages/Static/DashDefaultTermsPage.js +52 -1
  73. package/dist/defaults/pages/Static/index.js +8 -1
  74. package/dist/defaults/pages/index.js +25 -1
  75. package/dist/defaults/schemas/dashDefaultSchema.js +14 -1
  76. package/dist/defaults/schemas/demo/dashDefaultTodoSchema.js +24 -1
  77. package/dist/defaults/schemas/demo/index.js +4 -1
  78. package/dist/defaults/schemas/index.js +7 -1
  79. package/dist/filters/demo/todoFilters.js +36 -1
  80. package/dist/index.js +56 -5975
  81. package/dist/resources/demo/todoResource.js +58 -1
  82. package/dist/schemas/defaultSchema.js +14 -1
  83. package/dist/schemas/demo/todoSchema.js +24 -1
  84. package/package.json +132 -77
  85. package/src/DashApp.tsx +294 -0
  86. package/src/DashAppLoader.tsx +717 -0
  87. package/src/DashDefaultResources.tsx +10 -0
  88. package/src/components/DashDefaultPrivateApp.tsx +358 -0
  89. package/src/components/DashDefaultPrivateResources.tsx +10 -0
  90. package/src/components/DashDefaultPublicApp.tsx +40 -0
  91. package/src/components/DashResourceLoader.tsx +564 -0
  92. package/src/defaults/extensions/bootstrap/DashDefaultErrorBoundary.tsx +113 -0
  93. package/src/defaults/extensions/bootstrap/dashDefaultInitializeApp.ts +81 -0
  94. package/src/defaults/extensions/bootstrap/index.ts +32 -0
  95. package/src/defaults/extensions/components/DashDefaultLoader.tsx +59 -0
  96. package/src/defaults/extensions/components/dashDefaultAutoAdminComponents.tsx +49 -0
  97. package/src/defaults/extensions/components/dashDefaultNotification.tsx +37 -0
  98. package/src/defaults/extensions/components/dashDefaultStaticComponents.tsx +34 -0
  99. package/src/defaults/extensions/components/index.ts +17 -0
  100. package/src/defaults/extensions/electron/dashDefaultIpcListeners.ts +62 -0
  101. package/src/defaults/extensions/electron/index.ts +7 -0
  102. package/src/defaults/extensions/hooks/index.ts +11 -0
  103. package/src/defaults/extensions/hooks/useDashDefaultLazyAutoAdminComponents.ts +25 -0
  104. package/src/defaults/extensions/hooks/useDashDefaultLazyI18nProvider.ts +38 -0
  105. package/src/defaults/extensions/hooks/useDashDefaultLazyResources.ts +29 -0
  106. package/src/defaults/extensions/hooks/useDashDefaultMountTracker.ts +28 -0
  107. package/src/defaults/extensions/hooks/useDashDefaultRoutePath.ts +27 -0
  108. package/src/defaults/extensions/i18n/dashDefaultI18nProvider.ts +66 -0
  109. package/src/defaults/extensions/i18n/dashDefaultTranslations.ts +82 -0
  110. package/src/defaults/extensions/i18n/index.ts +22 -0
  111. package/src/defaults/extensions/index.ts +177 -0
  112. package/src/defaults/extensions/layout/dashDefaultDomainAppLayout.tsx +126 -0
  113. package/src/defaults/extensions/layout/index.ts +12 -0
  114. package/src/defaults/extensions/managers/DashDefaultWSMessagesManager.tsx +99 -0
  115. package/src/defaults/extensions/managers/index.ts +7 -0
  116. package/src/defaults/extensions/providers/dashDefaultAuthProvider.ts +256 -0
  117. package/src/defaults/extensions/providers/dashDefaultDataProvider.ts +513 -0
  118. package/src/defaults/extensions/providers/index.ts +25 -0
  119. package/src/defaults/extensions/router/DashDefaultLanding.tsx +51 -0
  120. package/src/defaults/extensions/router/dashDefaultPrivateRoutes.tsx +50 -0
  121. package/src/defaults/extensions/router/dashDefaultPublicRoutes.tsx +86 -0
  122. package/src/defaults/extensions/router/dashDefaultRouter.tsx +54 -0
  123. package/src/defaults/extensions/router/dashDefaultSharedRoutes.tsx +56 -0
  124. package/src/defaults/extensions/router/index.ts +13 -0
  125. package/src/defaults/extensions/state/dashDefaultAppCommon.ts +54 -0
  126. package/src/defaults/extensions/state/dashDefaultAppSettings.ts +29 -0
  127. package/src/defaults/extensions/state/dashDefaultInitialAppState.ts +75 -0
  128. package/src/defaults/extensions/state/dashDefaultLayoutSettings.ts +59 -0
  129. package/src/defaults/extensions/state/dashDefaultQueryClient.ts +59 -0
  130. package/src/defaults/extensions/state/dashDefaultResourcesIcons.tsx +23 -0
  131. package/src/defaults/extensions/state/index.ts +29 -0
  132. package/src/defaults/extensions/styles/index.ts +17 -0
  133. package/src/defaults/extensions/theme/dashDefaultThemeOptions.ts +89 -0
  134. package/src/defaults/extensions/theme/index.ts +7 -0
  135. package/src/defaults/extensions/utils/IPCMessageBrokerContext.tsx +22 -0
  136. package/src/defaults/extensions/utils/dashDefaultAuthProviderUtils.ts +36 -0
  137. package/src/defaults/extensions/utils/dashDefaultDataProviderUtils.ts +46 -0
  138. package/src/defaults/extensions/utils/dashDefaultNotificationsProcessor.tsx +208 -0
  139. package/src/defaults/extensions/utils/index.ts +42 -0
  140. package/src/defaults/filters/demo/dashDefaultDemoFilters.tsx +50 -0
  141. package/src/defaults/filters/demo/index.ts +6 -0
  142. package/src/defaults/filters/index.ts +11 -0
  143. package/src/defaults/index.ts +27 -0
  144. package/src/defaults/pages/Account/DashDefaultRegister.tsx +281 -0
  145. package/src/defaults/pages/Account/DashDefaultSignUp.tsx +492 -0
  146. package/src/defaults/pages/Account/DashDefaultSignUpSuccess.tsx +113 -0
  147. package/src/defaults/pages/Account/index.ts +8 -0
  148. package/src/defaults/pages/DashDefaultLogin.tsx +224 -0
  149. package/src/defaults/pages/Misc/DashDefaultNotFound.tsx +96 -0
  150. package/src/defaults/pages/Misc/DashDefaultServerError.tsx +102 -0
  151. package/src/defaults/pages/Misc/DashDefaultUnauthorized.tsx +116 -0
  152. package/src/defaults/pages/Misc/index.ts +8 -0
  153. package/src/defaults/pages/Static/DashDefaultPrivacyPage.tsx +85 -0
  154. package/src/defaults/pages/Static/DashDefaultStaticPage.tsx +75 -0
  155. package/src/defaults/pages/Static/DashDefaultTermsPage.tsx +69 -0
  156. package/src/defaults/pages/Static/index.ts +8 -0
  157. package/src/defaults/pages/index.ts +28 -0
  158. package/src/defaults/schemas/dashDefaultSchema.tsx +25 -0
  159. package/src/defaults/schemas/demo/dashDefaultTodoSchema.tsx +39 -0
  160. package/src/defaults/schemas/demo/index.ts +6 -0
  161. package/src/defaults/schemas/index.ts +14 -0
  162. package/src/filters/demo/todoFilters.tsx +39 -0
  163. package/src/index.ts +131 -0
  164. package/src/resources/demo/todoResource.tsx +68 -0
  165. package/src/schemas/defaultSchema.tsx +14 -0
  166. package/src/schemas/demo/todoSchema.tsx +27 -0
@@ -0,0 +1,281 @@
1
+ /**
2
+ * Default Register Page
3
+ *
4
+ * Basic registration page component that can be extended.
5
+ */
6
+ import React, { createRef, useEffect, useState } from 'react';
7
+ import { useDispatch } from 'react-redux';
8
+ import { useForm, FieldError } from 'react-hook-form';
9
+ import { Button, TextField, Grid, IconButton, Alert, Box } from '@mui/material';
10
+ import HomeIcon from '@mui/icons-material/Home';
11
+ import { useNavigate } from 'react-router-dom';
12
+ import { useNotify } from 'react-admin';
13
+ import ReCAPTCHA from 'react-google-recaptcha';
14
+ import { DASH_REDUX_ACTIONS } from 'dash-admin-state';
15
+ import DictionaryContext from 'dash-admin/src/contexts/dictionary/DictionaryContext';
16
+ import { useAxios } from 'dash-axios-hook';
17
+ import { useDialog } from 'dash-dialog';
18
+ import { DASHAppConstants } from 'dash-constants';
19
+ import { RutValidator } from 'dash-admin/src/utils/validators';
20
+ import FullLayoutMarkup from 'dash-admin/src/default-theme/FullLayoutMarkup';
21
+
22
+ interface DefaultRegisterPageProps {
23
+ /** Whether to show RUT field (Chile-specific) */
24
+ showRutField?: boolean;
25
+ /** Custom fields to include */
26
+ customFields?: React.ReactNode;
27
+ }
28
+
29
+ // Helper to extract error message
30
+ const getErrorMessage = (error: FieldError | undefined): string | undefined => {
31
+ return error?.message as string | undefined;
32
+ };
33
+
34
+ const DefaultRegisterPage: React.FC<DefaultRegisterPageProps> = ({
35
+ showRutField = true,
36
+ customFields
37
+ }) => {
38
+ const enableRecaptcha: boolean = DASHAppConstants.system.RECAPTCHA_ENABLED;
39
+ const recaptchaRef = createRef<ReCAPTCHA>();
40
+ const [recpatcha, setRecaptcha] = useState(null);
41
+ const [error, setError] = useState<string | null>(null);
42
+ const [isLoading, setIsLoading] = useState(false);
43
+
44
+ const dispatch = useDispatch();
45
+ const dialog = useDialog();
46
+ const dict = React.useContext(DictionaryContext);
47
+ const navigate = useNavigate();
48
+ const {
49
+ register,
50
+ handleSubmit,
51
+ setError: setFormError,
52
+ clearErrors,
53
+ formState: { errors },
54
+ } = useForm();
55
+ const axios = useAxios();
56
+ const notify = useNotify();
57
+
58
+ const onChangeRecaptcha = (value: string) => {
59
+ clearErrors('g-recaptcha-response');
60
+ setRecaptcha(value);
61
+ };
62
+
63
+ useEffect(() => {
64
+ dispatch(
65
+ DASH_REDUX_ACTIONS.updatePage({
66
+ title: null,
67
+ }),
68
+ );
69
+ }, []);
70
+
71
+ async function onSubmit(data) {
72
+ setIsLoading(true);
73
+ setError(null);
74
+
75
+ if (data.clientname) {
76
+ const bracketed_name = 'client[name]';
77
+ data[bracketed_name] = data.clientname;
78
+ delete data.clientname;
79
+ }
80
+
81
+ if (enableRecaptcha) {
82
+ const recaptchaValue =
83
+ recaptchaRef.current && recaptchaRef.current.getValue
84
+ ? recaptchaRef.current.getValue()
85
+ : recpatcha;
86
+ data = { ...data, 'g-recaptcha-response': recaptchaValue };
87
+ }
88
+
89
+ try {
90
+ const response = await axios.post('/auth/user/register', data, {
91
+ headers: { 'Content-Type': 'multipart/form-data' },
92
+ });
93
+
94
+ if (response.status >= 200) {
95
+ notify('User has been registered', { type: 'success' });
96
+ navigate('/');
97
+ } else {
98
+ setError('An error occurred, please try again');
99
+ }
100
+ } catch (error: any) {
101
+ for (const key in error) {
102
+ if (key === 'client.name') {
103
+ setFormError('clientname', {
104
+ type: 'custom',
105
+ message: dict.get(error[key], true),
106
+ });
107
+ }
108
+ setFormError(key, { type: 'custom', message: dict.get(error[key], true) });
109
+ }
110
+ } finally {
111
+ setIsLoading(false);
112
+ }
113
+ }
114
+
115
+ return (
116
+ <FullLayoutMarkup>
117
+ <form onSubmit={handleSubmit(onSubmit)} className="dash-app-login-form" autoComplete="on">
118
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, mb: 2 }}>
119
+ <IconButton
120
+ color="primary"
121
+ onClick={() => navigate('/')}
122
+ >
123
+ <HomeIcon />
124
+ </IconButton>
125
+ <h1 className="dash-app-login-form-title">Create Account</h1>
126
+ </Box>
127
+
128
+ {error && (
129
+ <Alert severity="error" sx={{ mb: 2 }}>
130
+ {error}
131
+ </Alert>
132
+ )}
133
+
134
+ <div className="dash-app-form-item">
135
+ <TextField
136
+ label="Email"
137
+ placeholder="Email"
138
+ required
139
+ {...register('email')}
140
+ type="email"
141
+ className="dash-app-form-item-input"
142
+ error={!!errors.email}
143
+ helperText={getErrorMessage(errors.email as FieldError)}
144
+ />
145
+ </div>
146
+
147
+ <div className="dash-app-form-item">
148
+ <TextField
149
+ label="Business Name"
150
+ placeholder="Business Name"
151
+ required
152
+ {...register('clientname')}
153
+ className="dash-app-form-item-input"
154
+ error={!!errors.clientname}
155
+ helperText={getErrorMessage(errors.clientname as FieldError)}
156
+ />
157
+ </div>
158
+
159
+ {showRutField && (
160
+ <div className="dash-app-form-item">
161
+ <TextField
162
+ label="RUT"
163
+ placeholder="11.111.111-1"
164
+ required
165
+ {...register('public_id', { validate: RutValidator })}
166
+ className="dash-app-form-item-input"
167
+ error={!!errors.public_id}
168
+ helperText={getErrorMessage(errors.public_id as FieldError) || (errors.public_id && 'Invalid RUT')}
169
+ />
170
+ </div>
171
+ )}
172
+
173
+ <div className="dash-app-form-item">
174
+ <TextField
175
+ label="First Name"
176
+ placeholder="First Name"
177
+ required
178
+ {...register('name')}
179
+ className="dash-app-form-item-input"
180
+ error={!!errors.name}
181
+ helperText={getErrorMessage(errors.name as FieldError)}
182
+ />
183
+ </div>
184
+
185
+ <div className="dash-app-form-item">
186
+ <TextField
187
+ label="Last Name"
188
+ placeholder="Last Name"
189
+ required
190
+ {...register('lastname')}
191
+ className="dash-app-form-item-input"
192
+ error={!!errors.lastname}
193
+ helperText={getErrorMessage(errors.lastname as FieldError)}
194
+ />
195
+ </div>
196
+
197
+ <div className="dash-app-form-item">
198
+ <TextField
199
+ label="Password"
200
+ placeholder="Password"
201
+ type="password"
202
+ required
203
+ {...register('password')}
204
+ className="dash-app-form-item-input"
205
+ error={!!errors.password}
206
+ helperText={getErrorMessage(errors.password as FieldError)}
207
+ />
208
+ </div>
209
+
210
+ <div className="dash-app-form-item">
211
+ <TextField
212
+ label="Confirm Password"
213
+ placeholder="Confirm Password"
214
+ type="password"
215
+ required
216
+ {...register('confirm_password')}
217
+ className="dash-app-form-item-input"
218
+ error={!!errors.confirm_password}
219
+ helperText={getErrorMessage(errors.confirm_password as FieldError)}
220
+ />
221
+ </div>
222
+
223
+ <div className="dash-app-form-item">
224
+ <TextField
225
+ label="Contact Phone"
226
+ placeholder="+1 234 567 8900"
227
+ required
228
+ {...register('phone')}
229
+ className="dash-app-form-item-input"
230
+ error={!!errors.phone}
231
+ helperText={getErrorMessage(errors.phone as FieldError)}
232
+ />
233
+ </div>
234
+
235
+ {customFields}
236
+
237
+ {enableRecaptcha && (
238
+ <div className="dash-app-form-item">
239
+ <ReCAPTCHA
240
+ ref={recaptchaRef}
241
+ sitekey={DASHAppConstants.system.RECAPTCHA_TOKEN}
242
+ onChange={onChangeRecaptcha}
243
+ />
244
+ {errors['g-recaptcha-response'] && (
245
+ <span style={{ color: 'red' }}>
246
+ {getErrorMessage(errors['g-recaptcha-response'] as FieldError)}
247
+ </span>
248
+ )}
249
+ </div>
250
+ )}
251
+
252
+ <div className="dash-app-form-item mt-1">
253
+ <Button
254
+ type="submit"
255
+ variant="contained"
256
+ fullWidth
257
+ disabled={isLoading || (!recpatcha && enableRecaptcha)}
258
+ sx={{ mb: 2 }}
259
+ >
260
+ {isLoading ? 'Creating Account...' : 'Create Account'}
261
+ </Button>
262
+ </div>
263
+
264
+ <div className="dash-app-form-item">
265
+ <Button
266
+ variant="text"
267
+ fullWidth
268
+ onClick={() => {
269
+ clearErrors();
270
+ navigate('/');
271
+ }}
272
+ >
273
+ Cancel
274
+ </Button>
275
+ </div>
276
+ </form>
277
+ </FullLayoutMarkup>
278
+ );
279
+ };
280
+
281
+ export default DefaultRegisterPage;