@dashadmin/dash-admin 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.
- package/dist/AppAsyncWrapper.js +30 -1
- package/dist/AppWrapper.js +35 -1
- package/dist/DASHAdmin.js +312 -1
- package/dist/RoutingWrapper.js +76 -1
- package/dist/classes/DASHStorageClass.js +15 -1
- package/dist/components/Input/RichTextField.js +26 -1
- package/dist/components/Redirect.js +56 -1
- package/dist/components/avatar/Avatar.js +72 -1
- package/dist/components/avatar/SingleImageUploader.js +46 -1
- package/dist/components/currency/Format.js +71 -1
- package/dist/components/custom/Redirect.js +20 -1
- package/dist/components/error/Error.js +161 -1
- package/dist/components/geocoding/GeocodingField.js +133 -1
- package/dist/components/i18n/BridgedLocalesMenuButton.js +126 -1
- package/dist/components/i18n/LangSwitcher.js +196 -1
- package/dist/components/loader/GlobalLoader.js +71 -1
- package/dist/components/logs/LogFile.js +99 -1
- package/dist/components/logs/LogFileById.js +75 -1
- package/dist/components/logs/LogViewer.js +33 -1
- package/dist/components/menu/AppMenu.js +11 -1
- package/dist/components/menu/CustomMenuItemLink.js +77 -1
- package/dist/components/menu/DarkToggleMode.js +47 -1
- package/dist/components/menu/LanguageToggleMode.js +99 -1
- package/dist/components/misc/CustomImageInput.js +54 -1
- package/dist/components/misc/DASHGlobalErrorHandler.js +159 -1
- package/dist/components/misc/DarkModeSwitcher.js +40 -1
- package/dist/components/misc/LanguageSwitcher.js +193 -1
- package/dist/components/misc/MUIHtmlToolTip.js +50 -1
- package/dist/components/misc/MuiSimpleJsonTable.js +178 -1
- package/dist/components/misc/MultiLevelTable.js +124 -1
- package/dist/components/misc/NoResults.js +17 -1
- package/dist/components/misc/PDFViewer.js +86 -1
- package/dist/components/navigation/Breadcrumbs.js +178 -1
- package/dist/components/navigation/BreadcrumbsManager.js +194 -1
- package/dist/components/navigation/index.js +8 -1
- package/dist/components/panel/Error.js +161 -1
- package/dist/components/permission/AvailablePermissionsContext.js +157 -1
- package/dist/components/permission/PermissionsSelector.js +719 -1
- package/dist/components/permission/PermissionsSelectorList.js +400 -1
- package/dist/components/racustombuttons/CustomRAButton.js +94 -1
- package/dist/components/racustombuttons/QuickButton.js +109 -1
- package/dist/components/racustombuttons/QuickEditButton.js +114 -1
- package/dist/components/racustombuttons/QuickIconButton.js +119 -1
- package/dist/components/scrollbar/Scrollbar.js +52 -1
- package/dist/components/selects/MultiSelect.js +42 -1
- package/dist/components/selects/RASearchableSelect.js +207 -1
- package/dist/components/selects/RASearchableSelectChips.js +225 -1
- package/dist/components/selects/SearchableSelect.js +128 -1
- package/dist/components/subscription/BillingCycleSelectInput.js +50 -1
- package/dist/components/subscription/PlanAddonsSettings.js +396 -1
- package/dist/components/subscription/PlanAuditLog.js +345 -1
- package/dist/components/subscription/PlanFeaturesSettings.js +151 -1
- package/dist/components/subscription/PlanLimitsSettings.js +168 -1
- package/dist/components/subscription/PlanMetadataSettings.js +219 -1
- package/dist/components/subscription/PlanPricesSettings.js +222 -1
- package/dist/components/subscription/index.js +12 -1
- package/dist/components/svgelements/SvgLoading.js +330 -1
- package/dist/components/svgelements/SvgLogo.js +70 -1
- package/dist/components/svgelements/SvgLogoMin.js +76 -1
- package/dist/components/svgelements/SvgShipping.js +1001 -1
- package/dist/components/tenant/TenantAttributes.js +107 -1
- package/dist/components/tenant/TenantAttributesContext.js +150 -1
- package/dist/components/tenant/TenantSelector.js +160 -1
- package/dist/components/tenant/TenantSettings.js +107 -1
- package/dist/components/tenant/TenantSettingsContext.js +152 -1
- package/dist/components/tenant/TenantTheme.js +112 -1
- package/dist/components/user/AvatarComponent.js +270 -1
- package/dist/components/user/TenantAvatarComponent.js +83 -1
- package/dist/components/user/UserPreferences.js +422 -1
- package/dist/config/ACTIONS.js +25 -1
- package/dist/config/ConstantsService.js +25 -1
- package/dist/config/DASHAdminSystemConstants.js +137 -1
- package/dist/config/PARSERS.js +9 -1
- package/dist/contexts/DashQueryClientContext.js +78 -1
- package/dist/contexts/DashResourceContext.js +21 -1
- package/dist/contexts/I18nBridgeContext.js +123 -1
- package/dist/contexts/I18nBridgeSetter.js +29 -1
- package/dist/contexts/I18nReduxSync.js +16 -1
- package/dist/contexts/SubscriptionPlanFormatsProvider.js +175 -1
- package/dist/contexts/SystemRequestsCache.js +194 -1
- package/dist/contexts/auth/AuthContext.js +396 -1
- package/dist/contexts/auth/AuthContextLocalStorage.js +118 -1
- package/dist/contexts/auth/DASHAuthenticationService.js +679 -1
- package/dist/contexts/auth/WindowContext.js +10 -1
- package/dist/contexts/auth/index.js +2 -1
- package/dist/contexts/com/FCMContext.js +378 -1
- package/dist/contexts/com/LaravelEchoContext.js +45 -1
- package/dist/contexts/com/LaravelEchoMgr.js +121 -1
- package/dist/contexts/com/components/DefaultNotificationComponent.js +31 -1
- package/dist/contexts/com/components/NotificationAttributesTable.js +28 -1
- package/dist/contexts/com/components/NotificationRenderer.js +36 -1
- package/dist/contexts/com/components/NotificationsWidget.js +142 -1
- package/dist/contexts/com/components/notificationFormats.js +15 -1
- package/dist/contexts/com/useLaravelEcho.js +340 -1
- package/dist/contexts/dictionary/DictionaryContext.js +43 -1
- package/dist/default-theme/DASHAppProviders.js +86 -1
- package/dist/default-theme/DashThemeContext.js +146 -1
- package/dist/default-theme/DashThemeHelperProvider.js +54 -1
- package/dist/default-theme/DomainAppLayout.js +126 -1
- package/dist/default-theme/DomainHeader.js +114 -1
- package/dist/default-theme/DomainTheme.js +60 -1
- package/dist/default-theme/FullLayoutMarkup.js +55 -1
- package/dist/default-theme/StaticLayout.js +36 -1
- package/dist/default-theme/index.js +19 -1
- package/dist/default-theme/menu/AppMaterialMenu.js +364 -1
- package/dist/default-theme/menu/AppMenuComponents/SubmenuPortal.js +33 -1
- package/dist/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItem.js +239 -1
- package/dist/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItems.js +22 -1
- package/dist/default-theme/menu/AppMenuComponents/expanded/CollapsableSidebarMenu.js +209 -1
- package/dist/default-theme/menu/AppMenuComponents/expanded/SidebarItem.js +71 -1
- package/dist/default-theme/menu/AppMenuComponents/getItem.js +7 -1
- package/dist/default-theme/menu/AppMenuComponents/submenuConstants.js +78 -1
- package/dist/default-theme/menu/AppSidebarMaterial.js +232 -1
- package/dist/default-theme/menu/SidebarActions.js +75 -1
- package/dist/default-theme/updateDomCssVariables.js +134 -1
- package/dist/helpers/checkRole.js +14 -1
- package/dist/helpers/parseAxiosError.js +28 -2
- package/dist/hooks/audio/useAudio.js +24 -1
- package/dist/hooks/axios.js +52 -1
- package/dist/hooks/data/useDashboardStats.js +88 -1
- package/dist/hooks/data/usePackageByClientsStats.js +51 -1
- package/dist/hooks/data/usePackageByCommunesStats.js +51 -1
- package/dist/hooks/data/usePackageStats.js +88 -1
- package/dist/hooks/data/usePackageWithdrawDetails.js +69 -1
- package/dist/hooks/data/useStats.js +94 -1
- package/dist/hooks/isCurrentPath.js +18 -1
- package/dist/hooks/notifications/WSMessagesManager.js +128 -1
- package/dist/hooks/notifications/WSPusherManager.js +70 -1
- package/dist/hooks/useBreadcrumbs.js +208 -1
- package/dist/hooks/useClickOutside.js +18 -1
- package/dist/hooks/useFormPersistance.js +129 -1
- package/dist/hooks/useGlobalErrorMediator.js +37 -1
- package/dist/hooks/useGlobalLoaderMgr.js +20 -1
- package/dist/hooks/useHash.js +24 -1
- package/dist/hooks/useLocalStorage.js +68 -1
- package/dist/hooks/usePolyglotTranslation.js +57 -1
- package/dist/hooks/usePrevious.js +12 -1
- package/dist/hooks/usePrintSelected.js +30 -1
- package/dist/hooks/useVirtualHash.js +28 -1
- package/dist/hooks/window/useWindowSize.js +23 -1
- package/dist/index.js +120 -97
- package/dist/interfaces.js +6 -1
- package/dist/layout/AppLayout.js +36 -1
- package/dist/layout/ApplicationLayout.js +110 -1
- package/dist/layout/MotionWrapper.js +182 -1
- package/dist/layout/MotionWrapper.original.js +182 -1
- package/dist/layout/ResourceMenu.js +87 -1
- package/dist/layout/ResoureLayout.js +47 -1
- package/dist/layout/TransitionWrapper.js +83 -2
- package/dist/pages/ChangePassword.js +198 -1
- package/dist/pages/DASHLanding.js +9 -1
- package/dist/pages/DASHLightWeightLogin.js +495 -1
- package/dist/pages/DASHSimpleLogin.js +231 -1
- package/dist/pages/Login.js +113 -1
- package/dist/pages/Profile.js +347 -1
- package/dist/pages/RecoverPassword.js +175 -1
- package/dist/pages/SingleImageUploader.js +40 -1
- package/dist/pages/VerifyAccount.js +129 -1
- package/dist/providers/authProvider.js +186 -1
- package/dist/providers/dataProvider.js +468 -1
- package/dist/providers/i18n/en.js +514 -1
- package/dist/providers/i18n/es.js +520 -1
- package/dist/providers/i18n/languages.js +8 -1
- package/dist/providers/i18nProvider.js +23 -1
- package/dist/react-admin-dash/RADashComponent.js +210 -1
- package/dist/react-admin-dash/Resource.js +62 -1
- package/dist/resources/Brand/BrandResource.js +106 -1
- package/dist/resources/DASHResourceLoader.js +104 -1
- package/dist/resources/Log/LogResource.js +59 -1
- package/dist/resources/Tenant/ImpersonateTenantResource.js +113 -1
- package/dist/resources/Trash/TrashTemplate.js +195 -1
- package/dist/resources.js +259 -1
- package/dist/schemas/log.js +45 -1
- package/dist/schemas/notification.js +39 -1
- package/dist/schemas/permissions.js +44 -1
- package/dist/schemas/roles.js +48 -1
- package/dist/schemas/rolesDataGrid.js +48 -1
- package/dist/schemas/subscription/components/SubscriptionActions.js +172 -1
- package/dist/schemas/subscription/components/SubscriptionPaymentHistory.js +101 -1
- package/dist/schemas/subscription/components/SubscriptionPlanFeatures.js +115 -1
- package/dist/schemas/subscription/components/SubscriptionPlanPreview.js +92 -1
- package/dist/schemas/subscription/components/SubscriptionPlanStats.js +181 -1
- package/dist/schemas/subscription/components/SubscriptionStatusIndicator.js +70 -1
- package/dist/schemas/subscription/subscriptionPlanSchema.js +184 -1
- package/dist/schemas/subscription/subscriptionSchema.js +147 -1
- package/dist/schemas/subscriptionPlan.js +397 -1
- package/dist/schemas/tenant.js +122 -1
- package/dist/schemas/tenantUser.js +94 -1
- package/dist/schemas/tenant_superadmin.js +118 -1
- package/dist/schemas/user.js +26 -1
- package/dist/systemResources.js +1039 -1
- package/dist/systemResources.old.js +668 -1
- package/dist/templates/ResourceTemplate.js +196 -1
- package/dist/templates/ResourceTemplateCreate.js +144 -1
- package/dist/templates/ResourceTemplateEdit.js +147 -1
- package/dist/templates/ResourceTemplateFull.js +518 -1
- package/dist/templates/ResourceTemplateList.js +295 -1
- package/dist/templates/ResourceTemplateShow.js +45 -1
- package/dist/templates/TrashTemplate.js +175 -1
- package/dist/tenantResources.js +206 -1
- package/dist/test_portal_bubbles.js +37 -1
- package/dist/theme/AppHeader.js +60 -1
- package/dist/theme/AppLayoutSetting.js +34 -1
- package/dist/theme/AppLogo.js +7 -1
- package/dist/theme/AppSidebar.js +30 -1
- package/dist/theme/AppSidebarContent.js +84 -1
- package/dist/theme/AppSidebarLogo.js +42 -1
- package/dist/theme/components/PageTitle.js +61 -1
- package/dist/utils/cache/CacheInvalidatorContext.js +100 -1
- package/dist/utils/cache/CacheInvalidatorListenerComponent.js +10 -1
- package/dist/utils/cache/useCacheInvalidatorListener.js +17 -1
- package/dist/utils/convertFileToBase64.js +10 -1
- package/dist/utils/convertToFile.js +12 -1
- package/dist/utils/cookies.js +45 -1
- package/dist/utils/dashDefaultQueryClient.js +15 -1
- package/dist/utils/dataUrlToBlob.js +23 -1
- package/dist/utils/deepReplace.js +17 -1
- package/dist/utils/getProfileMenu.js +31 -1
- package/dist/utils/getTenantSettings.js +9 -1
- package/dist/utils/getType.js +10 -1
- package/dist/utils/getUserSettings.js +9 -1
- package/dist/utils/hasCode.js +14 -1
- package/dist/utils/index.js +19 -1
- package/dist/utils/injectTenantStyles.js +19 -1
- package/dist/utils/isComponent.js +23 -1
- package/dist/utils/navEvents.js +75 -1
- package/dist/utils/prototypes.js +5 -1
- package/dist/utils/regexp.js +7 -1
- package/dist/utils/resolveObjectPath.js +5 -1
- package/dist/utils/setNativeValue.js +17 -1
- package/dist/utils/slugify.js +7 -1
- package/dist/utils/validators/emailValidator.js +8 -1
- package/dist/utils/validators/requiredValidator.js +7 -1
- package/dist/utils/validators/rutValidator.js +25 -1
- package/dist/utils/validators.js +57 -1
- package/package.json +153 -69
- package/src/AppAsyncWrapper.tsx +42 -0
- package/src/AppWrapper.tsx +45 -0
- package/src/DASHAdmin.tsx +501 -0
- package/src/RoutingWrapper.tsx +139 -0
- package/src/classes/DASHStorageClass.tsx +8 -0
- package/src/components/Input/RichTextField.tsx +27 -0
- package/src/components/Redirect.tsx +46 -0
- package/src/components/avatar/Avatar.tsx +67 -0
- package/src/components/avatar/SingleImageUploader.tsx +53 -0
- package/src/components/currency/Format.tsx +77 -0
- package/src/components/custom/Redirect.tsx +23 -0
- package/src/components/error/Error.tsx +168 -0
- package/src/components/geocoding/GeocodingField.tsx +167 -0
- package/src/components/i18n/BridgedLocalesMenuButton.tsx +159 -0
- package/src/components/i18n/LangSwitcher.tsx +204 -0
- package/src/components/loader/GlobalLoader.tsx +56 -0
- package/src/components/logs/LogFile.tsx +88 -0
- package/src/components/logs/LogFileById.tsx +68 -0
- package/src/components/logs/LogViewer.tsx +43 -0
- package/src/components/menu/AppMenu.tsx +22 -0
- package/src/components/menu/CustomMenuItemLink.tsx +61 -0
- package/src/components/menu/DarkToggleMode.tsx +65 -0
- package/src/components/menu/LanguageToggleMode.tsx +120 -0
- package/src/components/misc/CustomImageInput.tsx +62 -0
- package/src/components/misc/DASHGlobalErrorHandler.tsx +194 -0
- package/src/components/misc/DarkModeSwitcher.tsx +112 -0
- package/src/components/misc/LanguageSwitcher.tsx +199 -0
- package/src/components/misc/MUIHtmlToolTip.tsx +15 -0
- package/src/components/misc/MuiSimpleJsonTable.tsx +279 -0
- package/src/components/misc/MultiLevelTable.tsx +229 -0
- package/src/components/misc/NoResults.tsx +25 -0
- package/src/components/misc/PDFViewer.tsx +85 -0
- package/src/components/navigation/Breadcrumbs.tsx +220 -0
- package/src/components/navigation/BreadcrumbsManager.tsx +310 -0
- package/src/components/navigation/index.tsx +5 -0
- package/src/components/panel/Error.tsx +168 -0
- package/src/components/permission/AvailablePermissionsContext.tsx +173 -0
- package/src/components/permission/PermissionsSelector.tsx +819 -0
- package/src/components/permission/PermissionsSelectorList.tsx +468 -0
- package/src/components/permission/tsx +0 -0
- package/src/components/racustombuttons/CustomRAButton.tsx +87 -0
- package/src/components/racustombuttons/QuickButton.tsx +117 -0
- package/src/components/racustombuttons/QuickEditButton.tsx +115 -0
- package/src/components/racustombuttons/QuickIconButton.tsx +122 -0
- package/src/components/scrollbar/Scrollbar.tsx +31 -0
- package/src/components/selects/MultiSelect.tsx +53 -0
- package/src/components/selects/RASearchableSelect.tsx +279 -0
- package/src/components/selects/RASearchableSelectChips.tsx +304 -0
- package/src/components/selects/SearchableSelect.tsx +135 -0
- package/src/components/subscription/BillingCycleSelectInput.tsx +68 -0
- package/src/components/subscription/PlanAddonsSettings.tsx +522 -0
- package/src/components/subscription/PlanAuditLog.tsx +439 -0
- package/src/components/subscription/PlanFeaturesSettings.tsx +223 -0
- package/src/components/subscription/PlanLimitsSettings.tsx +230 -0
- package/src/components/subscription/PlanMetadataSettings.tsx +284 -0
- package/src/components/subscription/PlanPricesSettings.tsx +295 -0
- package/src/components/subscription/index.ts +7 -0
- package/src/components/svgelements/SvgLoading.tsx +229 -0
- package/src/components/svgelements/SvgLogo.tsx +53 -0
- package/src/components/svgelements/SvgLogoMin.tsx +64 -0
- package/src/components/svgelements/SvgShipping.tsx +673 -0
- package/src/components/tenant/AvailablePermissionsContext.tsx +0 -0
- package/src/components/tenant/TenantAttributes.tsx +153 -0
- package/src/components/tenant/TenantAttributesContext.tsx +163 -0
- package/src/components/tenant/TenantSelector.tsx +139 -0
- package/src/components/tenant/TenantSettings.tsx +172 -0
- package/src/components/tenant/TenantSettingsContext.tsx +165 -0
- package/src/components/tenant/TenantTheme.tsx +172 -0
- package/src/components/user/AvatarComponent.tsx +301 -0
- package/src/components/user/TenantAvatarComponent.tsx +99 -0
- package/src/components/user/UserPreferences.tsx +642 -0
- package/src/config/ACTIONS.tsx +26 -0
- package/src/config/ConstantsService.tsx +44 -0
- package/src/config/DASHAdminSystemConstants.tsx +182 -0
- package/src/config/PARSERS.tsx +9 -0
- package/src/contexts/DashQueryClientContext.tsx +113 -0
- package/src/contexts/DashResourceContext.tsx +34 -0
- package/src/contexts/I18nBridgeContext.tsx +156 -0
- package/src/contexts/I18nBridgeSetter.tsx +39 -0
- package/src/contexts/I18nReduxSync.tsx +27 -0
- package/src/contexts/SubscriptionPlanFormatsProvider.tsx +217 -0
- package/src/contexts/SystemRequestsCache.tsx +215 -0
- package/src/contexts/auth/AuthContext.tsx +553 -0
- package/src/contexts/auth/AuthContextLocalStorage.tsx +140 -0
- package/src/contexts/auth/DASHAuthenticationService.tsx +917 -0
- package/src/contexts/auth/WindowContext.tsx +15 -0
- package/src/contexts/auth/index.tsx +3 -0
- package/src/contexts/com/FCMContext.tsx +415 -0
- package/src/contexts/com/LaravelEchoContext.tsx +41 -0
- package/src/contexts/com/LaravelEchoMgr.tsx +155 -0
- package/src/contexts/com/components/DefaultNotificationComponent.tsx +20 -0
- package/src/contexts/com/components/NotificationAttributesTable.tsx +54 -0
- package/src/contexts/com/components/NotificationRenderer.tsx +42 -0
- package/src/contexts/com/components/NotificationsWidget.tsx +182 -0
- package/src/contexts/com/components/notificationFormats.tsx +50 -0
- package/src/contexts/com/useLaravelEcho.tsx +432 -0
- package/src/contexts/dictionary/DictionaryContext.tsx +94 -0
- package/src/default-theme/DASHAppProviders.tsx +117 -0
- package/src/default-theme/DashThemeContext.tsx +218 -0
- package/src/default-theme/DashThemeHelperProvider.tsx +98 -0
- package/src/default-theme/DomainAppLayout.tsx +166 -0
- package/src/default-theme/DomainHeader.tsx +162 -0
- package/src/default-theme/DomainTheme.tsx +59 -0
- package/src/default-theme/FullLayoutMarkup.tsx +250 -0
- package/src/default-theme/StaticLayout.tsx +47 -0
- package/src/default-theme/index.tsx +11 -0
- package/src/default-theme/menu/AppMaterialMenu.tsx +545 -0
- package/src/default-theme/menu/AppMenuComponents/SubmenuPortal.tsx +56 -0
- package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItem.tsx +254 -0
- package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItems.tsx +31 -0
- package/src/default-theme/menu/AppMenuComponents/expanded/CollapsableSidebarMenu.tsx +276 -0
- package/src/default-theme/menu/AppMenuComponents/expanded/SidebarItem.tsx +91 -0
- package/src/default-theme/menu/AppMenuComponents/getItem.tsx +17 -0
- package/src/default-theme/menu/AppMenuComponents/interfaces.tsx +41 -0
- package/src/default-theme/menu/AppMenuComponents/submenuConstants.ts +85 -0
- package/src/default-theme/menu/AppSidebarMaterial.tsx +339 -0
- package/src/default-theme/menu/SidebarActions.tsx +84 -0
- package/src/default-theme/updateDomCssVariables.tsx +176 -0
- package/src/helpers/checkRole.tsx +66 -0
- package/src/helpers/parseAxiosError.tsx +41 -0
- package/src/hooks/audio/useAudio.tsx +39 -0
- package/src/hooks/axios.tsx +62 -0
- package/src/hooks/data/useDashboardStats.tsx +65 -0
- package/src/hooks/data/usePackageByClientsStats.tsx +44 -0
- package/src/hooks/data/usePackageByCommunesStats.tsx +44 -0
- package/src/hooks/data/usePackageStats.tsx +69 -0
- package/src/hooks/data/usePackageWithdrawDetails.tsx +61 -0
- package/src/hooks/data/useStats.tsx +86 -0
- package/src/hooks/isCurrentPath.tsx +22 -0
- package/src/hooks/notifications/WSMessagesManager.tsx +152 -0
- package/src/hooks/notifications/WSPusherManager.tsx +92 -0
- package/src/hooks/useBreadcrumbs.tsx +329 -0
- package/src/hooks/useClickOutside.tsx +17 -0
- package/src/hooks/useFormPersistance.tsx +150 -0
- package/src/hooks/useGlobalErrorMediator.tsx +43 -0
- package/src/hooks/useGlobalLoaderMgr.tsx +21 -0
- package/src/hooks/useHash.tsx +27 -0
- package/src/hooks/useLocalStorage.tsx +196 -0
- package/src/hooks/usePolyglotTranslation.tsx +62 -0
- package/src/hooks/usePrevious.tsx +9 -0
- package/src/hooks/usePrintSelected.tsx +37 -0
- package/src/hooks/useVirtualHash.tsx +33 -0
- package/src/hooks/window/useWindowSize.tsx +36 -0
- package/src/index.tsx +110 -0
- package/src/interfaces/IAppResourceConfig.tsx +20 -0
- package/src/interfaces/Log.tsx +16 -0
- package/src/interfaces/Tenant.tsx +25 -0
- package/src/interfaces/communication/IActions.tsx +5 -0
- package/src/interfaces/communication/INotification.tsx +21 -0
- package/src/interfaces/communication/IPayload.tsx +3 -0
- package/src/interfaces/communication/IRequestAction.tsx +10 -0
- package/src/interfaces/communication/IRequestPayload.tsx +7 -0
- package/src/interfaces/communication/IResponseAction.tsx +7 -0
- package/src/interfaces/misc/IAny.tsx +3 -0
- package/src/interfaces/misc/IFlashMessage.tsx +10 -0
- package/src/interfaces/navigation/IAppMenu.ts +14 -0
- package/src/interfaces/navigation/ICollapsableSidebarMenu.ts +12 -0
- package/src/interfaces/navigation/IMenuItem.ts +16 -0
- package/src/interfaces/notifications/IModel.tsx +6 -0
- package/src/interfaces/notifications/IModelField.tsx +8 -0
- package/src/interfaces/notifications/IUserNotification.tsx +12 -0
- package/src/interfaces/notifications/IUserNotificationData.tsx +13 -0
- package/src/interfaces/notifications/IUserNotificationPayload.tsx +8 -0
- package/src/interfaces/user/IGetAuth.tsx +92 -0
- package/src/interfaces/user/ITenantSettings.tsx +3 -0
- package/src/interfaces/user/IUser.tsx +60 -0
- package/src/interfaces/user/IUserSettings.tsx +43 -0
- package/src/interfaces.tsx +6 -0
- package/src/layout/AppLayout.tsx +112 -0
- package/src/layout/ApplicationLayout.tsx +197 -0
- package/src/layout/MotionWrapper.original.tsx +236 -0
- package/src/layout/MotionWrapper.tsx +236 -0
- package/src/layout/ResourceMenu.tsx +164 -0
- package/src/layout/ResoureLayout.tsx +105 -0
- package/src/layout/TransitionWrapper.tsx +125 -0
- package/src/pages/ChangePassword.tsx +179 -0
- package/src/pages/DASHLanding.tsx +22 -0
- package/src/pages/DASHLightWeightLogin.tsx +610 -0
- package/src/pages/DASHSimpleLogin.tsx +260 -0
- package/src/pages/Login.tsx +111 -0
- package/src/pages/Profile.tsx +394 -0
- package/src/pages/RecoverPassword.tsx +166 -0
- package/src/pages/SingleImageUploader.tsx +55 -0
- package/src/pages/VerifyAccount.tsx +128 -0
- package/src/providers/authProvider.tsx +210 -0
- package/src/providers/dataProvider.tsx +672 -0
- package/src/providers/i18n/en.ts +533 -0
- package/src/providers/i18n/es.ts +539 -0
- package/src/providers/i18n/languages.tsx +5 -0
- package/src/providers/i18nProvider.tsx +23 -0
- package/src/react-admin-dash/RADashComponent.tsx +240 -0
- package/src/react-admin-dash/Resource.tsx +77 -0
- package/src/resources/Brand/BrandResource.tsx +130 -0
- package/src/resources/DASHResourceLoader.ts +180 -0
- package/src/resources/Log/LogResource.tsx +73 -0
- package/src/resources/Tenant/ImpersonateTenantResource.tsx +113 -0
- package/src/resources/Trash/TrashTemplate.tsx +180 -0
- package/src/resources.tsx +280 -0
- package/src/schemas/log.tsx +45 -0
- package/src/schemas/notification.tsx +42 -0
- package/src/schemas/permissions.tsx +44 -0
- package/src/schemas/roles.tsx +48 -0
- package/src/schemas/rolesDataGrid.tsx +48 -0
- package/src/schemas/subscription/components/SubscriptionActions.tsx +153 -0
- package/src/schemas/subscription/components/SubscriptionPaymentHistory.tsx +120 -0
- package/src/schemas/subscription/components/SubscriptionPlanFeatures.tsx +155 -0
- package/src/schemas/subscription/components/SubscriptionPlanPreview.tsx +128 -0
- package/src/schemas/subscription/components/SubscriptionPlanStats.tsx +268 -0
- package/src/schemas/subscription/components/SubscriptionStatusIndicator.tsx +72 -0
- package/src/schemas/subscription/subscriptionPlanSchema.tsx +185 -0
- package/src/schemas/subscription/subscriptionSchema.tsx +152 -0
- package/src/schemas/subscriptionPlan.ts +422 -0
- package/src/schemas/tenant.tsx +129 -0
- package/src/schemas/tenantUser.tsx +96 -0
- package/src/schemas/tenant_superadmin.tsx +119 -0
- package/src/schemas/user.tsx +26 -0
- package/src/systemResources.old.tsx +928 -0
- package/src/systemResources.tsx +1135 -0
- package/src/templates/ResourceTemplate.tsx +240 -0
- package/src/templates/ResourceTemplateCreate.tsx +167 -0
- package/src/templates/ResourceTemplateEdit.tsx +176 -0
- package/src/templates/ResourceTemplateFull.tsx +581 -0
- package/src/templates/ResourceTemplateList.tsx +340 -0
- package/src/templates/ResourceTemplateShow.tsx +88 -0
- package/src/templates/TrashTemplate.tsx +179 -0
- package/src/tenantResources.tsx +223 -0
- package/src/test_portal_bubbles.tsx +40 -0
- package/src/theme/AppHeader.tsx +52 -0
- package/src/theme/AppLayoutSetting.tsx +33 -0
- package/src/theme/AppLogo.tsx +13 -0
- package/src/theme/AppSidebar.tsx +12 -0
- package/src/theme/AppSidebarContent.tsx +105 -0
- package/src/theme/AppSidebarLogo.tsx +48 -0
- package/src/theme/components/PageTitle.tsx +37 -0
- package/src/utils/cache/CacheInvalidatorContext.tsx +125 -0
- package/src/utils/cache/CacheInvalidatorListenerComponent.tsx +10 -0
- package/src/utils/cache/useCacheInvalidatorListener.tsx +27 -0
- package/src/utils/convertFileToBase64.tsx +9 -0
- package/src/utils/convertToFile.tsx +14 -0
- package/src/utils/cookies.tsx +33 -0
- package/src/utils/dashDefaultQueryClient.tsx +34 -0
- package/src/utils/dataUrlToBlob.tsx +30 -0
- package/src/utils/deepReplace.tsx +19 -0
- package/src/utils/getProfileMenu.tsx +41 -0
- package/src/utils/getTenantSettings.tsx +9 -0
- package/src/utils/getType.tsx +8 -0
- package/src/utils/getUserSettings.tsx +8 -0
- package/src/utils/hasCode.tsx +14 -0
- package/src/utils/index.ts +19 -0
- package/src/utils/injectTenantStyles.ts +28 -0
- package/src/utils/isComponent.tsx +45 -0
- package/src/utils/navEvents.tsx +91 -0
- package/src/utils/prototypes.tsx +5 -0
- package/src/utils/regexp.tsx +4 -0
- package/src/utils/resolveObjectPath.tsx +4 -0
- package/src/utils/setNativeValue.tsx +24 -0
- package/src/utils/slugify.tsx +11 -0
- package/src/utils/validators/emailValidator.tsx +6 -0
- package/src/utils/validators/requiredValidator.tsx +5 -0
- package/src/utils/validators/rutValidator.tsx +31 -0
- package/src/utils/validators.tsx +96 -0
- package/dist/ChangePassword-DmWAQAX_.js +0 -152
- package/dist/Login-t41HMhVT.js +0 -101
- package/dist/Profile-By-gdPUd.js +0 -294
- package/dist/RecoverPassword-DzPdbkg2.js +0 -149
- package/dist/VerifyAccount-Bofaxe5w.js +0 -99
- package/dist/index-gfebuoyf.js +0 -21614
- /package/dist/{components/permission/tsx → declarations.d.js} +0 -0
- /package/{dist → src}/DASHAdmin.tsx.old +0 -0
- /package/{dist → src}/declarations.d.ts +0 -0
- /package/{dist → src}/default-theme/DashThemeContext.tsx.fast +0 -0
- /package/{dist → src}/default-theme/DashThemeContext.tsx.old +0 -0
- /package/{dist → src}/templates/ResourceTemplate.tsx.memoized_experiment +0 -0
- /package/{dist → src}/templates/ResourceTemplate.tsx.original +0 -0
- /package/{dist → src}/templates/ResourceTemplateOld.tsx.bkup +0 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { useContext, useEffect } from 'react';
|
|
2
|
+
import { useGetIdentity, useResourceDefinitions } from 'react-admin';
|
|
3
|
+
import { useAuthContext } from '../contexts/auth';
|
|
4
|
+
import { useDialog } from 'dash-dialog';
|
|
5
|
+
import { useLocation, useNavigate } from 'react-router-dom';
|
|
6
|
+
import { useSelector } from 'react-redux';
|
|
7
|
+
import { dashStorage } from 'dash-utils';
|
|
8
|
+
declare global {
|
|
9
|
+
interface Window {
|
|
10
|
+
__DASH_DEBUG__: any;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// Debugging logic moved to a custom hook
|
|
15
|
+
function useRADashDebug({
|
|
16
|
+
location,
|
|
17
|
+
resourceDefinitions,
|
|
18
|
+
reduxState,
|
|
19
|
+
authContext,
|
|
20
|
+
identity,
|
|
21
|
+
identityLoading,
|
|
22
|
+
dialog,
|
|
23
|
+
navigate,
|
|
24
|
+
}) {
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
// Enhanced route debugging
|
|
27
|
+
const debugInfo = {
|
|
28
|
+
timestamp: new Date().toISOString(),
|
|
29
|
+
location: {
|
|
30
|
+
pathname: location.pathname,
|
|
31
|
+
search: location.search,
|
|
32
|
+
hash: location.hash,
|
|
33
|
+
state: location.state,
|
|
34
|
+
key: location.key
|
|
35
|
+
},
|
|
36
|
+
reactAdminResources: Object.keys(resourceDefinitions || {}),
|
|
37
|
+
resourceDefinitionsDetails: resourceDefinitions,
|
|
38
|
+
reduxResources: reduxState.resources.map(r => ({
|
|
39
|
+
model: r.model,
|
|
40
|
+
label: r.label,
|
|
41
|
+
roles: r.roles,
|
|
42
|
+
group: r.group
|
|
43
|
+
})),
|
|
44
|
+
authContext: {
|
|
45
|
+
authenticated: authContext.authenticated,
|
|
46
|
+
user: authContext.user ? {
|
|
47
|
+
id: authContext.user.id,
|
|
48
|
+
roles: authContext.user.roles,
|
|
49
|
+
tenant_id: authContext.user.tenant_id
|
|
50
|
+
} : null
|
|
51
|
+
},
|
|
52
|
+
localStorage: {
|
|
53
|
+
currentAppPath: dashStorage.getItem('currentAppPath'),
|
|
54
|
+
currentMallSlug: dashStorage.getItem('currentMallSlug'),
|
|
55
|
+
currentMallPath: dashStorage.getItem('currentMallPath'),
|
|
56
|
+
tenant_id: dashStorage.getItem('tenant_id'),
|
|
57
|
+
userData: dashStorage.getItem('userData')
|
|
58
|
+
},
|
|
59
|
+
windowLocation: {
|
|
60
|
+
href: window.location.href,
|
|
61
|
+
origin: window.location.origin,
|
|
62
|
+
pathname: window.location.pathname,
|
|
63
|
+
search: window.location.search,
|
|
64
|
+
hash: window.location.hash
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
console.group('🔍 RADashComponent Route Debug');
|
|
69
|
+
console.log('📍 Current Location:', debugInfo.location);
|
|
70
|
+
console.log('🌐 Window Location:', debugInfo.windowLocation);
|
|
71
|
+
console.log('📦 React Admin Resources:', debugInfo.reactAdminResources);
|
|
72
|
+
console.log('📋 Resource Definitions:', debugInfo.resourceDefinitionsDetails);
|
|
73
|
+
console.log('🏪 Redux Resources:', debugInfo.reduxResources);
|
|
74
|
+
console.log('🔐 Auth Context:', debugInfo.authContext);
|
|
75
|
+
console.log('💾 Local Storage:', debugInfo.localStorage);
|
|
76
|
+
|
|
77
|
+
// Check for route matches
|
|
78
|
+
const currentPath = location.pathname;
|
|
79
|
+
const matchingResources = reduxState.resources.filter(resource => {
|
|
80
|
+
const resourcePath = resource.model;
|
|
81
|
+
const matches = currentPath.includes(resourcePath) || resourcePath === '/' && currentPath === '/';
|
|
82
|
+
return matches;
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
console.log('🎯 Matching Resources for current path:', matchingResources);
|
|
86
|
+
|
|
87
|
+
// Check if current path should match any resource
|
|
88
|
+
const pathSegments = currentPath.split('/').filter(Boolean);
|
|
89
|
+
console.log('📂 Path Segments:', pathSegments);
|
|
90
|
+
|
|
91
|
+
// Analyze potential routing issues
|
|
92
|
+
const routingIssues = [];
|
|
93
|
+
|
|
94
|
+
if (reduxState.resources.length === 0) {
|
|
95
|
+
routingIssues.push('No resources loaded in Redux state');
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (Object.keys(resourceDefinitions || {}).length === 0) {
|
|
99
|
+
routingIssues.push('No React Admin resource definitions found');
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (matchingResources.length === 0 && currentPath !== '/') {
|
|
103
|
+
routingIssues.push(`No resources match current path: ${currentPath}`);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (!authContext.authenticated && reduxState.resources.some(r => !r.roles?.includes('Public'))) {
|
|
107
|
+
routingIssues.push('User not authenticated but trying to access protected resources');
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (routingIssues.length > 0) {
|
|
111
|
+
console.warn('⚠️ Potential Routing Issues:', routingIssues);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
console.groupEnd();
|
|
115
|
+
|
|
116
|
+
// Store debug info globally for inspection
|
|
117
|
+
window.__DASH_DEBUG__ = {
|
|
118
|
+
...window.__DASH_DEBUG__,
|
|
119
|
+
lastRouteDebug: debugInfo,
|
|
120
|
+
routingIssues
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
}, [location, resourceDefinitions, reduxState, authContext]);
|
|
124
|
+
|
|
125
|
+
useEffect(() => {
|
|
126
|
+
// Debug resource changes
|
|
127
|
+
console.group('📦 Resource Definitions Changed');
|
|
128
|
+
console.log('Available Resources:', Object.keys(resourceDefinitions || {}));
|
|
129
|
+
console.log('Resource Details:', resourceDefinitions);
|
|
130
|
+
console.groupEnd();
|
|
131
|
+
}, [resourceDefinitions]);
|
|
132
|
+
|
|
133
|
+
useEffect(() => {
|
|
134
|
+
// Debug auth changes
|
|
135
|
+
console.group('🔐 Auth Context Changed');
|
|
136
|
+
console.log('Authenticated:', authContext.authenticated);
|
|
137
|
+
console.log('User:', authContext.user);
|
|
138
|
+
console.log('Identity Loading:', identityLoading);
|
|
139
|
+
console.log('Identity:', identity);
|
|
140
|
+
console.groupEnd();
|
|
141
|
+
}, [authContext.authenticated, authContext.user, identityLoading, identity]);
|
|
142
|
+
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
// Global axios error handler
|
|
145
|
+
const handleGlobalAxiosError = (event) => {
|
|
146
|
+
console.error('🚨 Global Axios Error:', event.data);
|
|
147
|
+
dialog({
|
|
148
|
+
variant: 'danger',
|
|
149
|
+
title: event.data?.name || "Error",
|
|
150
|
+
content: event.data?.message || "Error desconocido",
|
|
151
|
+
confirmText: 'Volver',
|
|
152
|
+
closeText: 'Cerrar',
|
|
153
|
+
onConfirm: () => {},
|
|
154
|
+
onClose: () => {},
|
|
155
|
+
});
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
window.addEventListener('global-axios-error', handleGlobalAxiosError);
|
|
159
|
+
return () => {
|
|
160
|
+
window.removeEventListener('global-axios-error', handleGlobalAxiosError);
|
|
161
|
+
};
|
|
162
|
+
}, [dialog]);
|
|
163
|
+
|
|
164
|
+
useEffect(() => {
|
|
165
|
+
// Debug React Admin routing errors
|
|
166
|
+
const handleReactAdminError = (error) => {
|
|
167
|
+
console.error('🚨 React Admin Error:', error);
|
|
168
|
+
// Check if it's a routing error
|
|
169
|
+
if (error.message?.includes('404') || error.message?.includes('not found')) {
|
|
170
|
+
console.group('🔍 Route Not Found Debug');
|
|
171
|
+
console.log('Current path:', location.pathname);
|
|
172
|
+
console.log('Available resources:', Object.keys(resourceDefinitions || {}));
|
|
173
|
+
console.log('Redux resources:', reduxState.resources.map(r => r.model));
|
|
174
|
+
console.log('Suggested fixes:');
|
|
175
|
+
console.log('1. Check if resource model matches the URL path');
|
|
176
|
+
console.log('2. Verify resource permissions/roles');
|
|
177
|
+
console.log('3. Ensure resource is properly registered');
|
|
178
|
+
console.groupEnd();
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
window.addEventListener('error', handleReactAdminError);
|
|
183
|
+
window.addEventListener('unhandledrejection', (event) => {
|
|
184
|
+
handleReactAdminError(event.reason);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
return () => {
|
|
188
|
+
window.removeEventListener('error', handleReactAdminError);
|
|
189
|
+
window.removeEventListener('unhandledrejection', handleReactAdminError);
|
|
190
|
+
};
|
|
191
|
+
}, [location.pathname, resourceDefinitions, reduxState.resources]);
|
|
192
|
+
|
|
193
|
+
useEffect(() => {
|
|
194
|
+
// Add a helper function to manually trigger route analysis
|
|
195
|
+
window.__DASH_DEBUG__ = {
|
|
196
|
+
...window.__DASH_DEBUG__,
|
|
197
|
+
analyzeCurrentRoute: () => {
|
|
198
|
+
console.group('🔍 Manual Route Analysis');
|
|
199
|
+
console.log('Current pathname:', location.pathname);
|
|
200
|
+
console.log('React Admin resources:', Object.keys(resourceDefinitions || {}));
|
|
201
|
+
console.log('Redux resources:', reduxState.resources);
|
|
202
|
+
|
|
203
|
+
// Try to find why route is not matching
|
|
204
|
+
const pathWithoutLeadingSlash = location.pathname.replace(/^\//, '');
|
|
205
|
+
const pathSegments = pathWithoutLeadingSlash.split('/').filter(Boolean);
|
|
206
|
+
|
|
207
|
+
console.log('Path segments:', pathSegments);
|
|
208
|
+
|
|
209
|
+
// Check each resource for potential matches
|
|
210
|
+
reduxState.resources.forEach(resource => {
|
|
211
|
+
const resourceModel = resource.model.replace(/^\//, '');
|
|
212
|
+
const matches = pathSegments[0] === resourceModel ||
|
|
213
|
+
(resource.model === '/' && location.pathname === '/');
|
|
214
|
+
|
|
215
|
+
console.log(`Resource "${resource.model}" matches:`, matches, {
|
|
216
|
+
resourceModel,
|
|
217
|
+
firstPathSegment: pathSegments[0],
|
|
218
|
+
roles: resource.roles,
|
|
219
|
+
authenticated: authContext.authenticated
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
console.groupEnd();
|
|
224
|
+
},
|
|
225
|
+
navigateToResource: (resourceName) => {
|
|
226
|
+
console.log(`Navigating to resource: ${resourceName}`);
|
|
227
|
+
navigate(`/${resourceName}`);
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
}, [location, resourceDefinitions, reduxState, authContext, navigate]);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const RADashComponent = () => {
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
return null;
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
export default RADashComponent;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ComponentType, ReactElement, isValidElement, Children } from 'react';
|
|
3
|
+
import { Route, Routes } from 'react-router-dom';
|
|
4
|
+
import { isValidElementType } from 'react-is';
|
|
5
|
+
import { ResourceContextProvider, ResourceProps, RestoreScrollPosition } from 'react-admin';
|
|
6
|
+
|
|
7
|
+
export const Resource = (props: ResourceProps) => {
|
|
8
|
+
const { create, edit, list, name, show } = props;
|
|
9
|
+
|
|
10
|
+
// Note: In React Router v7, we cannot pass arbitrary children to Routes.
|
|
11
|
+
// The trash route and other custom routes should be handled via CustomRoutes
|
|
12
|
+
// at the parent level, not as children of Resource.
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<ResourceContextProvider value={name}>
|
|
16
|
+
<Routes>
|
|
17
|
+
{create ? (
|
|
18
|
+
<Route path="create/*" element={getElement(create)} />
|
|
19
|
+
) : null}
|
|
20
|
+
{show ? <Route path=":id/show/*" element={getElement(show)} /> : null}
|
|
21
|
+
{edit ? <Route path=":id/*" element={getElement(edit)} /> : null}
|
|
22
|
+
{list ? (
|
|
23
|
+
<Route
|
|
24
|
+
path="/*"
|
|
25
|
+
element={
|
|
26
|
+
<RestoreScrollPosition
|
|
27
|
+
storeKey={`${name}.list.scrollPosition`}
|
|
28
|
+
>
|
|
29
|
+
{getElement(list)}
|
|
30
|
+
</RestoreScrollPosition>
|
|
31
|
+
}
|
|
32
|
+
/>
|
|
33
|
+
) : null}
|
|
34
|
+
</Routes>
|
|
35
|
+
</ResourceContextProvider>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const getElement = (ElementOrComponent: ComponentType<any> | ReactElement) => {
|
|
40
|
+
|
|
41
|
+
if (isValidElement(ElementOrComponent)) {
|
|
42
|
+
return ElementOrComponent;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (isValidElementType(ElementOrComponent)) {
|
|
46
|
+
const Element = ElementOrComponent as ComponentType<any>;
|
|
47
|
+
return <Element />;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return null;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
Resource.raName = 'Resource';
|
|
54
|
+
|
|
55
|
+
Resource.registerResource = ({
|
|
56
|
+
create,
|
|
57
|
+
edit,
|
|
58
|
+
icon,
|
|
59
|
+
list,
|
|
60
|
+
name,
|
|
61
|
+
options,
|
|
62
|
+
show,
|
|
63
|
+
recordRepresentation,
|
|
64
|
+
hasCreate,
|
|
65
|
+
hasEdit,
|
|
66
|
+
hasShow,
|
|
67
|
+
}: ResourceProps) => ({
|
|
68
|
+
name,
|
|
69
|
+
options,
|
|
70
|
+
hasList: !!list,
|
|
71
|
+
hasCreate: !!create || !!hasCreate,
|
|
72
|
+
hasEdit: !!edit || !!hasEdit,
|
|
73
|
+
hasShow: !!show || !!hasShow,
|
|
74
|
+
icon,
|
|
75
|
+
recordRepresentation,
|
|
76
|
+
});
|
|
77
|
+
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { Resource, TabbedShowLayout } from 'react-admin';
|
|
2
|
+
import { Show } from 'react-admin';
|
|
3
|
+
// @ts-ignore - Layout may not exist
|
|
4
|
+
import ApplicationLayout from '../../layouts/ApplicationLayout';
|
|
5
|
+
import { IAppResourceConfig } from '../../interfaces/IAppResourceConfig';
|
|
6
|
+
import { useNotify } from 'react-admin';
|
|
7
|
+
import { useRedirect } from 'react-admin';
|
|
8
|
+
// @ts-ignore - Dialog service may not exist
|
|
9
|
+
import { useDialog } from '../../components/Dialog/DialogService';
|
|
10
|
+
import { TopToolbar } from 'react-admin';
|
|
11
|
+
import { EditButton } from 'react-admin';
|
|
12
|
+
import { CustomRoutes } from 'react-admin';
|
|
13
|
+
import { Route } from 'react-router';
|
|
14
|
+
import TrashTemplate from '../Trash/TrashTemplate';
|
|
15
|
+
// @ts-ignore - dash-auto-admin imports may not be available
|
|
16
|
+
import AutoCreate from 'dash-auto-admin/AutoCreate';
|
|
17
|
+
// @ts-ignore - dash-auto-admin imports may not be available
|
|
18
|
+
import AutoEdit from 'dash-auto-admin/AutoEdit';
|
|
19
|
+
// @ts-ignore - dash-auto-admin imports may not be available
|
|
20
|
+
import DashAutoList from 'dash-auto-admin/DashAutoList';
|
|
21
|
+
// @ts-ignore - dash-auto-admin imports may not be available
|
|
22
|
+
import AutoReferenceTab from 'dash-auto-admin/AutoReferenceTab';
|
|
23
|
+
// @ts-ignore - dash-auto-admin imports may not be available
|
|
24
|
+
import AutoTabs from 'dash-auto-admin/AutoTabs';
|
|
25
|
+
// @ts-ignore - dash-auto-admin imports may not be available
|
|
26
|
+
import { AutoTitle } from 'dash-auto-admin';
|
|
27
|
+
|
|
28
|
+
export const BrandResource = (resourceConfig: IAppResourceConfig) => {
|
|
29
|
+
const beforeSubmut = (data: any) => {
|
|
30
|
+
data.input_brand_mappings = data.input_brand_mappings.map(
|
|
31
|
+
(ele) => ele.text,
|
|
32
|
+
);
|
|
33
|
+
return data;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<>
|
|
38
|
+
<CustomRoutes>{TrashTemplate(resourceConfig)}</CustomRoutes>
|
|
39
|
+
<Resource
|
|
40
|
+
options={{ label: resourceConfig.label, group: resourceConfig.group }}
|
|
41
|
+
name={resourceConfig.model}
|
|
42
|
+
list={() => {
|
|
43
|
+
return (
|
|
44
|
+
<ApplicationLayout resourceConfig={resourceConfig}>
|
|
45
|
+
<DashAutoList
|
|
46
|
+
/*sx={{
|
|
47
|
+
flexGrow: 1
|
|
48
|
+
}}*/
|
|
49
|
+
/*search={resourceConfig.search} schema={resourceConfig.listSchema ? resourceConfig.listSchema : resourceConfig.schema} BulkActions={resourceConfig.BulkActions} create={resourceConfig.create}*/ resourceConfig={
|
|
50
|
+
resourceConfig
|
|
51
|
+
}
|
|
52
|
+
/>
|
|
53
|
+
</ApplicationLayout>
|
|
54
|
+
);
|
|
55
|
+
}}
|
|
56
|
+
edit={() => (
|
|
57
|
+
<ApplicationLayout resourceConfig={resourceConfig}>
|
|
58
|
+
<AutoEdit
|
|
59
|
+
beforeSubmit={beforeSubmut}
|
|
60
|
+
//schema={resourceConfig.editSchema ? resourceConfig.editSchema : resourceConfig.schema}
|
|
61
|
+
resourceConfig={resourceConfig}
|
|
62
|
+
/>
|
|
63
|
+
</ApplicationLayout>
|
|
64
|
+
)}
|
|
65
|
+
create={() => {
|
|
66
|
+
const notify = useNotify();
|
|
67
|
+
const redirect = useRedirect();
|
|
68
|
+
const dialog = useDialog();
|
|
69
|
+
const onCreate = (data: any) => {
|
|
70
|
+
notify(`Recurso Creado`,{type:'success'});
|
|
71
|
+
dialog({
|
|
72
|
+
variant: 'info',
|
|
73
|
+
title: 'Recurso Creado',
|
|
74
|
+
description: 'Se ha creado el recurso ' + resourceConfig.label,
|
|
75
|
+
onConfirm: () => {
|
|
76
|
+
redirect('/' + resourceConfig.model);
|
|
77
|
+
},
|
|
78
|
+
onClose: () => {},
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
const onError = (error: any) => {
|
|
82
|
+
notify(`Error!`);
|
|
83
|
+
};
|
|
84
|
+
return (
|
|
85
|
+
<ApplicationLayout resourceConfig={resourceConfig}>
|
|
86
|
+
<AutoCreate
|
|
87
|
+
beforeSubmit={beforeSubmut}
|
|
88
|
+
//schema={resourceConfig.createSchema ? resourceConfig.createSchema : resourceConfig.schema}
|
|
89
|
+
onError={onError}
|
|
90
|
+
onSubmit={onCreate}
|
|
91
|
+
/*toolbar={<ResourceCreateToolbar />}*/ resourceConfig={
|
|
92
|
+
resourceConfig
|
|
93
|
+
} /*toolbar={<ResourceCreateToolbar />}*/
|
|
94
|
+
/>
|
|
95
|
+
</ApplicationLayout>
|
|
96
|
+
);
|
|
97
|
+
}}
|
|
98
|
+
show={() => {
|
|
99
|
+
const ShowActions = ({ edit }) => (
|
|
100
|
+
<TopToolbar sx={{mb:2}} >{edit !== false && <EditButton />}</TopToolbar>
|
|
101
|
+
);
|
|
102
|
+
return (
|
|
103
|
+
<ApplicationLayout resourceConfig={resourceConfig}>
|
|
104
|
+
<Show
|
|
105
|
+
title={
|
|
106
|
+
<AutoTitle
|
|
107
|
+
//schema={resourceConfig.showSchema ? resourceConfig.showSchema : resourceConfig.schema} />}
|
|
108
|
+
//actions={<ShowActions edit={resourceConfig.edit}
|
|
109
|
+
resourceConfig={resourceConfig}
|
|
110
|
+
/>
|
|
111
|
+
}
|
|
112
|
+
>
|
|
113
|
+
<TabbedShowLayout>
|
|
114
|
+
{AutoTabs(resourceConfig.schema)}
|
|
115
|
+
{resourceConfig.references &&
|
|
116
|
+
resourceConfig.references.map((reference) =>
|
|
117
|
+
AutoReferenceTab(reference),
|
|
118
|
+
)}
|
|
119
|
+
</TabbedShowLayout>
|
|
120
|
+
</Show>
|
|
121
|
+
</ApplicationLayout>
|
|
122
|
+
);
|
|
123
|
+
}}
|
|
124
|
+
// @ts-ignore - icon type compatibility issue
|
|
125
|
+
icon={resourceConfig.icon}
|
|
126
|
+
/>
|
|
127
|
+
</>
|
|
128
|
+
);
|
|
129
|
+
};
|
|
130
|
+
export default BrandResource;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DASH Resource Loader
|
|
3
|
+
*
|
|
4
|
+
* Dynamic resource loading system that loads resources from a JSON manifest.
|
|
5
|
+
* Supports caching to prevent redundant imports and can be configured with
|
|
6
|
+
* a custom manifest path.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import { IDashAutoAdminResourceConfig } from 'dash-auto-admin';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Resource manifest entry interface
|
|
14
|
+
*/
|
|
15
|
+
export interface IResourceManifestEntry {
|
|
16
|
+
/** Unique name identifier for the resource */
|
|
17
|
+
name: string;
|
|
18
|
+
/** Import path for the resource module */
|
|
19
|
+
path: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Resource loader configuration options
|
|
24
|
+
*/
|
|
25
|
+
export interface IDASHResourceLoaderConfig {
|
|
26
|
+
/** Path to the resource manifest JSON file */
|
|
27
|
+
manifestPath?: string;
|
|
28
|
+
/** Whether to enable caching of loaded resources */
|
|
29
|
+
enableCache?: boolean;
|
|
30
|
+
/** Custom manifest entries to use instead of loading from file */
|
|
31
|
+
customManifest?: IResourceManifestEntry[];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Cache for loaded resources to prevent redundant imports
|
|
36
|
+
*/
|
|
37
|
+
let resourceCache: IDashAutoAdminResourceConfig[] | null = null;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Clear the resource cache
|
|
41
|
+
* Useful when you need to reload resources
|
|
42
|
+
*/
|
|
43
|
+
export const clearResourceCache = (): void => {
|
|
44
|
+
resourceCache = null;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Get cached resources if available
|
|
49
|
+
*/
|
|
50
|
+
export const getCachedResources = (): IDashAutoAdminResourceConfig[] | null => {
|
|
51
|
+
return resourceCache;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Load resources from a manifest
|
|
56
|
+
*
|
|
57
|
+
* @param manifest - Array of resource manifest entries
|
|
58
|
+
* @returns Promise resolving to array of resource configurations
|
|
59
|
+
*/
|
|
60
|
+
export const loadResourcesFromManifest = async (
|
|
61
|
+
manifest: IResourceManifestEntry[]
|
|
62
|
+
): Promise<IDashAutoAdminResourceConfig[]> => {
|
|
63
|
+
const resources: IDashAutoAdminResourceConfig[] = [];
|
|
64
|
+
|
|
65
|
+
const loadedModules = await Promise.all(
|
|
66
|
+
manifest.map(async (item) => {
|
|
67
|
+
try {
|
|
68
|
+
// Dynamic import of the resource module
|
|
69
|
+
const module = await import(/* @vite-ignore */ item.path);
|
|
70
|
+
return {
|
|
71
|
+
name: item.name,
|
|
72
|
+
module: module.default || module,
|
|
73
|
+
};
|
|
74
|
+
} catch (error) {
|
|
75
|
+
console.error(`Failed to load resource "${item.name}" from "${item.path}":`, error);
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
})
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
loadedModules.forEach((loaded) => {
|
|
82
|
+
if (loaded && loaded.module) {
|
|
83
|
+
// Handle both single resource and array of resources
|
|
84
|
+
if (Array.isArray(loaded.module)) {
|
|
85
|
+
resources.push(...loaded.module);
|
|
86
|
+
} else {
|
|
87
|
+
resources.push(loaded.module);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
return resources;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Default manifest loader that imports the manifest from a path
|
|
97
|
+
*
|
|
98
|
+
* @param manifestPath - Path to the manifest JSON file
|
|
99
|
+
* @returns Promise resolving to array of manifest entries
|
|
100
|
+
*/
|
|
101
|
+
export const loadManifest = async (
|
|
102
|
+
manifestPath: string
|
|
103
|
+
): Promise<IResourceManifestEntry[]> => {
|
|
104
|
+
try {
|
|
105
|
+
const manifestModule = await import(/* @vite-ignore */ manifestPath);
|
|
106
|
+
return manifestModule.default || manifestModule;
|
|
107
|
+
} catch (error) {
|
|
108
|
+
console.error(`Failed to load manifest from "${manifestPath}":`, error);
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Create a resource loader function with configuration
|
|
115
|
+
*
|
|
116
|
+
* @param config - Resource loader configuration
|
|
117
|
+
* @returns Async function that returns loaded resources
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```tsx
|
|
121
|
+
* // Using manifest file path
|
|
122
|
+
* const getResources = createDASHResourceLoader({
|
|
123
|
+
* manifestPath: '@app/resourceManifest.json'
|
|
124
|
+
* });
|
|
125
|
+
*
|
|
126
|
+
* // Using custom manifest array
|
|
127
|
+
* const getResources = createDASHResourceLoader({
|
|
128
|
+
* customManifest: [
|
|
129
|
+
* { name: 'todoResource', path: '@app/resources/todoResource' }
|
|
130
|
+
* ]
|
|
131
|
+
* });
|
|
132
|
+
*
|
|
133
|
+
* // Then use it
|
|
134
|
+
* const resources = await getResources();
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
export const createDASHResourceLoader = (
|
|
138
|
+
config: IDASHResourceLoaderConfig = {}
|
|
139
|
+
): (() => Promise<IDashAutoAdminResourceConfig[]>) => {
|
|
140
|
+
const { manifestPath, enableCache = true, customManifest } = config;
|
|
141
|
+
|
|
142
|
+
return async (): Promise<IDashAutoAdminResourceConfig[]> => {
|
|
143
|
+
// Return cached resources if caching is enabled and cache exists
|
|
144
|
+
if (enableCache && resourceCache) {
|
|
145
|
+
return resourceCache;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
let manifest: IResourceManifestEntry[];
|
|
149
|
+
|
|
150
|
+
if (customManifest) {
|
|
151
|
+
// Use custom manifest if provided
|
|
152
|
+
manifest = customManifest;
|
|
153
|
+
} else if (manifestPath) {
|
|
154
|
+
// Load manifest from file path
|
|
155
|
+
manifest = await loadManifest(manifestPath);
|
|
156
|
+
} else {
|
|
157
|
+
console.warn('No manifest path or custom manifest provided to resource loader');
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const resources = await loadResourcesFromManifest(manifest);
|
|
162
|
+
|
|
163
|
+
// Cache the results if caching is enabled
|
|
164
|
+
if (enableCache) {
|
|
165
|
+
resourceCache = resources;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return resources;
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Default resource loader using @app/resourceManifest.json
|
|
174
|
+
* This is a convenience export for the most common use case.
|
|
175
|
+
*/
|
|
176
|
+
export const getDASHResources = createDASHResourceLoader({
|
|
177
|
+
manifestPath: '@app/resourceManifest.json',
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
export default createDASHResourceLoader;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Resource, TabbedShowLayout } from 'react-admin';
|
|
2
|
+
import { Show } from 'react-admin';
|
|
3
|
+
import { IAppResourceConfig } from '../../interfaces/IAppResourceConfig';
|
|
4
|
+
import { TopToolbar } from 'react-admin';
|
|
5
|
+
import { EditButton } from 'react-admin';
|
|
6
|
+
import { CustomRoutes } from 'react-admin';
|
|
7
|
+
import TrashTemplate from '../Trash/TrashTemplate';
|
|
8
|
+
import {
|
|
9
|
+
DashAutoList,
|
|
10
|
+
DashAutoReferenceTab,
|
|
11
|
+
DashAutoTabs,
|
|
12
|
+
DashAutoTitle,
|
|
13
|
+
} from 'dash-auto-admin';
|
|
14
|
+
import ApplicationLayout from '../../layout/ApplicationLayout';
|
|
15
|
+
|
|
16
|
+
export const LogResource = (resourceConfig: IAppResourceConfig) => {
|
|
17
|
+
return (
|
|
18
|
+
<>
|
|
19
|
+
<CustomRoutes>{TrashTemplate(resourceConfig)}</CustomRoutes>
|
|
20
|
+
|
|
21
|
+
<Resource
|
|
22
|
+
options={{ label: resourceConfig.label, group: resourceConfig.group }}
|
|
23
|
+
name={resourceConfig.model}
|
|
24
|
+
list={() => {
|
|
25
|
+
return (
|
|
26
|
+
<ApplicationLayout resourceConfig={resourceConfig}>
|
|
27
|
+
<DashAutoList
|
|
28
|
+
/*sx={{
|
|
29
|
+
flexGrow: 1,
|
|
30
|
+
transition: (theme: any) =>
|
|
31
|
+
theme.transitions.create(['all'], {
|
|
32
|
+
duration: theme.transitions.duration.enteringScreen,
|
|
33
|
+
})
|
|
34
|
+
}}*/
|
|
35
|
+
|
|
36
|
+
/*search={resourceConfig.search} schema={resourceConfig.listSchema ? resourceConfig.listSchema : resourceConfig.schema} BulkActions={resourceConfig.BulkActions} create={resourceConfig.create}*/ resourceConfig={
|
|
37
|
+
resourceConfig
|
|
38
|
+
}
|
|
39
|
+
/>
|
|
40
|
+
</ApplicationLayout>
|
|
41
|
+
);
|
|
42
|
+
}}
|
|
43
|
+
show={() => {
|
|
44
|
+
const ShowActions = ({ edit }) => (
|
|
45
|
+
<TopToolbar sx={{ mb: 2 }} >{edit !== false && <EditButton />}</TopToolbar>
|
|
46
|
+
);
|
|
47
|
+
return (
|
|
48
|
+
<ApplicationLayout resourceConfig={resourceConfig}>
|
|
49
|
+
<Show
|
|
50
|
+
title={
|
|
51
|
+
<DashAutoTitle
|
|
52
|
+
resourceConfig={resourceConfig}
|
|
53
|
+
//schema={resourceConfig.showSchema ? resourceConfig.showSchema : resourceConfig.schema}
|
|
54
|
+
/>
|
|
55
|
+
}
|
|
56
|
+
actions={<ShowActions edit={resourceConfig.edit} />}
|
|
57
|
+
>
|
|
58
|
+
<TabbedShowLayout>
|
|
59
|
+
{DashAutoTabs(resourceConfig)}
|
|
60
|
+
{resourceConfig.references &&
|
|
61
|
+
resourceConfig.references.map((reference) => DashAutoReferenceTab(reference) )}
|
|
62
|
+
</TabbedShowLayout>
|
|
63
|
+
</Show>
|
|
64
|
+
</ApplicationLayout>
|
|
65
|
+
);
|
|
66
|
+
}}
|
|
67
|
+
/* @ts-ignore Known issue type mismatch */
|
|
68
|
+
icon={resourceConfig.icon}
|
|
69
|
+
/>
|
|
70
|
+
</>
|
|
71
|
+
);
|
|
72
|
+
};
|
|
73
|
+
export default LogResource;
|