@dashadmin/dash-admin 1.3.72 → 1.3.74-srcfree.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/tenant/TenancyPlan.js +307 -0
- package/dist/systemResources.js +18 -2
- package/package.json +25 -22
- package/src/AppAsyncWrapper.tsx +0 -42
- package/src/AppWrapper.tsx +0 -45
- package/src/DASHAdmin.tsx +0 -502
- package/src/DASHAdmin.tsx.old +0 -456
- package/src/RoutingWrapper.tsx +0 -143
- package/src/classes/DASHStorageClass.tsx +0 -8
- package/src/components/Input/RichTextField.tsx +0 -27
- package/src/components/Redirect.tsx +0 -46
- package/src/components/avatar/Avatar.tsx +0 -71
- package/src/components/avatar/SingleImageUploader.tsx +0 -107
- package/src/components/currency/Format.tsx +0 -79
- package/src/components/custom/Redirect.tsx +0 -23
- package/src/components/error/Error.tsx +0 -168
- package/src/components/geocoding/GeocodingField.tsx +0 -167
- package/src/components/i18n/BridgedLocalesMenuButton.tsx +0 -160
- package/src/components/i18n/LangSwitcher.tsx +0 -204
- package/src/components/loader/GlobalLoader.tsx +0 -49
- package/src/components/logs/LogFile.tsx +0 -88
- package/src/components/logs/LogFileById.tsx +0 -68
- package/src/components/logs/LogViewer.tsx +0 -43
- package/src/components/menu/AppMenu.tsx +0 -22
- package/src/components/menu/CustomMenuItemLink.tsx +0 -61
- package/src/components/menu/DarkToggleMode.tsx +0 -65
- package/src/components/menu/LanguageToggleMode.tsx +0 -120
- package/src/components/misc/CustomImageInput.tsx +0 -62
- package/src/components/misc/DASHGlobalErrorHandler.tsx +0 -194
- package/src/components/misc/DarkModeSwitcher.tsx +0 -112
- package/src/components/misc/HorizontalScroller.tsx +0 -225
- package/src/components/misc/LanguageSwitcher.tsx +0 -199
- package/src/components/misc/MUIHtmlToolTip.tsx +0 -15
- package/src/components/misc/MuiSimpleJsonTable.tsx +0 -279
- package/src/components/misc/MultiLevelTable.tsx +0 -229
- package/src/components/misc/NoResults.tsx +0 -28
- package/src/components/misc/PDFViewer.tsx +0 -85
- package/src/components/navigation/Breadcrumbs.tsx +0 -220
- package/src/components/navigation/BreadcrumbsManager.tsx +0 -310
- package/src/components/navigation/index.tsx +0 -5
- package/src/components/panel/Error.tsx +0 -168
- package/src/components/permission/AvailablePermissionsContext.tsx +0 -173
- package/src/components/permission/PermissionsSelector.tsx +0 -834
- package/src/components/permission/PermissionsSelectorList.tsx +0 -473
- package/src/components/permission/tsx +0 -0
- package/src/components/racustombuttons/CustomRAButton.tsx +0 -87
- package/src/components/racustombuttons/QuickButton.tsx +0 -117
- package/src/components/racustombuttons/QuickEditButton.tsx +0 -115
- package/src/components/racustombuttons/QuickIconButton.tsx +0 -122
- package/src/components/scrollbar/Scrollbar.tsx +0 -31
- package/src/components/selects/MultiSelect.tsx +0 -53
- package/src/components/selects/RASearchableSelect.tsx +0 -282
- package/src/components/selects/RASearchableSelectChips.tsx +0 -308
- package/src/components/selects/SearchableSelect.tsx +0 -139
- package/src/components/serviceAccount/ApiKeyRevealDialog.tsx +0 -129
- package/src/components/serviceAccount/ServiceAccountStatusSwitch.tsx +0 -99
- package/src/components/subscription/BillingCycleSelectInput.tsx +0 -68
- package/src/components/subscription/PlanAddonsSettings.tsx +0 -563
- package/src/components/subscription/PlanAuditLog.tsx +0 -453
- package/src/components/subscription/PlanFeaturesSettings.tsx +0 -243
- package/src/components/subscription/PlanLimitsSettings.tsx +0 -230
- package/src/components/subscription/PlanMetadataSettings.tsx +0 -306
- package/src/components/subscription/PlanPricesSettings.tsx +0 -307
- package/src/components/subscription/index.ts +0 -7
- package/src/components/svgelements/SvgLoading.tsx +0 -229
- package/src/components/svgelements/SvgLogo.tsx +0 -53
- package/src/components/svgelements/SvgLogoMin.tsx +0 -64
- package/src/components/svgelements/SvgShipping.tsx +0 -673
- package/src/components/tenancy/GlobalTenantWrapper.tsx +0 -84
- package/src/components/tenancy/TenantSwitcher.tsx +0 -514
- package/src/components/tenant/AvailablePermissionsContext.tsx +0 -0
- package/src/components/tenant/SettingsSections.tsx +0 -151
- package/src/components/tenant/TenancySettings.tsx +0 -122
- package/src/components/tenant/TenantAttributes.tsx +0 -153
- package/src/components/tenant/TenantAttributesContext.tsx +0 -163
- package/src/components/tenant/TenantSelector.tsx +0 -142
- package/src/components/tenant/TenantSettings.tsx +0 -184
- package/src/components/tenant/TenantSettingsContext.tsx +0 -165
- package/src/components/tenant/TenantTheme.tsx +0 -172
- package/src/components/user/AvatarComponent.tsx +0 -317
- package/src/components/user/TenantAvatarComponent.tsx +0 -99
- package/src/components/user/UserPreferences.tsx +0 -677
- package/src/config/ACTIONS.tsx +0 -26
- package/src/config/ConstantsService.tsx +0 -44
- package/src/config/DASHAdminSystemConstants.tsx +0 -183
- package/src/config/PARSERS.tsx +0 -9
- package/src/contexts/DashQueryClientContext.tsx +0 -113
- package/src/contexts/DashResourceContext.tsx +0 -34
- package/src/contexts/I18nBridgeContext.tsx +0 -156
- package/src/contexts/I18nBridgeSetter.tsx +0 -39
- package/src/contexts/I18nReduxSync.tsx +0 -27
- package/src/contexts/SubscriptionPlanFormatsProvider.tsx +0 -217
- package/src/contexts/SystemRequestsCache.tsx +0 -215
- package/src/contexts/auth/AuthContext.tsx +0 -567
- package/src/contexts/auth/AuthContextLocalStorage.tsx +0 -140
- package/src/contexts/auth/DASHAuthenticationService.tsx +0 -915
- package/src/contexts/auth/WindowContext.tsx +0 -15
- package/src/contexts/auth/index.tsx +0 -3
- package/src/contexts/com/FCMContext.tsx +0 -415
- package/src/contexts/com/LaravelEchoContext.tsx +0 -41
- package/src/contexts/com/LaravelEchoMgr.tsx +0 -155
- package/src/contexts/com/components/DefaultNotificationComponent.tsx +0 -20
- package/src/contexts/com/components/EchoNotificationsCenter.tsx +0 -65
- package/src/contexts/com/components/NotificationAttributesTable.tsx +0 -54
- package/src/contexts/com/components/NotificationRenderer.tsx +0 -42
- package/src/contexts/com/components/NotificationsWidget.tsx +0 -182
- package/src/contexts/com/components/notificationFormats.tsx +0 -50
- package/src/contexts/com/useLaravelEcho.tsx +0 -432
- package/src/contexts/dictionary/DictionaryContext.tsx +0 -94
- package/src/declarations.d.ts +0 -17
- package/src/default-theme/DASHAppProviders.tsx +0 -117
- package/src/default-theme/DashThemeContext.tsx +0 -209
- package/src/default-theme/DashThemeContext.tsx.fast +0 -143
- package/src/default-theme/DashThemeContext.tsx.old +0 -306
- package/src/default-theme/DashThemeHelperProvider.tsx +0 -98
- package/src/default-theme/DomainAppLayout.tsx +0 -166
- package/src/default-theme/DomainHeader.tsx +0 -162
- package/src/default-theme/DomainTheme.tsx +0 -59
- package/src/default-theme/FullLayoutMarkup.tsx +0 -231
- package/src/default-theme/StaticLayout.tsx +0 -47
- package/src/default-theme/index.tsx +0 -11
- package/src/default-theme/menu/AppDashboardGrid.tsx +0 -279
- package/src/default-theme/menu/AppMaterialMenu.tsx +0 -546
- package/src/default-theme/menu/AppMenuComponents/SubmenuPortal.tsx +0 -61
- package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItem.tsx +0 -264
- package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItems.tsx +0 -31
- package/src/default-theme/menu/AppMenuComponents/expanded/CollapsableSidebarMenu.tsx +0 -293
- package/src/default-theme/menu/AppMenuComponents/expanded/SidebarItem.tsx +0 -92
- package/src/default-theme/menu/AppMenuComponents/getItem.tsx +0 -17
- package/src/default-theme/menu/AppMenuComponents/interfaces.tsx +0 -41
- package/src/default-theme/menu/AppMenuComponents/submenuConstants.ts +0 -90
- package/src/default-theme/menu/AppSidebarMaterial.tsx +0 -339
- package/src/default-theme/menu/SidebarActions.tsx +0 -84
- package/src/default-theme/updateDomCssVariables.tsx +0 -176
- package/src/helpers/checkRole.tsx +0 -66
- package/src/helpers/parseAxiosError.tsx +0 -41
- package/src/hooks/audio/useAudio.tsx +0 -39
- package/src/hooks/axios.tsx +0 -165
- package/src/hooks/data/useDashboardStats.tsx +0 -65
- package/src/hooks/data/usePackageByClientsStats.tsx +0 -44
- package/src/hooks/data/usePackageByCommunesStats.tsx +0 -44
- package/src/hooks/data/usePackageStats.tsx +0 -69
- package/src/hooks/data/usePackageWithdrawDetails.tsx +0 -61
- package/src/hooks/data/useStats.tsx +0 -86
- package/src/hooks/isCurrentPath.tsx +0 -22
- package/src/hooks/notifications/WSMessagesManager.tsx +0 -152
- package/src/hooks/notifications/WSPusherManager.tsx +0 -92
- package/src/hooks/useBreadcrumbs.tsx +0 -329
- package/src/hooks/useClickOutside.tsx +0 -57
- package/src/hooks/useFormPersistance.tsx +0 -150
- package/src/hooks/useGlobalErrorMediator.tsx +0 -43
- package/src/hooks/useGlobalLoaderMgr.tsx +0 -21
- package/src/hooks/useHash.tsx +0 -27
- package/src/hooks/useLocalStorage.tsx +0 -196
- package/src/hooks/usePolyglotTranslation.tsx +0 -62
- package/src/hooks/usePrevious.tsx +0 -9
- package/src/hooks/usePrintSelected.tsx +0 -37
- package/src/hooks/useVirtualHash.tsx +0 -33
- package/src/hooks/window/useWindowSize.tsx +0 -36
- package/src/index.tsx +0 -134
- package/src/interfaces/IAppResourceConfig.tsx +0 -20
- package/src/interfaces/Log.tsx +0 -16
- package/src/interfaces/Tenant.tsx +0 -25
- package/src/interfaces/communication/IActions.tsx +0 -5
- package/src/interfaces/communication/INotification.tsx +0 -21
- package/src/interfaces/communication/IPayload.tsx +0 -3
- package/src/interfaces/communication/IRequestAction.tsx +0 -10
- package/src/interfaces/communication/IRequestPayload.tsx +0 -7
- package/src/interfaces/communication/IResponseAction.tsx +0 -7
- package/src/interfaces/misc/IAny.tsx +0 -3
- package/src/interfaces/misc/IFlashMessage.tsx +0 -10
- package/src/interfaces/navigation/IAppMenu.ts +0 -14
- package/src/interfaces/navigation/ICollapsableSidebarMenu.ts +0 -12
- package/src/interfaces/navigation/IMenuItem.ts +0 -16
- package/src/interfaces/notifications/IModel.tsx +0 -6
- package/src/interfaces/notifications/IModelField.tsx +0 -8
- package/src/interfaces/notifications/IUserNotification.tsx +0 -12
- package/src/interfaces/notifications/IUserNotificationData.tsx +0 -13
- package/src/interfaces/notifications/IUserNotificationPayload.tsx +0 -8
- package/src/interfaces/user/IGetAuth.tsx +0 -92
- package/src/interfaces/user/ITenantSettings.tsx +0 -3
- package/src/interfaces/user/IUser.tsx +0 -60
- package/src/interfaces/user/IUserSettings.tsx +0 -43
- package/src/interfaces.tsx +0 -6
- package/src/layout/AppLayout.tsx +0 -112
- package/src/layout/ApplicationLayout.tsx +0 -197
- package/src/layout/MotionWrapper.original.tsx +0 -236
- package/src/layout/MotionWrapper.tsx +0 -236
- package/src/layout/ResourceMenu.tsx +0 -164
- package/src/layout/ResoureLayout.tsx +0 -105
- package/src/layout/TransitionWrapper.tsx +0 -125
- package/src/pages/ChangePassword.tsx +0 -179
- package/src/pages/DASHLanding.tsx +0 -22
- package/src/pages/DASHLightWeightLogin.tsx +0 -611
- package/src/pages/DASHSimpleLogin.tsx +0 -260
- package/src/pages/Login.tsx +0 -111
- package/src/pages/Profile.tsx +0 -357
- package/src/pages/RecoverPassword.tsx +0 -175
- package/src/pages/SingleImageUploader.tsx +0 -55
- package/src/pages/VerifyAccount.tsx +0 -128
- package/src/providers/authProvider.tsx +0 -217
- package/src/providers/dataProvider.tsx +0 -672
- package/src/providers/i18n/en.ts +0 -646
- package/src/providers/i18n/es.ts +0 -652
- package/src/providers/i18n/languages.tsx +0 -8
- package/src/providers/i18n/mergeTranslations.ts +0 -53
- package/src/providers/i18nProvider.tsx +0 -23
- package/src/react-admin-dash/RADashComponent.tsx +0 -240
- package/src/react-admin-dash/Resource.tsx +0 -77
- package/src/resources/Brand/BrandResource.tsx +0 -130
- package/src/resources/DASHResourceLoader.ts +0 -180
- package/src/resources/Log/LogResource.tsx +0 -73
- package/src/resources/Tenant/ImpersonateTenantResource.tsx +0 -113
- package/src/resources/Trash/TrashTemplate.tsx +0 -180
- package/src/resources/User/components/AvatarUploadField.tsx +0 -57
- package/src/resources/User/components/PasswordFields.tsx +0 -73
- package/src/resources/User/getProfileMenu.ts +0 -57
- package/src/resources/User/profileResource.tsx +0 -51
- package/src/resources/User/userLayout.tsx +0 -62
- package/src/resources/User/userResource.tsx +0 -111
- package/src/resources/User/userSchema.tsx +0 -213
- package/src/resources/User/usersFilters.tsx +0 -21
- package/src/resources.tsx +0 -280
- package/src/schemas/log.tsx +0 -45
- package/src/schemas/notification.tsx +0 -42
- package/src/schemas/permissions.tsx +0 -44
- package/src/schemas/roles.tsx +0 -48
- package/src/schemas/rolesDataGrid.tsx +0 -48
- package/src/schemas/subscription/components/SubscriptionActions.tsx +0 -153
- package/src/schemas/subscription/components/SubscriptionPaymentHistory.tsx +0 -127
- package/src/schemas/subscription/components/SubscriptionPlanFeatures.tsx +0 -162
- package/src/schemas/subscription/components/SubscriptionPlanPreview.tsx +0 -141
- package/src/schemas/subscription/components/SubscriptionPlanStats.tsx +0 -318
- package/src/schemas/subscription/components/SubscriptionStatusIndicator.tsx +0 -72
- package/src/schemas/subscription/subscriptionPlanSchema.tsx +0 -185
- package/src/schemas/subscription/subscriptionSchema.tsx +0 -152
- package/src/schemas/subscriptionPlan.ts +0 -422
- package/src/schemas/tenant.tsx +0 -129
- package/src/schemas/tenantUser.tsx +0 -96
- package/src/schemas/tenant_superadmin.tsx +0 -119
- package/src/schemas/user.tsx +0 -26
- package/src/systemResources.old.tsx +0 -928
- package/src/systemResources.tsx +0 -1369
- package/src/templates/ResourceTemplate.tsx +0 -240
- package/src/templates/ResourceTemplate.tsx.memoized_experiment +0 -350
- package/src/templates/ResourceTemplate.tsx.original +0 -396
- package/src/templates/ResourceTemplateCreate.tsx +0 -182
- package/src/templates/ResourceTemplateEdit.tsx +0 -176
- package/src/templates/ResourceTemplateFull.tsx +0 -581
- package/src/templates/ResourceTemplateList.tsx +0 -340
- package/src/templates/ResourceTemplateOld.tsx.bkup +0 -567
- package/src/templates/ResourceTemplateShow.tsx +0 -88
- package/src/templates/TrashTemplate.tsx +0 -179
- package/src/tenantResources.tsx +0 -223
- package/src/test_portal_bubbles.tsx +0 -40
- package/src/theme/AppHeader.tsx +0 -52
- package/src/theme/AppLayoutSetting.tsx +0 -33
- package/src/theme/AppLogo.tsx +0 -13
- package/src/theme/AppSidebar.tsx +0 -12
- package/src/theme/AppSidebarContent.tsx +0 -105
- package/src/theme/AppSidebarLogo.tsx +0 -48
- package/src/theme/components/PageTitle.tsx +0 -37
- package/src/utils/cache/CacheInvalidatorContext.tsx +0 -125
- package/src/utils/cache/CacheInvalidatorListenerComponent.tsx +0 -10
- package/src/utils/cache/useCacheInvalidatorListener.tsx +0 -27
- package/src/utils/convertFileToBase64.tsx +0 -9
- package/src/utils/convertToFile.tsx +0 -14
- package/src/utils/cookies.tsx +0 -33
- package/src/utils/dashDefaultQueryClient.tsx +0 -34
- package/src/utils/dataUrlToBlob.tsx +0 -30
- package/src/utils/deepReplace.tsx +0 -19
- package/src/utils/getProfileMenu.tsx +0 -41
- package/src/utils/getTenantSettings.tsx +0 -9
- package/src/utils/getType.tsx +0 -8
- package/src/utils/getUserSettings.tsx +0 -8
- package/src/utils/hasCode.tsx +0 -14
- package/src/utils/index.ts +0 -19
- package/src/utils/injectTenantStyles.ts +0 -28
- package/src/utils/isComponent.tsx +0 -45
- package/src/utils/navEvents.tsx +0 -91
- package/src/utils/prototypes.tsx +0 -5
- package/src/utils/regexp.tsx +0 -4
- package/src/utils/resolveObjectPath.tsx +0 -4
- package/src/utils/setNativeValue.tsx +0 -24
- package/src/utils/slugify.tsx +0 -11
- package/src/utils/validators/emailValidator.tsx +0 -6
- package/src/utils/validators/requiredValidator.tsx +0 -5
- package/src/utils/validators/rutValidator.tsx +0 -31
- package/src/utils/validators.tsx +0 -96
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import React, { createContext, useContext, useEffect } from 'react';
|
|
2
|
-
import { AuthPersistenceService } from 'dash-auth';
|
|
3
|
-
import { useColorScheme } from '@mui/material/styles';
|
|
4
|
-
import { updateDomCssVariables } from 'dash-utils';
|
|
5
|
-
import { dashStorage } from 'dash-utils';
|
|
6
|
-
|
|
7
|
-
interface DashThemeHelperContextType {
|
|
8
|
-
mode: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
// Get initial mode from storage, defaulting to 'dark'
|
|
12
|
-
const getInitialMode = (): string => {
|
|
13
|
-
const stored = dashStorage.getItem('theme');
|
|
14
|
-
return (stored === 'light' || stored === 'dark') ? stored : 'dark';
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
const DashThemeHelperContext = createContext<DashThemeHelperContextType>({
|
|
18
|
-
mode: getInitialMode()
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
export const useDashThemeHelperContext = () => useContext(DashThemeHelperContext);
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Props interface for DashThemeHelperProvider component
|
|
26
|
-
* @interface DashThemeHelperProviderProps
|
|
27
|
-
* @property {React.ReactNode} [children] - Child components to be rendered within the provider
|
|
28
|
-
*/
|
|
29
|
-
interface DashThemeHelperProviderProps {
|
|
30
|
-
children?: React.ReactNode;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* DashThemeHelperProvider component
|
|
35
|
-
*
|
|
36
|
-
* This component is responsible for:
|
|
37
|
-
* - Listening to MUI theme mode changes (light/dark)
|
|
38
|
-
* - Updating CSS custom properties (variables) in the DOM based on the current theme mode
|
|
39
|
-
* - Applying tenant-specific color settings to the theme
|
|
40
|
-
* - Providing theme mode context to child components
|
|
41
|
-
*
|
|
42
|
-
* @component
|
|
43
|
-
* @param {DashThemeHelperProviderProps} props - Component props
|
|
44
|
-
* @returns {React.ReactElement} Provider component with theme context
|
|
45
|
-
*/
|
|
46
|
-
export const DashThemeHelperProvider: React.FC<DashThemeHelperProviderProps> = ({ children }) => {
|
|
47
|
-
const { mode, setMode } = useColorScheme();
|
|
48
|
-
|
|
49
|
-
// Effective mode: use MUI mode if valid, otherwise fallback to stored theme
|
|
50
|
-
const effectiveMode = (mode === 'light' || mode === 'dark') ? mode : getInitialMode();
|
|
51
|
-
|
|
52
|
-
// Helper function to get tenant settings (prioritize persisted over auth)
|
|
53
|
-
const getTenantSettings = () => {
|
|
54
|
-
const persistedTenantSettings = AuthPersistenceService.getTenantSettings();
|
|
55
|
-
if (persistedTenantSettings) {
|
|
56
|
-
return persistedTenantSettings;
|
|
57
|
-
}
|
|
58
|
-
return null;
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
// Sync MUI mode with stored theme on mount
|
|
62
|
-
useEffect(() => {
|
|
63
|
-
const storedTheme = dashStorage.getItem('theme');
|
|
64
|
-
if (storedTheme && (storedTheme === 'light' || storedTheme === 'dark') && mode !== storedTheme) {
|
|
65
|
-
setMode(storedTheme as 'light' | 'dark');
|
|
66
|
-
} else if (!storedTheme) {
|
|
67
|
-
// No stored theme - set default and persist
|
|
68
|
-
const defaultMode = 'dark';
|
|
69
|
-
dashStorage.setItem('theme', defaultMode);
|
|
70
|
-
document.documentElement.setAttribute('data-theme', defaultMode);
|
|
71
|
-
setMode(defaultMode);
|
|
72
|
-
}
|
|
73
|
-
}, []);
|
|
74
|
-
|
|
75
|
-
// Listen for theme mode changes and update DOM CSS variables
|
|
76
|
-
useEffect(() => {
|
|
77
|
-
if (mode !== 'light' && mode !== 'dark') return; // Skip if MUI returns undefined/system
|
|
78
|
-
|
|
79
|
-
// Emit custom event for theme mode switch
|
|
80
|
-
const themeEvent = new CustomEvent('dash-theme-mode-switched', { detail: { mode } });
|
|
81
|
-
window.dispatchEvent(themeEvent);
|
|
82
|
-
|
|
83
|
-
const tenantSettings = getTenantSettings();
|
|
84
|
-
if (tenantSettings?.colors || tenantSettings?.values) {
|
|
85
|
-
dashStorage.setItem('theme', mode);
|
|
86
|
-
document.documentElement.setAttribute('data-theme', mode);
|
|
87
|
-
updateDomCssVariables(mode, tenantSettings?.colors || {}, tenantSettings?.values || {});
|
|
88
|
-
}
|
|
89
|
-
}, [mode]);
|
|
90
|
-
|
|
91
|
-
return (
|
|
92
|
-
<DashThemeHelperContext.Provider value={{ mode: effectiveMode }}>
|
|
93
|
-
{children}
|
|
94
|
-
</DashThemeHelperContext.Provider>
|
|
95
|
-
);
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
export default DashThemeHelperProvider;
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { useEffect, useRef, useCallback } from 'react';
|
|
3
|
-
import { useDispatch, useSelector } from 'react-redux';
|
|
4
|
-
import { useStore } from 'react-admin';
|
|
5
|
-
import { Box } from '@mui/material';
|
|
6
|
-
|
|
7
|
-
import { IAppLayout } from '../layout/AppLayout';
|
|
8
|
-
import { DASH_REDUX_ACTIONS, IDASHAppState, IBreadcrumbItem } from 'dash-admin-state';
|
|
9
|
-
|
|
10
|
-
import DomainTheme, { IDomainTheme } from './DomainTheme';
|
|
11
|
-
import DomainHeader from './DomainHeader';
|
|
12
|
-
import { BreadcrumbsManager } from '../components/navigation';
|
|
13
|
-
|
|
14
|
-
import { IDashAutoAdminResourceConfig } from 'dash-auto-admin';
|
|
15
|
-
import { DASHAdminSystemConstants } from 'dash-constants';
|
|
16
|
-
|
|
17
|
-
export interface IDomainAppLayout<U = any, A = any> extends IAppLayout {
|
|
18
|
-
ThemeComponent?: React.ComponentType<IDomainTheme<any, any>>;
|
|
19
|
-
/** Whether to show breadcrumb navigation */
|
|
20
|
-
showBreadcrumbs?: boolean;
|
|
21
|
-
/** Custom label map for breadcrumb segments */
|
|
22
|
-
breadcrumbLabelMap?: Record<string, string>;
|
|
23
|
-
/** Whether to include home in breadcrumbs */
|
|
24
|
-
breadcrumbIncludeHome?: boolean;
|
|
25
|
-
CustomDomainHeader?: React.JSX.Element;
|
|
26
|
-
CustomDomainFooter?: React.JSX.Element;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const DomainAppLayout = <U, A>(props: IDomainAppLayout<U, A>): React.JSX.Element => {
|
|
30
|
-
const {
|
|
31
|
-
ThemeComponent,
|
|
32
|
-
children,
|
|
33
|
-
showBreadcrumbs = true,
|
|
34
|
-
breadcrumbLabelMap,
|
|
35
|
-
breadcrumbIncludeHome = false,
|
|
36
|
-
CustomDomainHeader,
|
|
37
|
-
CustomDomainFooter,
|
|
38
|
-
} = props;
|
|
39
|
-
|
|
40
|
-
const dispatch = useDispatch();
|
|
41
|
-
const contentRef = useRef(null);
|
|
42
|
-
const [resourceConfig] = useStore<IDashAutoAdminResourceConfig>('resourceConfig');
|
|
43
|
-
|
|
44
|
-
// Simple selectors - don't over-optimize
|
|
45
|
-
const authenticated = useSelector(
|
|
46
|
-
(state: IDASHAppState<U, A, IDashAutoAdminResourceConfig>) => state.auth.authenticated
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
const groupIcons = useSelector(
|
|
50
|
-
(state: IDASHAppState<U, A, IDashAutoAdminResourceConfig>) => state.settings.groupIcons
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
// Generate breadcrumbs based on current resource
|
|
54
|
-
const generateBreadcrumbs = React.useCallback((
|
|
55
|
-
pathname: string,
|
|
56
|
-
config?: IDashAutoAdminResourceConfig | null
|
|
57
|
-
): IBreadcrumbItem[] => {
|
|
58
|
-
const URL_PREFIX = DASHAdminSystemConstants.system.URL_PREFIX || '';
|
|
59
|
-
const breadcrumbs: IBreadcrumbItem[] = [];
|
|
60
|
-
|
|
61
|
-
// Clean the pathname
|
|
62
|
-
let cleanPath = pathname;
|
|
63
|
-
if (URL_PREFIX && cleanPath.startsWith(URL_PREFIX)) {
|
|
64
|
-
cleanPath = cleanPath.slice(URL_PREFIX.length);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const segments = cleanPath.split('/').filter(Boolean);
|
|
68
|
-
|
|
69
|
-
if (segments.length === 0) return breadcrumbs;
|
|
70
|
-
|
|
71
|
-
// If we have a resource config, use it for better labeling
|
|
72
|
-
if (config) {
|
|
73
|
-
// Add group as first breadcrumb if available
|
|
74
|
-
if (config.group) {
|
|
75
|
-
breadcrumbs.push({
|
|
76
|
-
label: config.group,
|
|
77
|
-
path: undefined, // Groups are typically not navigable
|
|
78
|
-
icon: groupIcons?.[config.group],
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Add resource label
|
|
83
|
-
breadcrumbs.push({
|
|
84
|
-
label: config.label || segments[segments.length - 1],
|
|
85
|
-
path: `${URL_PREFIX}/${config.model}`,
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
// Check for action segments (create, edit, show, etc.)
|
|
89
|
-
const lastSegment = segments[segments.length - 1];
|
|
90
|
-
const actionLabels: Record<string, string> = {
|
|
91
|
-
'create': 'Crear',
|
|
92
|
-
'edit': 'Editar',
|
|
93
|
-
'show': 'Ver',
|
|
94
|
-
'inline': 'Detalle',
|
|
95
|
-
...breadcrumbLabelMap,
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
if (actionLabels[lastSegment]) {
|
|
99
|
-
breadcrumbs.push({
|
|
100
|
-
label: actionLabels[lastSegment],
|
|
101
|
-
isActive: true,
|
|
102
|
-
});
|
|
103
|
-
} else if (/^\d+$/.test(lastSegment)) {
|
|
104
|
-
// If last segment is an ID, mark as active
|
|
105
|
-
const prevSegment = segments[segments.length - 2];
|
|
106
|
-
if (prevSegment && actionLabels[prevSegment]) {
|
|
107
|
-
breadcrumbs.push({
|
|
108
|
-
label: actionLabels[prevSegment],
|
|
109
|
-
isActive: true,
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
return breadcrumbs;
|
|
116
|
-
}, [groupIcons, breadcrumbLabelMap]);
|
|
117
|
-
|
|
118
|
-
// Update page info when resource changes
|
|
119
|
-
useEffect(() => {
|
|
120
|
-
if (resourceConfig && groupIcons) {
|
|
121
|
-
|
|
122
|
-
dispatch(
|
|
123
|
-
DASH_REDUX_ACTIONS.updatePage({
|
|
124
|
-
title: resourceConfig.label,
|
|
125
|
-
icon: resourceConfig.group && groupIcons[resourceConfig.group],
|
|
126
|
-
subTitle: resourceConfig.group,
|
|
127
|
-
}),
|
|
128
|
-
);
|
|
129
|
-
}
|
|
130
|
-
}, [resourceConfig, groupIcons, dispatch]);
|
|
131
|
-
|
|
132
|
-
const headerToolBar = CustomDomainHeader || <DomainHeader showBreadcrumbs={showBreadcrumbs} />;
|
|
133
|
-
|
|
134
|
-
if (ThemeComponent) {
|
|
135
|
-
return (
|
|
136
|
-
<BreadcrumbsManager
|
|
137
|
-
labelMap={breadcrumbLabelMap}
|
|
138
|
-
includeHome={breadcrumbIncludeHome}
|
|
139
|
-
>
|
|
140
|
-
<ThemeComponent headerToolBar={headerToolBar} footerComponent={CustomDomainFooter}>
|
|
141
|
-
{children}
|
|
142
|
-
</ThemeComponent>
|
|
143
|
-
</BreadcrumbsManager>
|
|
144
|
-
);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
return (
|
|
148
|
-
<BreadcrumbsManager
|
|
149
|
-
labelMap={breadcrumbLabelMap}
|
|
150
|
-
includeHome={breadcrumbIncludeHome}
|
|
151
|
-
>
|
|
152
|
-
<DomainTheme headerToolBar={headerToolBar} footerComponent={CustomDomainFooter}>
|
|
153
|
-
{children}
|
|
154
|
-
</DomainTheme>
|
|
155
|
-
</BreadcrumbsManager>
|
|
156
|
-
);
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
// Simple memo comparison
|
|
160
|
-
/*export default React.memo(DomainAppLayout, (prevProps, nextProps) => {
|
|
161
|
-
return (
|
|
162
|
-
prevProps.children === nextProps.children &&
|
|
163
|
-
prevProps.ThemeComponent === nextProps.ThemeComponent
|
|
164
|
-
);
|
|
165
|
-
});*/
|
|
166
|
-
export default DomainAppLayout;
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import { JSX, PropsWithChildren, useEffect, useState } from 'react';
|
|
2
|
-
import { Children } from 'react';
|
|
3
|
-
import { useSelector } from 'react-redux';
|
|
4
|
-
import { useDispatch } from 'react-redux';
|
|
5
|
-
import { IPageState } from 'dash-admin-state';
|
|
6
|
-
import { DASH_REDUX_ACTIONS } from 'dash-admin-state';
|
|
7
|
-
import { IDASHAppState } from 'dash-admin-state';
|
|
8
|
-
import MenuOpenIcon from '@mui/icons-material/MenuOpen'
|
|
9
|
-
import { Box, IconButton } from '@mui/material';
|
|
10
|
-
import { IDashAutoAdminResourceConfig } from 'dash-auto-admin';
|
|
11
|
-
import { NavEventManager } from '../utils/navEvents';
|
|
12
|
-
import { Breadcrumbs } from '../components/navigation';
|
|
13
|
-
import { AuthPersistenceService } from 'dash-auth';
|
|
14
|
-
|
|
15
|
-
export interface IDomainHeader<U = any, A = any> extends PropsWithChildren {
|
|
16
|
-
/** Whether to show breadcrumb navigation */
|
|
17
|
-
showBreadcrumbs?: boolean;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const DomainHeader = <U, A>({
|
|
21
|
-
showBreadcrumbs = true,
|
|
22
|
-
...props
|
|
23
|
-
}: IDomainHeader<U, A>): JSX.Element => {
|
|
24
|
-
|
|
25
|
-
const dispatch = useDispatch();
|
|
26
|
-
|
|
27
|
-
// Keep local state in sync with sidebar for UI feedback
|
|
28
|
-
const [localNavExpanded, setLocalNavExpanded] = useState(true);
|
|
29
|
-
const [localNavSize, setLocalNavSize] = useState<'small' | 'large'>('large');
|
|
30
|
-
|
|
31
|
-
// State for tenant logos
|
|
32
|
-
const [tenantLogos, setTenantLogos] = useState<{
|
|
33
|
-
horizontalLogo: string | null;
|
|
34
|
-
squaredLogo: string | null;
|
|
35
|
-
}>({
|
|
36
|
-
horizontalLogo: null,
|
|
37
|
-
squaredLogo: null
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
// Listen to nav state changes from sidebar
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
const unsubscribe = NavEventManager.onStateChange((expanded, size) => {
|
|
43
|
-
setLocalNavExpanded(expanded);
|
|
44
|
-
setLocalNavSize(size);
|
|
45
|
-
// Also sync to Redux store
|
|
46
|
-
//dispatch(DASH_REDUX_ACTIONS.setNavExpanded(expanded));
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
return unsubscribe;
|
|
50
|
-
}, [dispatch]);
|
|
51
|
-
|
|
52
|
-
// Load tenant logos
|
|
53
|
-
useEffect(() => {
|
|
54
|
-
const tenantImages = AuthPersistenceService.getTenantImages();
|
|
55
|
-
if (tenantImages) {
|
|
56
|
-
setTenantLogos({
|
|
57
|
-
horizontalLogo: tenantImages.horizontal_logo?.original || null,
|
|
58
|
-
squaredLogo: tenantImages.squared_logo?.original || null
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
}, []);
|
|
62
|
-
|
|
63
|
-
const HeaderToolBar = useSelector(
|
|
64
|
-
(state: IDASHAppState<U, A, IDashAutoAdminResourceConfig>) =>
|
|
65
|
-
state.common.headerToolBar,
|
|
66
|
-
);
|
|
67
|
-
const pageSettings: IPageState = useSelector(
|
|
68
|
-
(state: IDASHAppState<U, A, IDashAutoAdminResourceConfig>) =>
|
|
69
|
-
state.page,
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
const panelSettings = useSelector(
|
|
73
|
-
(state: IDASHAppState<U, A, IDashAutoAdminResourceConfig>) =>
|
|
74
|
-
state.common.panelSettings,
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
const logo = panelSettings?.logo || <>🖥 DASHAdmin</>;
|
|
78
|
-
const squaredLogo = panelSettings?.squaredLogo || <>🖥</>;
|
|
79
|
-
const horizontalLogo = panelSettings?.horizontalLogo || <>🖥</>;
|
|
80
|
-
|
|
81
|
-
const onToggleExpandedNav = () => {
|
|
82
|
-
// Use event system to communicate with sidebar
|
|
83
|
-
NavEventManager.toggleExpanded();
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
const HeaderComponentInline = () => {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
return (
|
|
91
|
-
<Box
|
|
92
|
-
className={pageSettings.title ? "dash-header-content" : ""}
|
|
93
|
-
sx={{ /*display: 'flex', alignItems: 'center', justifyContent: 'space-between', width: '100%'*/ }}
|
|
94
|
-
>
|
|
95
|
-
{pageSettings.title ? (
|
|
96
|
-
<Box className='dash-header-inline'>
|
|
97
|
-
<span className='dash-header-inline-title'>
|
|
98
|
-
{pageSettings.title || ''}
|
|
99
|
-
</span>
|
|
100
|
-
{/*<span className='dash-header-inline-subtitle'>
|
|
101
|
-
{pageSettings.subTitle}
|
|
102
|
-
</span>*/}
|
|
103
|
-
{/* Breadcrumb Navigation - inline with title */}
|
|
104
|
-
{/*showBreadcrumbs && pageSettings.breadcrumbs && pageSettings.breadcrumbs.length > 0 && (
|
|
105
|
-
<Box className='dash-header-breadcrumbs'>
|
|
106
|
-
<Breadcrumbs />
|
|
107
|
-
</Box>
|
|
108
|
-
)*/}
|
|
109
|
-
</Box>
|
|
110
|
-
) : null}
|
|
111
|
-
|
|
112
|
-
{/* HeaderToolBar moved to SidebarActions */}
|
|
113
|
-
</Box>
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
return (
|
|
119
|
-
<Box component={'div'} className='dash-header'>
|
|
120
|
-
<Box component={'div'} className='dash-header-container'>
|
|
121
|
-
|
|
122
|
-
<Box className='dash-header-subheader' sx={{ display: { xs: 'flex', sm: 'flex', md: 'none' }, alignItems: 'center'}}>
|
|
123
|
-
{/* Burger icon - always visible, opens/closes drawer */}
|
|
124
|
-
|
|
125
|
-
<IconButton
|
|
126
|
-
className='dash-header-burger-toggler'
|
|
127
|
-
onClick={() => onToggleExpandedNav()}
|
|
128
|
-
sx={{
|
|
129
|
-
m: 1,
|
|
130
|
-
padding: '8px',
|
|
131
|
-
borderRadius: '8px',
|
|
132
|
-
backgroundColor: 'rgba(0,0,0,0.04)',
|
|
133
|
-
'&:hover': {
|
|
134
|
-
backgroundColor: 'rgba(0,0,0,0.08)',
|
|
135
|
-
}
|
|
136
|
-
}}
|
|
137
|
-
>
|
|
138
|
-
<MenuOpenIcon sx={{ fontSize: 28 }} />
|
|
139
|
-
</IconButton>
|
|
140
|
-
|
|
141
|
-
{/* Logo - separate from burger, doesn't toggle drawer */}
|
|
142
|
-
<Box className='dash-header-subheader-logo' sx={{ display: 'flex', alignItems: 'center', marginLeft: 1 }}>
|
|
143
|
-
{(() => {
|
|
144
|
-
const logoToRender = tenantLogos.squaredLogo || squaredLogo;
|
|
145
|
-
if (typeof logoToRender === 'string') {
|
|
146
|
-
return <img height={32} width={32} src={logoToRender} alt="Logo" style={{ borderRadius: '4px', objectFit: 'contain' }} />;
|
|
147
|
-
}
|
|
148
|
-
return logoToRender;
|
|
149
|
-
})()}
|
|
150
|
-
</Box>
|
|
151
|
-
</Box>
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
<HeaderComponentInline />
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
</Box>
|
|
158
|
-
</Box>
|
|
159
|
-
);
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
export default DomainHeader;
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { JSX, PropsWithChildren } from 'react';
|
|
2
|
-
import { Box } from '@mui/material';
|
|
3
|
-
import AppSidebarMaterial from './menu/AppSidebarMaterial';
|
|
4
|
-
import React from 'react';
|
|
5
|
-
|
|
6
|
-
export interface IDomainTheme<U = any, A = any> extends PropsWithChildren {
|
|
7
|
-
menuComponent?: JSX.Element;
|
|
8
|
-
headerToolBar?: JSX.Element;
|
|
9
|
-
footerComponent?: JSX.Element;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// Memoized content wrapper to prevent children re-renders
|
|
14
|
-
const MemoizedContent = ({ children }: { children: React.ReactNode }) => (
|
|
15
|
-
<Box className="dash-layout-content">
|
|
16
|
-
{children}
|
|
17
|
-
</Box>
|
|
18
|
-
);
|
|
19
|
-
|
|
20
|
-
// Memoized footer wrapper
|
|
21
|
-
const MemoizedFooter = React.memo(({ footerComponent }: { footerComponent?: JSX.Element }) => {
|
|
22
|
-
if (!footerComponent) return null;
|
|
23
|
-
|
|
24
|
-
return (
|
|
25
|
-
<Box className="dash-app-layout-footer">
|
|
26
|
-
{footerComponent}
|
|
27
|
-
</Box>
|
|
28
|
-
);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
const DomainTheme = <U, A>({
|
|
32
|
-
children,
|
|
33
|
-
menuComponent,
|
|
34
|
-
headerToolBar,
|
|
35
|
-
footerComponent,
|
|
36
|
-
...props
|
|
37
|
-
}: IDomainTheme<U, A>): JSX.Element => {
|
|
38
|
-
|
|
39
|
-
return (
|
|
40
|
-
<div id={'dash-app-layout'} className={'dash-app-layout'}>
|
|
41
|
-
{menuComponent === undefined ? (
|
|
42
|
-
<AppSidebarMaterial
|
|
43
|
-
className={'dash-app-layout-sidebar'}
|
|
44
|
-
/>
|
|
45
|
-
) : menuComponent}
|
|
46
|
-
<Box
|
|
47
|
-
className={'dash-app-layout-content'}
|
|
48
|
-
>
|
|
49
|
-
{headerToolBar}
|
|
50
|
-
<MemoizedContent>
|
|
51
|
-
{children}
|
|
52
|
-
</MemoizedContent>
|
|
53
|
-
{footerComponent && <MemoizedFooter footerComponent={footerComponent} />}
|
|
54
|
-
</Box>
|
|
55
|
-
</div>
|
|
56
|
-
);
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
export default DomainTheme;
|