@dashadmin/dash-admin 1.3.73 → 1.3.74-srcfree.1

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 (289) hide show
  1. package/dist/components/tenant/TenancyPlan.js +307 -0
  2. package/dist/systemResources.js +18 -2
  3. package/package.json +25 -22
  4. package/src/AppAsyncWrapper.tsx +0 -42
  5. package/src/AppWrapper.tsx +0 -45
  6. package/src/DASHAdmin.tsx +0 -502
  7. package/src/DASHAdmin.tsx.old +0 -456
  8. package/src/RoutingWrapper.tsx +0 -143
  9. package/src/classes/DASHStorageClass.tsx +0 -8
  10. package/src/components/Input/RichTextField.tsx +0 -27
  11. package/src/components/Redirect.tsx +0 -46
  12. package/src/components/avatar/Avatar.tsx +0 -71
  13. package/src/components/avatar/SingleImageUploader.tsx +0 -107
  14. package/src/components/currency/Format.tsx +0 -79
  15. package/src/components/custom/Redirect.tsx +0 -23
  16. package/src/components/error/Error.tsx +0 -168
  17. package/src/components/geocoding/GeocodingField.tsx +0 -167
  18. package/src/components/i18n/BridgedLocalesMenuButton.tsx +0 -160
  19. package/src/components/i18n/LangSwitcher.tsx +0 -204
  20. package/src/components/loader/GlobalLoader.tsx +0 -49
  21. package/src/components/logs/LogFile.tsx +0 -88
  22. package/src/components/logs/LogFileById.tsx +0 -68
  23. package/src/components/logs/LogViewer.tsx +0 -43
  24. package/src/components/menu/AppMenu.tsx +0 -22
  25. package/src/components/menu/CustomMenuItemLink.tsx +0 -61
  26. package/src/components/menu/DarkToggleMode.tsx +0 -65
  27. package/src/components/menu/LanguageToggleMode.tsx +0 -120
  28. package/src/components/misc/CustomImageInput.tsx +0 -62
  29. package/src/components/misc/DASHGlobalErrorHandler.tsx +0 -194
  30. package/src/components/misc/DarkModeSwitcher.tsx +0 -112
  31. package/src/components/misc/HorizontalScroller.tsx +0 -225
  32. package/src/components/misc/LanguageSwitcher.tsx +0 -199
  33. package/src/components/misc/MUIHtmlToolTip.tsx +0 -15
  34. package/src/components/misc/MuiSimpleJsonTable.tsx +0 -279
  35. package/src/components/misc/MultiLevelTable.tsx +0 -229
  36. package/src/components/misc/NoResults.tsx +0 -28
  37. package/src/components/misc/PDFViewer.tsx +0 -85
  38. package/src/components/navigation/Breadcrumbs.tsx +0 -220
  39. package/src/components/navigation/BreadcrumbsManager.tsx +0 -310
  40. package/src/components/navigation/index.tsx +0 -5
  41. package/src/components/panel/Error.tsx +0 -168
  42. package/src/components/permission/AvailablePermissionsContext.tsx +0 -173
  43. package/src/components/permission/PermissionsSelector.tsx +0 -834
  44. package/src/components/permission/PermissionsSelectorList.tsx +0 -473
  45. package/src/components/permission/tsx +0 -0
  46. package/src/components/racustombuttons/CustomRAButton.tsx +0 -87
  47. package/src/components/racustombuttons/QuickButton.tsx +0 -117
  48. package/src/components/racustombuttons/QuickEditButton.tsx +0 -115
  49. package/src/components/racustombuttons/QuickIconButton.tsx +0 -122
  50. package/src/components/scrollbar/Scrollbar.tsx +0 -31
  51. package/src/components/selects/MultiSelect.tsx +0 -53
  52. package/src/components/selects/RASearchableSelect.tsx +0 -282
  53. package/src/components/selects/RASearchableSelectChips.tsx +0 -308
  54. package/src/components/selects/SearchableSelect.tsx +0 -139
  55. package/src/components/serviceAccount/ApiKeyRevealDialog.tsx +0 -129
  56. package/src/components/serviceAccount/ServiceAccountStatusSwitch.tsx +0 -99
  57. package/src/components/subscription/BillingCycleSelectInput.tsx +0 -68
  58. package/src/components/subscription/PlanAddonsSettings.tsx +0 -563
  59. package/src/components/subscription/PlanAuditLog.tsx +0 -453
  60. package/src/components/subscription/PlanFeaturesSettings.tsx +0 -243
  61. package/src/components/subscription/PlanLimitsSettings.tsx +0 -230
  62. package/src/components/subscription/PlanMetadataSettings.tsx +0 -306
  63. package/src/components/subscription/PlanPricesSettings.tsx +0 -307
  64. package/src/components/subscription/index.ts +0 -7
  65. package/src/components/svgelements/SvgLoading.tsx +0 -229
  66. package/src/components/svgelements/SvgLogo.tsx +0 -53
  67. package/src/components/svgelements/SvgLogoMin.tsx +0 -64
  68. package/src/components/svgelements/SvgShipping.tsx +0 -673
  69. package/src/components/tenancy/GlobalTenantWrapper.tsx +0 -84
  70. package/src/components/tenancy/TenantSwitcher.tsx +0 -514
  71. package/src/components/tenant/AvailablePermissionsContext.tsx +0 -0
  72. package/src/components/tenant/SettingsSections.tsx +0 -151
  73. package/src/components/tenant/TenancySettings.tsx +0 -122
  74. package/src/components/tenant/TenantAttributes.tsx +0 -153
  75. package/src/components/tenant/TenantAttributesContext.tsx +0 -163
  76. package/src/components/tenant/TenantSelector.tsx +0 -142
  77. package/src/components/tenant/TenantSettings.tsx +0 -184
  78. package/src/components/tenant/TenantSettingsContext.tsx +0 -165
  79. package/src/components/tenant/TenantTheme.tsx +0 -172
  80. package/src/components/user/AvatarComponent.tsx +0 -317
  81. package/src/components/user/TenantAvatarComponent.tsx +0 -99
  82. package/src/components/user/UserPreferences.tsx +0 -677
  83. package/src/config/ACTIONS.tsx +0 -26
  84. package/src/config/ConstantsService.tsx +0 -44
  85. package/src/config/DASHAdminSystemConstants.tsx +0 -183
  86. package/src/config/PARSERS.tsx +0 -9
  87. package/src/contexts/DashQueryClientContext.tsx +0 -113
  88. package/src/contexts/DashResourceContext.tsx +0 -34
  89. package/src/contexts/I18nBridgeContext.tsx +0 -156
  90. package/src/contexts/I18nBridgeSetter.tsx +0 -39
  91. package/src/contexts/I18nReduxSync.tsx +0 -27
  92. package/src/contexts/SubscriptionPlanFormatsProvider.tsx +0 -217
  93. package/src/contexts/SystemRequestsCache.tsx +0 -215
  94. package/src/contexts/auth/AuthContext.tsx +0 -567
  95. package/src/contexts/auth/AuthContextLocalStorage.tsx +0 -140
  96. package/src/contexts/auth/DASHAuthenticationService.tsx +0 -915
  97. package/src/contexts/auth/WindowContext.tsx +0 -15
  98. package/src/contexts/auth/index.tsx +0 -3
  99. package/src/contexts/com/FCMContext.tsx +0 -415
  100. package/src/contexts/com/LaravelEchoContext.tsx +0 -41
  101. package/src/contexts/com/LaravelEchoMgr.tsx +0 -155
  102. package/src/contexts/com/components/DefaultNotificationComponent.tsx +0 -20
  103. package/src/contexts/com/components/EchoNotificationsCenter.tsx +0 -65
  104. package/src/contexts/com/components/NotificationAttributesTable.tsx +0 -54
  105. package/src/contexts/com/components/NotificationRenderer.tsx +0 -42
  106. package/src/contexts/com/components/NotificationsWidget.tsx +0 -182
  107. package/src/contexts/com/components/notificationFormats.tsx +0 -50
  108. package/src/contexts/com/useLaravelEcho.tsx +0 -432
  109. package/src/contexts/dictionary/DictionaryContext.tsx +0 -94
  110. package/src/declarations.d.ts +0 -17
  111. package/src/default-theme/DASHAppProviders.tsx +0 -117
  112. package/src/default-theme/DashThemeContext.tsx +0 -209
  113. package/src/default-theme/DashThemeContext.tsx.fast +0 -143
  114. package/src/default-theme/DashThemeContext.tsx.old +0 -306
  115. package/src/default-theme/DashThemeHelperProvider.tsx +0 -98
  116. package/src/default-theme/DomainAppLayout.tsx +0 -166
  117. package/src/default-theme/DomainHeader.tsx +0 -162
  118. package/src/default-theme/DomainTheme.tsx +0 -59
  119. package/src/default-theme/FullLayoutMarkup.tsx +0 -231
  120. package/src/default-theme/StaticLayout.tsx +0 -47
  121. package/src/default-theme/index.tsx +0 -11
  122. package/src/default-theme/menu/AppDashboardGrid.tsx +0 -279
  123. package/src/default-theme/menu/AppMaterialMenu.tsx +0 -546
  124. package/src/default-theme/menu/AppMenuComponents/SubmenuPortal.tsx +0 -61
  125. package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItem.tsx +0 -264
  126. package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItems.tsx +0 -31
  127. package/src/default-theme/menu/AppMenuComponents/expanded/CollapsableSidebarMenu.tsx +0 -293
  128. package/src/default-theme/menu/AppMenuComponents/expanded/SidebarItem.tsx +0 -92
  129. package/src/default-theme/menu/AppMenuComponents/getItem.tsx +0 -17
  130. package/src/default-theme/menu/AppMenuComponents/interfaces.tsx +0 -41
  131. package/src/default-theme/menu/AppMenuComponents/submenuConstants.ts +0 -90
  132. package/src/default-theme/menu/AppSidebarMaterial.tsx +0 -339
  133. package/src/default-theme/menu/SidebarActions.tsx +0 -84
  134. package/src/default-theme/updateDomCssVariables.tsx +0 -176
  135. package/src/helpers/checkRole.tsx +0 -66
  136. package/src/helpers/parseAxiosError.tsx +0 -41
  137. package/src/hooks/audio/useAudio.tsx +0 -39
  138. package/src/hooks/axios.tsx +0 -165
  139. package/src/hooks/data/useDashboardStats.tsx +0 -65
  140. package/src/hooks/data/usePackageByClientsStats.tsx +0 -44
  141. package/src/hooks/data/usePackageByCommunesStats.tsx +0 -44
  142. package/src/hooks/data/usePackageStats.tsx +0 -69
  143. package/src/hooks/data/usePackageWithdrawDetails.tsx +0 -61
  144. package/src/hooks/data/useStats.tsx +0 -86
  145. package/src/hooks/isCurrentPath.tsx +0 -22
  146. package/src/hooks/notifications/WSMessagesManager.tsx +0 -152
  147. package/src/hooks/notifications/WSPusherManager.tsx +0 -92
  148. package/src/hooks/useBreadcrumbs.tsx +0 -329
  149. package/src/hooks/useClickOutside.tsx +0 -57
  150. package/src/hooks/useFormPersistance.tsx +0 -150
  151. package/src/hooks/useGlobalErrorMediator.tsx +0 -43
  152. package/src/hooks/useGlobalLoaderMgr.tsx +0 -21
  153. package/src/hooks/useHash.tsx +0 -27
  154. package/src/hooks/useLocalStorage.tsx +0 -196
  155. package/src/hooks/usePolyglotTranslation.tsx +0 -62
  156. package/src/hooks/usePrevious.tsx +0 -9
  157. package/src/hooks/usePrintSelected.tsx +0 -37
  158. package/src/hooks/useVirtualHash.tsx +0 -33
  159. package/src/hooks/window/useWindowSize.tsx +0 -36
  160. package/src/index.tsx +0 -134
  161. package/src/interfaces/IAppResourceConfig.tsx +0 -20
  162. package/src/interfaces/Log.tsx +0 -16
  163. package/src/interfaces/Tenant.tsx +0 -25
  164. package/src/interfaces/communication/IActions.tsx +0 -5
  165. package/src/interfaces/communication/INotification.tsx +0 -21
  166. package/src/interfaces/communication/IPayload.tsx +0 -3
  167. package/src/interfaces/communication/IRequestAction.tsx +0 -10
  168. package/src/interfaces/communication/IRequestPayload.tsx +0 -7
  169. package/src/interfaces/communication/IResponseAction.tsx +0 -7
  170. package/src/interfaces/misc/IAny.tsx +0 -3
  171. package/src/interfaces/misc/IFlashMessage.tsx +0 -10
  172. package/src/interfaces/navigation/IAppMenu.ts +0 -14
  173. package/src/interfaces/navigation/ICollapsableSidebarMenu.ts +0 -12
  174. package/src/interfaces/navigation/IMenuItem.ts +0 -16
  175. package/src/interfaces/notifications/IModel.tsx +0 -6
  176. package/src/interfaces/notifications/IModelField.tsx +0 -8
  177. package/src/interfaces/notifications/IUserNotification.tsx +0 -12
  178. package/src/interfaces/notifications/IUserNotificationData.tsx +0 -13
  179. package/src/interfaces/notifications/IUserNotificationPayload.tsx +0 -8
  180. package/src/interfaces/user/IGetAuth.tsx +0 -92
  181. package/src/interfaces/user/ITenantSettings.tsx +0 -3
  182. package/src/interfaces/user/IUser.tsx +0 -60
  183. package/src/interfaces/user/IUserSettings.tsx +0 -43
  184. package/src/interfaces.tsx +0 -6
  185. package/src/layout/AppLayout.tsx +0 -112
  186. package/src/layout/ApplicationLayout.tsx +0 -197
  187. package/src/layout/MotionWrapper.original.tsx +0 -236
  188. package/src/layout/MotionWrapper.tsx +0 -236
  189. package/src/layout/ResourceMenu.tsx +0 -164
  190. package/src/layout/ResoureLayout.tsx +0 -105
  191. package/src/layout/TransitionWrapper.tsx +0 -125
  192. package/src/pages/ChangePassword.tsx +0 -179
  193. package/src/pages/DASHLanding.tsx +0 -22
  194. package/src/pages/DASHLightWeightLogin.tsx +0 -611
  195. package/src/pages/DASHSimpleLogin.tsx +0 -260
  196. package/src/pages/Login.tsx +0 -111
  197. package/src/pages/Profile.tsx +0 -357
  198. package/src/pages/RecoverPassword.tsx +0 -175
  199. package/src/pages/SingleImageUploader.tsx +0 -55
  200. package/src/pages/VerifyAccount.tsx +0 -128
  201. package/src/providers/authProvider.tsx +0 -217
  202. package/src/providers/dataProvider.tsx +0 -672
  203. package/src/providers/i18n/en.ts +0 -646
  204. package/src/providers/i18n/es.ts +0 -652
  205. package/src/providers/i18n/languages.tsx +0 -8
  206. package/src/providers/i18n/mergeTranslations.ts +0 -53
  207. package/src/providers/i18nProvider.tsx +0 -23
  208. package/src/react-admin-dash/RADashComponent.tsx +0 -240
  209. package/src/react-admin-dash/Resource.tsx +0 -77
  210. package/src/resources/Brand/BrandResource.tsx +0 -130
  211. package/src/resources/DASHResourceLoader.ts +0 -180
  212. package/src/resources/Log/LogResource.tsx +0 -73
  213. package/src/resources/Tenant/ImpersonateTenantResource.tsx +0 -113
  214. package/src/resources/Trash/TrashTemplate.tsx +0 -180
  215. package/src/resources/User/components/AvatarUploadField.tsx +0 -57
  216. package/src/resources/User/components/PasswordFields.tsx +0 -73
  217. package/src/resources/User/getProfileMenu.ts +0 -57
  218. package/src/resources/User/profileResource.tsx +0 -51
  219. package/src/resources/User/userLayout.tsx +0 -62
  220. package/src/resources/User/userResource.tsx +0 -111
  221. package/src/resources/User/userSchema.tsx +0 -213
  222. package/src/resources/User/usersFilters.tsx +0 -21
  223. package/src/resources.tsx +0 -280
  224. package/src/schemas/log.tsx +0 -45
  225. package/src/schemas/notification.tsx +0 -42
  226. package/src/schemas/permissions.tsx +0 -44
  227. package/src/schemas/roles.tsx +0 -48
  228. package/src/schemas/rolesDataGrid.tsx +0 -48
  229. package/src/schemas/subscription/components/SubscriptionActions.tsx +0 -153
  230. package/src/schemas/subscription/components/SubscriptionPaymentHistory.tsx +0 -127
  231. package/src/schemas/subscription/components/SubscriptionPlanFeatures.tsx +0 -162
  232. package/src/schemas/subscription/components/SubscriptionPlanPreview.tsx +0 -141
  233. package/src/schemas/subscription/components/SubscriptionPlanStats.tsx +0 -318
  234. package/src/schemas/subscription/components/SubscriptionStatusIndicator.tsx +0 -72
  235. package/src/schemas/subscription/subscriptionPlanSchema.tsx +0 -185
  236. package/src/schemas/subscription/subscriptionSchema.tsx +0 -152
  237. package/src/schemas/subscriptionPlan.ts +0 -422
  238. package/src/schemas/tenant.tsx +0 -129
  239. package/src/schemas/tenantUser.tsx +0 -96
  240. package/src/schemas/tenant_superadmin.tsx +0 -119
  241. package/src/schemas/user.tsx +0 -26
  242. package/src/systemResources.old.tsx +0 -928
  243. package/src/systemResources.tsx +0 -1369
  244. package/src/templates/ResourceTemplate.tsx +0 -240
  245. package/src/templates/ResourceTemplate.tsx.memoized_experiment +0 -350
  246. package/src/templates/ResourceTemplate.tsx.original +0 -396
  247. package/src/templates/ResourceTemplateCreate.tsx +0 -182
  248. package/src/templates/ResourceTemplateEdit.tsx +0 -176
  249. package/src/templates/ResourceTemplateFull.tsx +0 -581
  250. package/src/templates/ResourceTemplateList.tsx +0 -340
  251. package/src/templates/ResourceTemplateOld.tsx.bkup +0 -567
  252. package/src/templates/ResourceTemplateShow.tsx +0 -88
  253. package/src/templates/TrashTemplate.tsx +0 -179
  254. package/src/tenantResources.tsx +0 -223
  255. package/src/test_portal_bubbles.tsx +0 -40
  256. package/src/theme/AppHeader.tsx +0 -52
  257. package/src/theme/AppLayoutSetting.tsx +0 -33
  258. package/src/theme/AppLogo.tsx +0 -13
  259. package/src/theme/AppSidebar.tsx +0 -12
  260. package/src/theme/AppSidebarContent.tsx +0 -105
  261. package/src/theme/AppSidebarLogo.tsx +0 -48
  262. package/src/theme/components/PageTitle.tsx +0 -37
  263. package/src/utils/cache/CacheInvalidatorContext.tsx +0 -125
  264. package/src/utils/cache/CacheInvalidatorListenerComponent.tsx +0 -10
  265. package/src/utils/cache/useCacheInvalidatorListener.tsx +0 -27
  266. package/src/utils/convertFileToBase64.tsx +0 -9
  267. package/src/utils/convertToFile.tsx +0 -14
  268. package/src/utils/cookies.tsx +0 -33
  269. package/src/utils/dashDefaultQueryClient.tsx +0 -34
  270. package/src/utils/dataUrlToBlob.tsx +0 -30
  271. package/src/utils/deepReplace.tsx +0 -19
  272. package/src/utils/getProfileMenu.tsx +0 -41
  273. package/src/utils/getTenantSettings.tsx +0 -9
  274. package/src/utils/getType.tsx +0 -8
  275. package/src/utils/getUserSettings.tsx +0 -8
  276. package/src/utils/hasCode.tsx +0 -14
  277. package/src/utils/index.ts +0 -19
  278. package/src/utils/injectTenantStyles.ts +0 -28
  279. package/src/utils/isComponent.tsx +0 -45
  280. package/src/utils/navEvents.tsx +0 -91
  281. package/src/utils/prototypes.tsx +0 -5
  282. package/src/utils/regexp.tsx +0 -4
  283. package/src/utils/resolveObjectPath.tsx +0 -4
  284. package/src/utils/setNativeValue.tsx +0 -24
  285. package/src/utils/slugify.tsx +0 -11
  286. package/src/utils/validators/emailValidator.tsx +0 -6
  287. package/src/utils/validators/requiredValidator.tsx +0 -5
  288. package/src/utils/validators/rutValidator.tsx +0 -31
  289. package/src/utils/validators.tsx +0 -96
@@ -1,65 +0,0 @@
1
- import React, { useEffect } from 'react';
2
- import { useDispatch } from 'react-redux';
3
- import { LightMode, DarkMode } from '@mui/icons-material';
4
- import { dashStorage } from 'dash-utils';
5
-
6
- import {
7
- DASH_REDUX_ACTIONS,
8
- } from 'dash-admin-state';
9
- import { Avatar, useColorScheme } from '@mui/material';
10
- import { DashThemeHelperProvider } from '../../default-theme';
11
-
12
- const DarkToggleMode = () => {
13
- const { mode, setMode } = useColorScheme();
14
- const dispatch = useDispatch();
15
-
16
- // Determine display mode - fallback to stored theme or 'dark' if MUI returns undefined/system
17
- const effectiveMode = (mode === 'light' || mode === 'dark') ? mode : (dashStorage.getItem('theme') || 'dark');
18
- const darkMode = effectiveMode === 'dark';
19
-
20
- const onClick = () => {
21
- const newMode = effectiveMode === 'dark' ? 'light' : 'dark';
22
-
23
- // Update all systems: MUI, Redux, and dashStorage
24
- setMode(newMode);
25
- dashStorage.setItem('theme', newMode);
26
- document.documentElement.setAttribute('data-theme', newMode);
27
-
28
- dispatch(DASH_REDUX_ACTIONS.toggleThemeType(newMode));
29
- };
30
-
31
- // Sync on initial mount if MUI mode doesn't match stored theme
32
- useEffect(() => {
33
- const storedTheme = dashStorage.getItem('theme');
34
- if (storedTheme && (storedTheme === 'light' || storedTheme === 'dark') && mode !== storedTheme) {
35
- setMode(storedTheme as 'light' | 'dark');
36
- }
37
- }, []);
38
-
39
- return (
40
- <>
41
- <div className='dash-theme-mode-switcher' onClick={onClick}>
42
-
43
- <DashThemeHelperProvider>
44
- <Avatar
45
- sizes='small'
46
- sx={{ fontSize: '1rem' }}
47
- style={{
48
- width: '30px',
49
- height: '30px',
50
- minHeight: '30px'
51
- }}
52
- className='dash-icon-button-color dash-icon-button-bg'
53
- >
54
- {darkMode ? <LightMode /> : <DarkMode />}
55
- </Avatar>
56
-
57
- </DashThemeHelperProvider>
58
- </div>
59
-
60
-
61
- </>
62
- );
63
- };
64
-
65
- export default DarkToggleMode;
@@ -1,120 +0,0 @@
1
- import React, { useEffect, useState } from 'react';
2
- import { useSetLocale, useLocaleState } from 'react-admin';
3
- import { Language } from '@mui/icons-material';
4
- import { dashStorage } from 'dash-utils';
5
- import { Avatar, Menu, MenuItem, ListItemIcon, ListItemText } from '@mui/material';
6
- import { DashThemeHelperProvider } from '../../default-theme';
7
-
8
- interface LocaleOption {
9
- locale: string;
10
- languageId: string;
11
- name: string;
12
- icon: string;
13
- }
14
-
15
- const LanguageToggleMode = () => {
16
- const locale = useLocaleState();
17
- const setLocale = useSetLocale();
18
- const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
19
- const open = Boolean(anchorEl);
20
-
21
- // Available locales from main.tsx configuration
22
- const availableLocales: LocaleOption[] = [
23
- {
24
- locale: 'en',
25
- languageId: 'english',
26
- name: 'English',
27
- icon: '🇺🇸',
28
- },
29
- {
30
- locale: 'es',
31
- languageId: 'spanish',
32
- name: 'Español',
33
- icon: '🇪🇸',
34
- },
35
- ];
36
-
37
- const currentLocale = availableLocales.find(l => l.locale === locale) || availableLocales[1]; // Default to Spanish
38
-
39
- const handleClick = (event: React.MouseEvent<HTMLElement>) => {
40
- setAnchorEl(event.currentTarget);
41
- };
42
-
43
- const handleClose = () => {
44
- setAnchorEl(null);
45
- };
46
-
47
- const handleLocaleChange = (newLocale: string) => {
48
- // Update react-admin locale
49
- setLocale(newLocale);
50
-
51
- // Store in dashStorage for persistence
52
- dashStorage.setItem('locale', newLocale);
53
-
54
- // Close menu
55
- handleClose();
56
-
57
- console.log('Language changed to:', newLocale);
58
- };
59
-
60
- // Sync on initial mount if stored locale exists
61
- useEffect(() => {
62
- const storedLocale = dashStorage.getItem('locale');
63
- if (storedLocale && storedLocale !== locale) {
64
- setLocale(storedLocale);
65
- }
66
- }, []);
67
-
68
- return (
69
- <>
70
- <div
71
-
72
- onClick={handleClick}
73
- >
74
- <DashThemeHelperProvider>
75
- <Avatar
76
- sizes='small'
77
- sx={{ fontSize: '1rem', cursor: 'pointer' }}
78
- style={{
79
- width: '30px',
80
- height: '30px',
81
- minHeight: '30px'
82
- }}
83
- className='dash-icon-button-color dash-icon-button-bg'
84
- >
85
- <span style={{ fontSize: '1.2rem' }}>{currentLocale.icon}</span>
86
- </Avatar>
87
- </DashThemeHelperProvider>
88
- </div>
89
-
90
- <Menu
91
- anchorEl={anchorEl}
92
- open={open}
93
- onClose={handleClose}
94
- anchorOrigin={{
95
- vertical: 'bottom',
96
- horizontal: 'right',
97
- }}
98
- transformOrigin={{
99
- vertical: 'top',
100
- horizontal: 'right',
101
- }}
102
- >
103
- {availableLocales.map((localeOption) => (
104
- <MenuItem
105
- key={localeOption.locale}
106
- onClick={() => handleLocaleChange(localeOption.locale)}
107
- selected={localeOption.locale === locale}
108
- >
109
- <ListItemIcon>
110
- <span style={{ fontSize: '1.5rem' }}>{localeOption.icon}</span>
111
- </ListItemIcon>
112
- <ListItemText>{localeOption.name}</ListItemText>
113
- </MenuItem>
114
- ))}
115
- </Menu>
116
- </>
117
- );
118
- };
119
-
120
- export default LanguageToggleMode;
@@ -1,62 +0,0 @@
1
- import { IDashAutoAdminCustomFieldComponent } from 'dash-auto-admin';
2
- import React from 'react';
3
- import { useRecordContext } from 'react-admin';
4
- import CloudUploadIcon from '@mui/icons-material/CloudUpload';
5
- import { ImageInput } from 'react-admin';
6
- import { ImageField } from 'react-admin';
7
-
8
- const CustomImageInputView: React.FC<IDashAutoAdminCustomFieldComponent> = ({
9
- method,
10
- attribute,
11
- }) => {
12
- const record = useRecordContext();
13
-
14
- return record ? (
15
- <img src={record[attribute.listAttribute] || ''} alt='imagen' />
16
- ) : (
17
- <></>
18
- );
19
- };
20
- const ImagePlaceholder = ({ record, attribute }) => (
21
- <div style={{ padding: '30px', border: '4px dashed rgba(0, 0, 0, 0.5)', display: 'flex', alignItems: 'center', gap: '10px' }}>
22
- <img src={record?.[attribute.listAttribute] || ''} alt='imagen' />
23
- <CloudUploadIcon />
24
- Arrástre una imágen o haga click aquí para seleccionar
25
- </div>
26
- );
27
-
28
- const CustomImageInputEdit: React.FC<IDashAutoAdminCustomFieldComponent> = ({
29
- method,
30
- attribute,
31
- }) => {
32
- const record = useRecordContext();
33
- return (
34
- <>
35
- <ImageInput
36
- fullWidth
37
- placeholder={<ImagePlaceholder record={record} attribute={attribute} />}
38
- source={attribute.attribute}
39
- label={attribute.label}
40
- /* @ts-ignore */
41
- accept='image/*'
42
- >
43
- <ImageField source={/*attribute.listAttribute ||*/ `src`} title='title' />
44
- </ImageInput>
45
- </>
46
- );
47
- };
48
- const CustomImageInput = ({
49
- method,
50
- attribute,
51
- resourceConfig
52
- }: IDashAutoAdminCustomFieldComponent) => {
53
- switch (method) {
54
- case 'edit':
55
- case 'create':
56
- return <CustomImageInputEdit attribute={attribute} method={method} resourceConfig={resourceConfig} />;
57
- case 'view':
58
- return <CustomImageInputView attribute={attribute} method={method} resourceConfig={resourceConfig} />;
59
- }
60
- };
61
-
62
- export default CustomImageInput;
@@ -1,194 +0,0 @@
1
- import { useEffect, useState } from 'react';
2
- import { toast } from 'react-toastify';
3
- import { useDialog } from 'dash-dialog';
4
- import { AxiosError } from 'axios';
5
- import { IDashAutoAdminBackendError } from 'dash-axios-hook/src/interfaces/IDashAutoAdminBackendError';
6
-
7
- interface GlobalErrorHandlerEvent<T> {
8
- data: T;
9
- config?: { dialog?: boolean, toast?: boolean };
10
- origin?: string;
11
- }
12
-
13
- interface IDashGlobalError {
14
- status: number;
15
- body: any;
16
- message?: string;
17
- }
18
-
19
- const _checkError = (errorData: any): IDashGlobalError => {
20
- // Handle new AxiosError format from processAxiosError
21
- if (errorData.originalError && errorData.status && errorData.message) {
22
- const processedError = errorData as IDashAutoAdminBackendError;
23
-
24
- let errorMessage = processedError.message || "";
25
-
26
-
27
- // Add status-specific context if needed
28
- if (processedError.status >= 400 && processedError.status < 499) {
29
- switch (processedError.status) {
30
- case 401:
31
- errorMessage = '🚫 ' + errorMessage;
32
- break;
33
- case 403:
34
- errorMessage = '🔒 ' + errorMessage;
35
- break;
36
- case 404:
37
- errorMessage = '❌ ' + errorMessage;
38
- break;
39
- case 422:
40
- errorMessage = '⚠ ' + errorMessage;
41
- break;
42
- }
43
- }
44
-
45
- try {
46
- if (errorData?.originalError?.response?.data?.errors) {
47
- const validationErrors = errorData.originalError.response.data.errors;
48
- let errorMessages: string[] = [];
49
-
50
- if (Array.isArray(validationErrors)) {
51
- errorMessages = validationErrors.map(err => String(err));
52
- } else if (typeof validationErrors === 'object' && validationErrors !== null) {
53
- Object.values(validationErrors).forEach((value: any) => {
54
- if (typeof value === 'string') {
55
- errorMessages.push(value);
56
- } else if (Array.isArray(value)) {
57
- errorMessages.push(value.join(', '));
58
- } else if (typeof value === 'object' && value !== null) {
59
- errorMessages.push(JSON.stringify(value));
60
- }
61
- });
62
- } else if (typeof validationErrors === 'string') {
63
- errorMessages.push(validationErrors);
64
- }
65
-
66
- if (errorMessages.length > 0) {
67
- errorMessage += ' ' + errorMessages.join(', ');
68
- }
69
- }
70
- } catch (e) {
71
- console.error('error parsing validation errors', e);
72
- }
73
-
74
-
75
- return {
76
- status: processedError.status,
77
- body: errorMessage,
78
- message: processedError.message
79
- };
80
- }
81
-
82
- // Handle legacy error format
83
- let e: IDashGlobalError = { ...(errorData?.error ? errorData.error : {}) };
84
-
85
- let _extra = "";
86
- if (e.status >= 400 && e.status < 499) {
87
- if (e.status === 401) _extra = '🚫 ';
88
- if (e.status === 403) _extra = '🔒 ';
89
- if (e.status === 404) _extra = '❌ ';
90
- if (e.status === 422) _extra = '⚠ ';
91
-
92
- e = {
93
- status: e.status,
94
- body: _extra + (e.body ? " " + e.body : "")
95
- };
96
- }
97
-
98
- return e;
99
- };
100
-
101
- export interface IDASHGlobalErrorHandler {
102
- checkError?: (error: any) => IDashGlobalError;
103
- }
104
-
105
- const DASHGlobalErrorHandler: React.FC<IDASHGlobalErrorHandler> = ({ checkError }) => {
106
- const dialog = useDialog();
107
- const [disableNextDialog, setDisableNextDialog] = useState(false);
108
-
109
- const showError = (parsedError: IDashGlobalError, globalError: GlobalErrorHandlerEvent<any>) => {
110
- // Show toast if configured
111
- if (globalError.config?.toast) {
112
- toast.error(<>{parsedError.body}</>, {
113
- position: 'bottom-center',
114
- autoClose: 4000,
115
- hideProgressBar: false,
116
- closeOnClick: true,
117
- pauseOnHover: true,
118
- draggable: true,
119
- });
120
- }
121
-
122
- // Show dialog (default behavior unless explicitly disabled)
123
- if (globalError.config?.dialog !== false) {
124
- dialog({
125
- variant: 'danger',
126
- title: 'Error',
127
- content: parsedError.body
128
- });
129
- }
130
- };
131
-
132
- const errorChangeHandler = (event: any) => {
133
- const eventData = event.data || event;
134
-
135
- // Check if we have an error to process
136
- const hasError = eventData?.error ||
137
- eventData?.originalError ||
138
- (eventData?.status && eventData?.message);
139
-
140
-
141
- if (hasError) {
142
- if (!disableNextDialog) {
143
- try {
144
- const parsedError = checkError ? checkError(eventData) : _checkError(eventData);
145
- const globalErrorEvent: GlobalErrorHandlerEvent<any> = {
146
- data: eventData,
147
- config: eventData.config || { dialog: true, toast: false },
148
- origin: eventData.origin || 'Unknown'
149
- };
150
-
151
- showError(parsedError, globalErrorEvent);
152
- } catch (e) {
153
- console.error('Error processing global error:', e);
154
- // Fallback error display
155
- showError({
156
- status: 500,
157
- body: 'Error inesperado en la aplicación'
158
- }, {
159
- data: eventData,
160
- config: { dialog: true, toast: false }
161
- });
162
- }
163
- }
164
-
165
- // Reset the ignore flag after processing (or skipping) the error
166
- if (disableNextDialog) {
167
- setDisableNextDialog(false);
168
- }
169
- }
170
- };
171
-
172
- const ignoreNextDialogHandler = () => {
173
- setDisableNextDialog(true);
174
-
175
- // Safety timeout to reset the flag after 30 seconds
176
- setTimeout(() => {
177
- setDisableNextDialog(false);
178
- }, 30000);
179
- };
180
-
181
- useEffect(() => {
182
- window.addEventListener('DASHGlobalError', errorChangeHandler);
183
- window.addEventListener('DASHGlobalErrorIgnore', ignoreNextDialogHandler);
184
-
185
- return () => {
186
- window.removeEventListener('DASHGlobalError', errorChangeHandler);
187
- window.removeEventListener('DASHGlobalErrorIgnore', ignoreNextDialogHandler);
188
- };
189
- }, [disableNextDialog, checkError]);
190
-
191
- return <></>;
192
- };
193
-
194
- export default DASHGlobalErrorHandler;
@@ -1,112 +0,0 @@
1
- import React from 'react';
2
- import { useColorScheme } from '@mui/material';
3
- import { LightMode, DarkMode } from '@mui/icons-material';
4
- import { Avatar } from '@mui/material';
5
- import { useDispatch, useSelector } from 'react-redux';
6
- import { DASH_REDUX_ACTIONS, DASH_THEME_SETTINGS, IDASHAppState } from 'dash-admin-state';
7
- import {DashThemeHelperProvider} from '../../default-theme';
8
- const DarkModeSwitcher = () => {
9
-
10
- const dashThemeType = useSelector((state: IDASHAppState<any, any, any>) =>
11
- state.settings.themeType
12
- );
13
-
14
- const { mode, setMode } = useColorScheme();
15
- const dispatch = useDispatch();
16
- // Handle the case where mode might be 'system'
17
- const isDark = mode === 'dark';
18
-
19
- const onClick = () => {
20
- debugger;
21
- const newMode = isDark ? 'light' : 'dark';
22
- setMode(newMode);
23
-
24
- /* dispatch(DASH_REDUX_ACTIONS.toggleThemeType(
25
- isDark
26
- ? DASH_THEME_SETTINGS.THEME_TYPE_LIGHT
27
- : DASH_THEME_SETTINGS.THEME_TYPE_DARK,
28
- ));*/
29
-
30
-
31
- };
32
-
33
- // Don't render until mode is determined
34
- if (!mode) {
35
- return null;
36
- }
37
-
38
- return (
39
- <div onClick={onClick}>
40
-
41
- <DashThemeHelperProvider>
42
- <Avatar
43
- sizes='small'
44
- sx={{ fontSize: '1rem' }}
45
- style={{
46
- width: '30px',
47
- height: '30px',
48
- minHeight: '30px'
49
- }}
50
- className='dash-icon-button-color dash-icon-button-bg'
51
- >
52
- {isDark ? <LightMode /> : <DarkMode />}
53
- </Avatar>
54
- </DashThemeHelperProvider>
55
- </div>
56
- );
57
- };
58
-
59
- export default DarkModeSwitcher;
60
-
61
-
62
- /*
63
- import React from 'react';
64
- import { useDispatch, useSelector } from 'react-redux';
65
- import { LightMode, DarkMode } from '@mui/icons-material';
66
- import { Avatar } from '@mui/material';
67
-
68
- import {
69
- IDASHAppState,
70
- DASH_REDUX_ACTIONS,
71
- DASH_THEME_SETTINGS
72
- } from 'dash-admin-state';
73
-
74
- const DarkModeSwitcher = () => {
75
- const darkMode: boolean = useSelector((state: IDASHAppState<any, any, any>) =>
76
- state.settings.themeType === DASH_THEME_SETTINGS.THEME_TYPE_DARK
77
- ? true
78
- : false,
79
- );
80
- const dispatch = useDispatch();
81
-
82
- const onClick = () => {
83
- dispatch(
84
- DASH_REDUX_ACTIONS.toggleThemeType(
85
- darkMode
86
- ? DASH_THEME_SETTINGS.THEME_TYPE_LIGHT
87
- : DASH_THEME_SETTINGS.THEME_TYPE_DARK,
88
- ),
89
- );
90
- };
91
-
92
- return (
93
- <div className='dash-theme-avatar' onClick={onClick}>
94
-
95
- <Avatar
96
- sizes='small'
97
- sx={{ fontSize: '1rem' }}
98
- style={{
99
- width: '30px',
100
- height: '30px',
101
- minHeight: '30px'
102
- }}
103
- className='dash-theme-avatar-icon'
104
- >
105
- {darkMode ? <LightMode />: <DarkMode /> }
106
- </Avatar>
107
- </div>
108
- );
109
- };
110
-
111
- export default DarkModeSwitcher;
112
- */