@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,553 @@
|
|
|
1
|
+
// 1. Direct Login with DASHAuthenticationService
|
|
2
|
+
// // In a custom login component using react-admin.
|
|
3
|
+
// import DASHAuthenticationService from './DASHAuthenticationService';
|
|
4
|
+
// import { useLogin } from 'react-admin';
|
|
5
|
+
//
|
|
6
|
+
// const CustomLoginComponent = () => {
|
|
7
|
+
// const login = useLogin();
|
|
8
|
+
//
|
|
9
|
+
// const handleLogin = async (credentials) => {
|
|
10
|
+
// try {
|
|
11
|
+
// // Use your custom authentication service
|
|
12
|
+
// await DASHAuthenticationService.loginWithReactAdmin(credentials, login);
|
|
13
|
+
// // User is now logged in and React Admin is aware
|
|
14
|
+
// } catch (error) {
|
|
15
|
+
// console.error('Login failed:', error);
|
|
16
|
+
// }
|
|
17
|
+
// };
|
|
18
|
+
//
|
|
19
|
+
// // Your login form JSX
|
|
20
|
+
// };
|
|
21
|
+
//
|
|
22
|
+
//
|
|
23
|
+
//
|
|
24
|
+
// 2. Using React Admin's Standard Login
|
|
25
|
+
// // React Admin will automatically use your authProvider
|
|
26
|
+
// const App = () => (
|
|
27
|
+
// <Admin
|
|
28
|
+
// authProvider={authProvider}
|
|
29
|
+
// dataProvider={dataProvider}
|
|
30
|
+
// // ... other props
|
|
31
|
+
// >
|
|
32
|
+
// {/* Your resources */}
|
|
33
|
+
// </Admin>
|
|
34
|
+
// );
|
|
35
|
+
//
|
|
36
|
+
//
|
|
37
|
+
// 3. Manual Integration
|
|
38
|
+
// // If you need to manually set auth data
|
|
39
|
+
// import authProvider from './DASHAuthProvider';
|
|
40
|
+
//
|
|
41
|
+
// const someFunction = async () => {
|
|
42
|
+
// const authData = {
|
|
43
|
+
// token: 'your-token',
|
|
44
|
+
// user: { /* user data */ },
|
|
45
|
+
// auth: { /* auth data */ }
|
|
46
|
+
// };
|
|
47
|
+
//
|
|
48
|
+
// await authProvider.loginWithAuthData(authData);
|
|
49
|
+
// };
|
|
50
|
+
import { useDispatch, useSelector } from 'react-redux';
|
|
51
|
+
import { IGetAuth } from '../../interfaces/user/IGetAuth';
|
|
52
|
+
import { IGetAuthUser } from '../../interfaces/user/IUser';
|
|
53
|
+
import React, {
|
|
54
|
+
FC,
|
|
55
|
+
PropsWithChildren,
|
|
56
|
+
useCallback,
|
|
57
|
+
useContext,
|
|
58
|
+
useRef,
|
|
59
|
+
} from 'react';
|
|
60
|
+
import { DASH_REDUX_ACTIONS, IAuthState, IDASHAppState } from 'dash-admin-state';
|
|
61
|
+
import { ACTION_UPDATE_AUTH, ACTION_UPDATE_AUTH_AUTH } from 'dash-admin-state/src/redux/reducers/Auth';
|
|
62
|
+
import useAxios from '../../hooks/axios';
|
|
63
|
+
import { getEnv } from 'dash-constants/src/DASHAdminSystemConstants';
|
|
64
|
+
|
|
65
|
+
import { useDashThemeContext } from '../../default-theme/DashThemeContext';
|
|
66
|
+
import AppLayoutSettings from '../../theme/AppLayoutSetting';
|
|
67
|
+
import DASHAuthenticationService from './DASHAuthenticationService';
|
|
68
|
+
|
|
69
|
+
import { AuthPersistenceService, clearDeviceStoreAuth } from 'dash-auth';
|
|
70
|
+
import { dashStorage } from 'dash-utils';
|
|
71
|
+
export class AuthContextClass {
|
|
72
|
+
static values: Partial<IAuthContextProps>;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface IAuthContextProps {
|
|
76
|
+
authenticated: boolean;
|
|
77
|
+
user: IGetAuthUser;
|
|
78
|
+
auth: IGetAuth;
|
|
79
|
+
token: string;
|
|
80
|
+
roles: any;
|
|
81
|
+
systemValues?: any;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export interface IAuthContext {
|
|
85
|
+
user: IGetAuthUser;
|
|
86
|
+
authenticated: boolean;
|
|
87
|
+
auth?: IGetAuth;
|
|
88
|
+
token?: string;
|
|
89
|
+
roles?: any;
|
|
90
|
+
systemValues?: any;
|
|
91
|
+
updateValues: (values: Partial<IAuthContextProps>) => void;
|
|
92
|
+
logout: (callback?: () => void) => Promise<void>;
|
|
93
|
+
handleReactAdminIdentity: (identity: any) => void;
|
|
94
|
+
getPermissions: () => Promise<any>;
|
|
95
|
+
fetchAuth: () => Promise<any>;
|
|
96
|
+
getSystemValues: () => any;
|
|
97
|
+
getSystemValue: (key: string) => any;
|
|
98
|
+
getPointOfSales: () => any;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export const AuthContext = React.createContext<IAuthContext>(null);
|
|
102
|
+
|
|
103
|
+
export interface IAuthContextProvider extends PropsWithChildren {
|
|
104
|
+
values?: Partial<IAuthContextProps>;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export const AuthContextProvider: FC<IAuthContextProvider> = (props) => {
|
|
108
|
+
const { children } = props;
|
|
109
|
+
const auth: IAuthState<any, any> = useSelector((state: IDASHAppState<any, any, any>) => state.auth);
|
|
110
|
+
const dispatch = useDispatch();
|
|
111
|
+
const { axios } = useAxios();
|
|
112
|
+
|
|
113
|
+
// Add this line to get theme context
|
|
114
|
+
const { recreateTheme } = useDashThemeContext();
|
|
115
|
+
|
|
116
|
+
// Use refs to prevent infinite loops
|
|
117
|
+
const isHandlingIdentityRef = useRef(false);
|
|
118
|
+
const lastIdentityRef = useRef<string>('');
|
|
119
|
+
const lastTenantImagesRef = useRef<string>('');
|
|
120
|
+
const lastTenantSettingsRef = useRef<string>('');
|
|
121
|
+
const lastSystemValuesRef = useRef<string>('');
|
|
122
|
+
const hasInitializedRef = useRef(false);
|
|
123
|
+
|
|
124
|
+
// Initialize context values with proper fallbacks
|
|
125
|
+
const [contextValues, setContextValues] = React.useState<Partial<IAuthContextProps>>(() => {
|
|
126
|
+
// Try to get initial values from localStorage and Redux
|
|
127
|
+
const storedUser = AuthPersistenceService.getUser();
|
|
128
|
+
const storedToken = AuthPersistenceService.getToken();
|
|
129
|
+
const storedSystemValues = AuthPersistenceService.getSystemValues();
|
|
130
|
+
const isAuthenticated = JSON.parse(dashStorage.getItem('authenticated') || 'false');
|
|
131
|
+
|
|
132
|
+
return {
|
|
133
|
+
authenticated: auth.authenticated || isAuthenticated,
|
|
134
|
+
user: auth.user || storedUser,
|
|
135
|
+
auth: auth.auth,
|
|
136
|
+
token: auth.user?.token || storedToken,
|
|
137
|
+
roles: auth.user?.roles,
|
|
138
|
+
systemValues: storedSystemValues
|
|
139
|
+
};
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// Internal method to fetch complete auth data
|
|
143
|
+
const fetchCompleteAuth = useCallback(async () => {
|
|
144
|
+
console.log('Making GET request to:', getEnv('APP_GETAUTH_ENDPOINT'));
|
|
145
|
+
try {
|
|
146
|
+
const { data: authResponse } = await axios.get(getEnv('APP_GETAUTH_ENDPOINT'));
|
|
147
|
+
console.log('Received complete auth data:', authResponse);
|
|
148
|
+
|
|
149
|
+
// Save auth data including systemValues to localStorage
|
|
150
|
+
AuthPersistenceService.saveAuth({
|
|
151
|
+
auth: authResponse.auth,
|
|
152
|
+
systemValues: authResponse.systemValues
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
// Update Redux store with complete auth data (both user and auth)
|
|
156
|
+
dispatch(
|
|
157
|
+
DASH_REDUX_ACTIONS.updateAuth(ACTION_UPDATE_AUTH, {
|
|
158
|
+
user: authResponse.user,
|
|
159
|
+
authenticated: true,
|
|
160
|
+
auth: authResponse.auth,
|
|
161
|
+
})
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
// Update context with system values
|
|
165
|
+
setContextValues(prev => ({
|
|
166
|
+
...prev,
|
|
167
|
+
systemValues: authResponse.systemValues
|
|
168
|
+
}));
|
|
169
|
+
|
|
170
|
+
return authResponse;
|
|
171
|
+
} catch (error) {
|
|
172
|
+
console.error('Error fetching complete auth data:', error);
|
|
173
|
+
AuthPersistenceService.markAsLoggedOut();
|
|
174
|
+
throw error;
|
|
175
|
+
}
|
|
176
|
+
}, [axios, dispatch]);
|
|
177
|
+
|
|
178
|
+
// Method to initialize auth from token
|
|
179
|
+
const initializeAuthFromToken = useCallback(async () => {
|
|
180
|
+
const token = AuthPersistenceService.getToken();
|
|
181
|
+
const storedUser = AuthPersistenceService.getUser();
|
|
182
|
+
const isAuthenticated = JSON.parse(dashStorage.getItem('authenticated') || 'false');
|
|
183
|
+
|
|
184
|
+
console.log('Initializing auth from token:', {
|
|
185
|
+
hasToken: !!token,
|
|
186
|
+
hasStoredUser: !!storedUser,
|
|
187
|
+
isAuthenticated,
|
|
188
|
+
reduxAuthenticated: auth.authenticated
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
// If we have a token but no complete auth data, fetch it
|
|
192
|
+
if (token && !auth.authenticated) {
|
|
193
|
+
try {
|
|
194
|
+
console.log('Token found but not fully authenticated, fetching complete auth data...');
|
|
195
|
+
await fetchCompleteAuth();
|
|
196
|
+
} catch (error) {
|
|
197
|
+
console.error('Failed to initialize auth from token:', error);
|
|
198
|
+
// If fetching fails, clear the invalid token
|
|
199
|
+
AuthPersistenceService.markAsLoggedOut();
|
|
200
|
+
}
|
|
201
|
+
} else if (isAuthenticated && storedUser && token && !auth.authenticated) {
|
|
202
|
+
// If we have all stored data but Redux isn't updated, restore the session
|
|
203
|
+
console.log('Restoring auth session from localStorage');
|
|
204
|
+
|
|
205
|
+
const persistedAuth = AuthPersistenceService.getAuth();
|
|
206
|
+
|
|
207
|
+
dispatch(
|
|
208
|
+
DASH_REDUX_ACTIONS.updateAuth(ACTION_UPDATE_AUTH, {
|
|
209
|
+
user: storedUser,
|
|
210
|
+
authenticated: true,
|
|
211
|
+
auth: persistedAuth?.auth || null,
|
|
212
|
+
})
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
}, [auth.authenticated, dispatch, fetchCompleteAuth]);
|
|
216
|
+
|
|
217
|
+
// Method for RADashComponent to call when react-admin identity is loaded
|
|
218
|
+
const handleReactAdminIdentity = useCallback(async (identity: any) => {
|
|
219
|
+
if (!identity || auth.authenticated || isHandlingIdentityRef.current) {
|
|
220
|
+
return; // Already authenticated, no identity, or already handling
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const identityKey = JSON.stringify(identity);
|
|
224
|
+
if (lastIdentityRef.current === identityKey) {
|
|
225
|
+
return; // Same identity, skip processing
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
isHandlingIdentityRef.current = true;
|
|
229
|
+
lastIdentityRef.current = identityKey;
|
|
230
|
+
|
|
231
|
+
console.log('Handling react-admin identity:', identity);
|
|
232
|
+
|
|
233
|
+
try {
|
|
234
|
+
// First set basic identity data
|
|
235
|
+
dispatch(
|
|
236
|
+
DASH_REDUX_ACTIONS.updateAuth(ACTION_UPDATE_AUTH, {
|
|
237
|
+
user: identity.user || identity,
|
|
238
|
+
authenticated: identity?.user ? true : (identity?.id ? true : false),
|
|
239
|
+
auth: identity.auth,
|
|
240
|
+
})
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
// Then fetch complete auth data including tenant settings
|
|
244
|
+
await fetchCompleteAuth();
|
|
245
|
+
} catch (error) {
|
|
246
|
+
console.error('Failed to fetch complete auth data after identity load');
|
|
247
|
+
} finally {
|
|
248
|
+
isHandlingIdentityRef.current = false;
|
|
249
|
+
}
|
|
250
|
+
}, [auth.authenticated, dispatch, fetchCompleteAuth]);
|
|
251
|
+
|
|
252
|
+
const logout = async (callback?: () => void) => {
|
|
253
|
+
// Mark as logged out but keep the auth.auth data
|
|
254
|
+
AuthPersistenceService.markAsLoggedOut();
|
|
255
|
+
|
|
256
|
+
// Clear auth data from device store (Electron/Capacitor)
|
|
257
|
+
// This is crucial - it removes token/user from electron-store so they
|
|
258
|
+
// don't get restored on next app launch
|
|
259
|
+
await clearDeviceStoreAuth();
|
|
260
|
+
|
|
261
|
+
DASHAuthenticationService.setPendingRedirect(window.location.pathname);
|
|
262
|
+
|
|
263
|
+
setContextValues({
|
|
264
|
+
authenticated: false,
|
|
265
|
+
user: null,
|
|
266
|
+
auth: null,
|
|
267
|
+
token: null,
|
|
268
|
+
roles: null,
|
|
269
|
+
systemValues: null
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
dispatch(
|
|
273
|
+
DASH_REDUX_ACTIONS.updateAuth(ACTION_UPDATE_AUTH, {
|
|
274
|
+
user: null,
|
|
275
|
+
authenticated: false,
|
|
276
|
+
auth: null,
|
|
277
|
+
}),
|
|
278
|
+
);
|
|
279
|
+
|
|
280
|
+
setAuthEvent({
|
|
281
|
+
authenticated: false,
|
|
282
|
+
user: null,
|
|
283
|
+
auth: null,
|
|
284
|
+
token: null,
|
|
285
|
+
roles: null,
|
|
286
|
+
systemValues: null
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
document.body.classList.remove(
|
|
290
|
+
AppLayoutSettings.LAYOUT_TYPE_FULL,
|
|
291
|
+
AppLayoutSettings.LAYOUT_TYPE_BOXED,
|
|
292
|
+
AppLayoutSettings.LAYOUT_TYPE_FRAMED,
|
|
293
|
+
AppLayoutSettings.THEME_TYPE_DARK,
|
|
294
|
+
AppLayoutSettings.THEME_TYPE_LIGHT
|
|
295
|
+
);
|
|
296
|
+
|
|
297
|
+
if (callback) {
|
|
298
|
+
callback();
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
// Replace the updateAuth function with this simplified version:
|
|
303
|
+
const updateAuth = useCallback((authData: Partial<IAuthContextProps>) => {
|
|
304
|
+
if (authData) {
|
|
305
|
+
console.log('🔄 AuthContext: Updating auth context with:', authData);
|
|
306
|
+
|
|
307
|
+
// Update local context state first
|
|
308
|
+
setContextValues(prevValues => {
|
|
309
|
+
const newValues = {
|
|
310
|
+
...prevValues,
|
|
311
|
+
...authData
|
|
312
|
+
};
|
|
313
|
+
console.log('✅ AuthContext: Local context updated:', newValues);
|
|
314
|
+
return newValues;
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
// Update Redux state if we have meaningful auth data and it's not a logout
|
|
318
|
+
if ((authData.authenticated !== undefined || authData.user || authData.auth) && authData.authenticated !== false) {
|
|
319
|
+
console.log('🔄 AuthContext: Dispatching to Redux state...');
|
|
320
|
+
|
|
321
|
+
const reduxPayload = {
|
|
322
|
+
user: authData.user || auth.user,
|
|
323
|
+
authenticated: authData.authenticated ?? auth.authenticated,
|
|
324
|
+
auth: authData.auth || auth.auth,
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
console.log('🔄 AuthContext: Redux payload:', reduxPayload);
|
|
328
|
+
|
|
329
|
+
dispatch(
|
|
330
|
+
DASH_REDUX_ACTIONS.updateAuth(ACTION_UPDATE_AUTH, reduxPayload)
|
|
331
|
+
);
|
|
332
|
+
|
|
333
|
+
console.log('✅ AuthContext: Redux dispatch completed');
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}, [dispatch, auth.user, auth.authenticated, auth.auth]);
|
|
337
|
+
|
|
338
|
+
const updateValues = useCallback((authData: Partial<IAuthContextProps>) => {
|
|
339
|
+
console.log('Manual update values called with:', authData);
|
|
340
|
+
setContextValues(prevValues => ({
|
|
341
|
+
...prevValues,
|
|
342
|
+
...authData
|
|
343
|
+
}));
|
|
344
|
+
}, []);
|
|
345
|
+
|
|
346
|
+
const getPermissions = useCallback((): Promise<any> => {
|
|
347
|
+
try {
|
|
348
|
+
// First check if user is guest
|
|
349
|
+
if (contextValues.roles === 'guest') {
|
|
350
|
+
return Promise.resolve('guest');
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// Use current context values first (most up-to-date)
|
|
354
|
+
if (contextValues.roles && Array.isArray(contextValues.roles)) {
|
|
355
|
+
const processedPermissions = {
|
|
356
|
+
roles: contextValues.roles.map((item: any) =>
|
|
357
|
+
typeof item === 'string' ? item : item.name
|
|
358
|
+
)
|
|
359
|
+
};
|
|
360
|
+
return Promise.resolve(processedPermissions);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// Fallback to auth object roles
|
|
364
|
+
if (auth.user?.roles && Array.isArray(auth.user.roles)) {
|
|
365
|
+
const processedPermissions = {
|
|
366
|
+
roles: auth.user.roles.map((item: any) =>
|
|
367
|
+
typeof item === 'string' ? item : item.name
|
|
368
|
+
)
|
|
369
|
+
};
|
|
370
|
+
return Promise.resolve(processedPermissions);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// Final fallback to persistence service
|
|
374
|
+
return AuthPersistenceService.getPermissions();
|
|
375
|
+
} catch (error) {
|
|
376
|
+
console.error('Failed to get permissions from context:', error);
|
|
377
|
+
return Promise.resolve('null');
|
|
378
|
+
}
|
|
379
|
+
}, [contextValues.roles, auth.user?.roles]);
|
|
380
|
+
|
|
381
|
+
// Add system values methods
|
|
382
|
+
const getSystemValues = useCallback(() => {
|
|
383
|
+
return contextValues.systemValues || AuthPersistenceService.getSystemValues();
|
|
384
|
+
}, [contextValues.systemValues]);
|
|
385
|
+
|
|
386
|
+
const getSystemValue = useCallback((key: string) => {
|
|
387
|
+
const systemValues = getSystemValues();
|
|
388
|
+
return systemValues ? systemValues[key] : null;
|
|
389
|
+
}, [getSystemValues]);
|
|
390
|
+
|
|
391
|
+
const getPointOfSales = useCallback(() => {
|
|
392
|
+
return getSystemValue('point_of_sales');
|
|
393
|
+
}, [getSystemValue]);
|
|
394
|
+
|
|
395
|
+
React.useEffect(() => {
|
|
396
|
+
const handleAuthEvent = (event: CustomEvent<Partial<IAuthContextProps>>) => {
|
|
397
|
+
console.log('Auth event received:', event.detail);
|
|
398
|
+
updateAuth(event.detail);
|
|
399
|
+
};
|
|
400
|
+
|
|
401
|
+
window.addEventListener('authEvent', handleAuthEvent as EventListener);
|
|
402
|
+
return () => {
|
|
403
|
+
window.removeEventListener('authEvent', handleAuthEvent as EventListener);
|
|
404
|
+
};
|
|
405
|
+
}, [updateAuth]);
|
|
406
|
+
|
|
407
|
+
// Sync with Redux state changes and handle persistence + panel settings
|
|
408
|
+
React.useEffect(() => {
|
|
409
|
+
console.log('Redux auth state changed:', {
|
|
410
|
+
authenticated: auth.authenticated,
|
|
411
|
+
user: !!auth.user,
|
|
412
|
+
auth: !!auth.auth
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
// Update panel settings and recreate theme when tenant data is available
|
|
416
|
+
// Use refs to prevent unnecessary updates
|
|
417
|
+
if (auth.authenticated) {
|
|
418
|
+
let tenantImages = auth?.auth?.tenantImages;
|
|
419
|
+
let tenantSettings = auth?.auth?.tenantSettings;
|
|
420
|
+
let systemValues = contextValues.systemValues; // Get from context values
|
|
421
|
+
|
|
422
|
+
if (!tenantImages) {
|
|
423
|
+
tenantImages = AuthPersistenceService.getTenantImages();
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
if (!tenantSettings) {
|
|
427
|
+
tenantSettings = AuthPersistenceService.getTenantSettings();
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
if (!systemValues) {
|
|
431
|
+
systemValues = AuthPersistenceService.getSystemValues();
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// Update panel settings with tenant images (only if we have new data)
|
|
435
|
+
const tenantImagesKey = JSON.stringify(tenantImages);
|
|
436
|
+
if (tenantImages && lastTenantImagesRef.current !== tenantImagesKey) {
|
|
437
|
+
console.log('Updating panel settings with tenant images from auth context or persisted data');
|
|
438
|
+
lastTenantImagesRef.current = tenantImagesKey;
|
|
439
|
+
const logos = {
|
|
440
|
+
...(tenantImages.horizontal_logo.original && { horizontalLogo: tenantImages.horizontal_logo.original }),
|
|
441
|
+
...(tenantImages.squared_logo.original && { squaredLogo: tenantImages.squared_logo.original }),
|
|
442
|
+
...(tenantImages.banner.original && { loginBackground: tenantImages.banner.original })
|
|
443
|
+
};
|
|
444
|
+
|
|
445
|
+
dispatch(
|
|
446
|
+
DASH_REDUX_ACTIONS.setPanelSettings(logos)
|
|
447
|
+
);
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
// Recreate MUI theme when tenant settings are available (only if we have new data)
|
|
452
|
+
const tenantSettingsKey = JSON.stringify(tenantSettings);
|
|
453
|
+
if (tenantSettings && lastTenantSettingsRef.current !== tenantSettingsKey) {
|
|
454
|
+
console.log('Recreating MUI theme with tenant settings from auth context');
|
|
455
|
+
lastTenantSettingsRef.current = tenantSettingsKey;
|
|
456
|
+
recreateTheme(tenantSettings);
|
|
457
|
+
|
|
458
|
+
// Sync tenant settings to Redux settings slice
|
|
459
|
+
dispatch(
|
|
460
|
+
DASH_REDUX_ACTIONS.updateThemeSettings(tenantSettings)
|
|
461
|
+
);
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// Handle system values data (only if we have new data)
|
|
465
|
+
const systemValuesKey = JSON.stringify(systemValues);
|
|
466
|
+
if (systemValues && lastSystemValuesRef.current !== systemValuesKey) {
|
|
467
|
+
console.log('Processing system values from auth context or persisted data');
|
|
468
|
+
lastSystemValuesRef.current = systemValuesKey;
|
|
469
|
+
|
|
470
|
+
// Log available system values
|
|
471
|
+
console.log('Available system values:', Object.keys(systemValues));
|
|
472
|
+
console.log('Point of Sales:', systemValues.point_of_sales);
|
|
473
|
+
|
|
474
|
+
// You can dispatch to Redux or handle other system values as needed
|
|
475
|
+
// For example:
|
|
476
|
+
// if (systemValues.some_other_key) {
|
|
477
|
+
// dispatch(DASH_REDUX_ACTIONS.setSomeOtherData(systemValues.some_other_key));
|
|
478
|
+
// }
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
// Handle IPC service for background service
|
|
482
|
+
const storageAuthenticated = JSON.parse(dashStorage.getItem('authenticated') || 'false');
|
|
483
|
+
if (storageAuthenticated && auth.user?.tenant_id) {
|
|
484
|
+
const { DashIPCService } = window;
|
|
485
|
+
DashIPCService && DashIPCService.action('start-bg-service', {
|
|
486
|
+
token: dashStorage.getItem('token'),
|
|
487
|
+
channel: `private-tenant.${auth.user.tenant_id}.system`
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
}, [auth.authenticated, contextValues.systemValues]);
|
|
493
|
+
|
|
494
|
+
// Debug effect to log context values changes
|
|
495
|
+
React.useEffect(() => {
|
|
496
|
+
console.log('Auth context values changed:', {
|
|
497
|
+
authenticated: contextValues.authenticated,
|
|
498
|
+
user: contextValues.user ? `${contextValues.user.name} (${contextValues.user.id})` : null,
|
|
499
|
+
auth: contextValues.auth,
|
|
500
|
+
token: contextValues.token ? 'present' : 'missing',
|
|
501
|
+
systemValues: contextValues.systemValues ? Object.keys(contextValues.systemValues) : null
|
|
502
|
+
});
|
|
503
|
+
}, [contextValues]);
|
|
504
|
+
|
|
505
|
+
// Create the context value - ensure we always return the most current data
|
|
506
|
+
const contextValue: IAuthContext = React.useMemo(() => {
|
|
507
|
+
const currentUser = contextValues.user || auth.user || AuthPersistenceService.getUser();
|
|
508
|
+
const currentAuthenticated = contextValues.authenticated ?? auth.authenticated ?? false;
|
|
509
|
+
const currentToken = contextValues.token || auth.user?.token || AuthPersistenceService.getToken();
|
|
510
|
+
|
|
511
|
+
return {
|
|
512
|
+
user: currentUser,
|
|
513
|
+
authenticated: currentAuthenticated,
|
|
514
|
+
auth: contextValues.auth || auth.auth,
|
|
515
|
+
token: currentToken,
|
|
516
|
+
roles: contextValues.roles || auth.user?.roles,
|
|
517
|
+
systemValues: contextValues.systemValues || AuthPersistenceService.getSystemValues(),
|
|
518
|
+
updateValues,
|
|
519
|
+
logout,
|
|
520
|
+
handleReactAdminIdentity,
|
|
521
|
+
getPermissions,
|
|
522
|
+
fetchAuth: fetchCompleteAuth,
|
|
523
|
+
getSystemValues,
|
|
524
|
+
getSystemValue,
|
|
525
|
+
getPointOfSales
|
|
526
|
+
};
|
|
527
|
+
}, [contextValues, auth, updateValues, logout, handleReactAdminIdentity, getPermissions, fetchCompleteAuth, getSystemValues, getSystemValue, getPointOfSales]);
|
|
528
|
+
|
|
529
|
+
return (
|
|
530
|
+
<AuthContext.Provider value={contextValue}>
|
|
531
|
+
{children}
|
|
532
|
+
</AuthContext.Provider>
|
|
533
|
+
);
|
|
534
|
+
};
|
|
535
|
+
|
|
536
|
+
export const AuthContextConsumer = AuthContext.Consumer;
|
|
537
|
+
|
|
538
|
+
export const useAuthContext = () => {
|
|
539
|
+
const authContext: IAuthContext = useContext(AuthContext);
|
|
540
|
+
return authContext;
|
|
541
|
+
};
|
|
542
|
+
|
|
543
|
+
export const setAuthEvent = (values: Partial<IAuthContextProps>) => {
|
|
544
|
+
console.log('Setting auth event:', values);
|
|
545
|
+
window.dispatchEvent(new CustomEvent('authEvent', { detail: values }));
|
|
546
|
+
return values;
|
|
547
|
+
};
|
|
548
|
+
|
|
549
|
+
export const getAuthPermissions = (): Promise<any> => {
|
|
550
|
+
return AuthPersistenceService.getPermissions();
|
|
551
|
+
};
|
|
552
|
+
|
|
553
|
+
export default AuthContext;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import useLocalStorage from '../../hooks/useLocalStorage';
|
|
2
|
+
import { IGetAuth } from '../../interfaces/user/IGetAuth';
|
|
3
|
+
import { IGetAuthUser } from '../../interfaces/user/IUser';
|
|
4
|
+
import React, {
|
|
5
|
+
FC,
|
|
6
|
+
PropsWithChildren,
|
|
7
|
+
useContext,
|
|
8
|
+
useState,
|
|
9
|
+
useEffect
|
|
10
|
+
} from 'react';
|
|
11
|
+
|
|
12
|
+
import { dashStorage } from 'dash-utils';
|
|
13
|
+
|
|
14
|
+
export class AuthContextClass {
|
|
15
|
+
static values: Partial<IAuthContextProps>;
|
|
16
|
+
}
|
|
17
|
+
export interface IAuthContextProps {
|
|
18
|
+
authenticated: boolean;
|
|
19
|
+
user: IGetAuthUser;
|
|
20
|
+
auth: IGetAuth;
|
|
21
|
+
token: string;
|
|
22
|
+
roles: any;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface IAuthContext extends Partial<IAuthContextProps> {
|
|
26
|
+
updateValues: (values: Partial<IAuthContextProps>) => void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const defaultValues: IAuthContextProps = {
|
|
30
|
+
authenticated: false,
|
|
31
|
+
user: null,
|
|
32
|
+
auth: null,
|
|
33
|
+
token: null,
|
|
34
|
+
roles: null
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export const AuthContextLocalStorage = React.createContext<IAuthContext>(null);
|
|
38
|
+
|
|
39
|
+
export interface IAuthContextProvider extends PropsWithChildren {
|
|
40
|
+
values?: Partial<IAuthContextProps>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export const AuthContextProvider: FC<IAuthContextProvider> = (props) => {
|
|
44
|
+
const { children, values } = props;
|
|
45
|
+
|
|
46
|
+
// Use a regular state for the context values
|
|
47
|
+
const [contextValues, setContextValues] = useState<Partial<IAuthContextProps>>(
|
|
48
|
+
values || defaultValues
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
// Use localStorage for persistence, but handle serialization/deserialization properly
|
|
52
|
+
const [serializedValues, setSerializedValues] = useLocalStorage(
|
|
53
|
+
'SerializedAuthContext',
|
|
54
|
+
JSON.stringify(values || defaultValues),
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
// Initialize from localStorage on mount
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
try {
|
|
60
|
+
const parsedValues = typeof serializedValues === 'string'
|
|
61
|
+
? JSON.parse(serializedValues)
|
|
62
|
+
: serializedValues;
|
|
63
|
+
|
|
64
|
+
setContextValues(parsedValues || defaultValues);
|
|
65
|
+
} catch (error) {
|
|
66
|
+
console.error('Error parsing auth context from localStorage:', error);
|
|
67
|
+
setContextValues(defaultValues);
|
|
68
|
+
}
|
|
69
|
+
}, []);
|
|
70
|
+
|
|
71
|
+
// Update function that updates both state and localStorage
|
|
72
|
+
const updateValues = (newValues: Partial<IAuthContextProps>) => {
|
|
73
|
+
setContextValues(prevValues => {
|
|
74
|
+
const updatedValues = { ...prevValues, ...newValues };
|
|
75
|
+
|
|
76
|
+
// Update localStorage with serialized values
|
|
77
|
+
setSerializedValues(JSON.stringify(updatedValues));
|
|
78
|
+
|
|
79
|
+
return updatedValues;
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
return (
|
|
84
|
+
<AuthContextLocalStorage.Provider value={{ ...contextValues, updateValues }}>
|
|
85
|
+
{children}
|
|
86
|
+
</AuthContextLocalStorage.Provider>
|
|
87
|
+
);
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const AuthContextConsumer = AuthContextLocalStorage.Consumer;
|
|
91
|
+
|
|
92
|
+
export const useAuthContext = () => {
|
|
93
|
+
const authContext: IAuthContext = useContext(AuthContextLocalStorage);
|
|
94
|
+
return authContext;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const getAuthContext = () => {
|
|
98
|
+
try {
|
|
99
|
+
const serialized = dashStorage.getItem('SerializedAuthContext');
|
|
100
|
+
return serialized ? JSON.parse(serialized) as Partial<IAuthContextProps> : defaultValues;
|
|
101
|
+
} catch (error) {
|
|
102
|
+
console.error('Error getting auth context:', error);
|
|
103
|
+
return defaultValues;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export const updateAuthContext = (values: Partial<IAuthContextProps>) => {
|
|
108
|
+
try {
|
|
109
|
+
const prevState = getAuthContext();
|
|
110
|
+
const updatedState = { ...prevState, ...values };
|
|
111
|
+
|
|
112
|
+
dashStorage.setItem(
|
|
113
|
+
'SerializedAuthContext',
|
|
114
|
+
JSON.stringify(updatedState),
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
return updatedState;
|
|
118
|
+
} catch (error) {
|
|
119
|
+
console.error('Error updating auth context:', error);
|
|
120
|
+
return values;
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
export const setAuthContext = (values: Partial<IAuthContextProps>) => {
|
|
125
|
+
try {
|
|
126
|
+
// deprectate serialized ...
|
|
127
|
+
dashStorage.setItem('SerializedAuthContext', JSON.stringify(values));
|
|
128
|
+
|
|
129
|
+
dashStorage.setItem('roles', JSON.stringify(values.user.roles));
|
|
130
|
+
dashStorage.setItem('authenticated', 'true');
|
|
131
|
+
dashStorage.setItem('user', JSON.stringify(values.user));
|
|
132
|
+
|
|
133
|
+
return values;
|
|
134
|
+
} catch (error) {
|
|
135
|
+
console.error('Error setting auth context:', error);
|
|
136
|
+
return values;
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
export default AuthContextLocalStorage
|