@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,317 +0,0 @@
|
|
|
1
|
-
import { Avatar, CircularProgress, ListItemIcon, ListItemText, Menu, MenuItem, MenuList, useMediaQuery, useTheme } from '@mui/material';
|
|
2
|
-
import { useEffect, useState, useRef, useCallback } from 'react';
|
|
3
|
-
import ReactDOM from 'react-dom';
|
|
4
|
-
|
|
5
|
-
import AccountCircleIcon from '@mui/icons-material/AccountCircle';
|
|
6
|
-
import LogoutIcon from '@mui/icons-material/Logout';
|
|
7
|
-
import React from 'react';
|
|
8
|
-
|
|
9
|
-
import { useWindowSize } from 'dash-utils';
|
|
10
|
-
import { useAuthContext } from '../../contexts/auth/AuthContext';
|
|
11
|
-
|
|
12
|
-
import { useRedirect, useTranslate } from 'react-admin';
|
|
13
|
-
import { useNavigate } from 'react-router-dom';
|
|
14
|
-
import { NavEventManager } from '../../utils/navEvents';
|
|
15
|
-
import useClickOutside from '../../hooks/useClickOutside';
|
|
16
|
-
|
|
17
|
-
interface AvatarComponentProps {
|
|
18
|
-
sidebarPosition?: 'left' | 'right' | 'top' | 'bottom';
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const AvatarComponent: React.FC<AvatarComponentProps> = ({ sidebarPosition = 'left' }) => {
|
|
22
|
-
const { user, logout, authenticated } = useAuthContext();
|
|
23
|
-
const windowSize = useWindowSize();
|
|
24
|
-
const translate = useTranslate();
|
|
25
|
-
|
|
26
|
-
const theme = useTheme();
|
|
27
|
-
const isSmallScreen = useMediaQuery(theme.breakpoints.down('md'));
|
|
28
|
-
const [webView, setWebView] = useState<boolean>(false);
|
|
29
|
-
const [open, setOpen] = useState(false);
|
|
30
|
-
const avatarRef = useRef<HTMLDivElement>(null);
|
|
31
|
-
const menuRef = useRef<HTMLDivElement>(null);
|
|
32
|
-
const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 });
|
|
33
|
-
const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
34
|
-
const navigate = useNavigate();
|
|
35
|
-
//const ra_redirect = useRedirect();
|
|
36
|
-
|
|
37
|
-
// Add state to track user data changes and force re-renders
|
|
38
|
-
const [currentUser, setCurrentUser] = useState(user);
|
|
39
|
-
|
|
40
|
-
// Update local user state when auth context user changes
|
|
41
|
-
// Update local user state when auth context user changes
|
|
42
|
-
useEffect(() => {
|
|
43
|
-
console.log('AvatarComponent: User data changed in auth context:', user);
|
|
44
|
-
setCurrentUser(user);
|
|
45
|
-
|
|
46
|
-
// Force a re-render by updating a key when user image changes
|
|
47
|
-
if (user?.image_url !== currentUser?.image_url || user?.image_path !== currentUser?.image_path) {
|
|
48
|
-
console.log('AvatarComponent: User image changed, forcing update');
|
|
49
|
-
}
|
|
50
|
-
}, [user, user?.name, user?.image_url, user?.image_path, user?.id]); // Add user.id to dependencies
|
|
51
|
-
useEffect(() => {
|
|
52
|
-
if (document.body.classList.contains('webview')) {
|
|
53
|
-
setWebView(true);
|
|
54
|
-
} else {
|
|
55
|
-
setWebView(false);
|
|
56
|
-
}
|
|
57
|
-
}, []);
|
|
58
|
-
|
|
59
|
-
const handleLogout = async (e: React.MouseEvent) => {
|
|
60
|
-
e.preventDefault();
|
|
61
|
-
/*try {
|
|
62
|
-
await logout();
|
|
63
|
-
|
|
64
|
-
redirect('/login');
|
|
65
|
-
} catch (error) {
|
|
66
|
-
|
|
67
|
-
console.error('Logout failed:', error);
|
|
68
|
-
// Fallback logout - redirect to login
|
|
69
|
-
window.location.href = '/login';
|
|
70
|
-
}*/
|
|
71
|
-
localStorage.clear();
|
|
72
|
-
await logout();
|
|
73
|
-
//navigate('/');
|
|
74
|
-
window.location.href = '/';
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
const handleProfileRedirect = () => {
|
|
78
|
-
//window.location.href = '/profile';
|
|
79
|
-
//ra_redirect('/profile');
|
|
80
|
-
navigate('/profile');
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
const calculateMenuPosition = () => {
|
|
84
|
-
if (avatarRef.current && windowSize.width && windowSize.height) {
|
|
85
|
-
const rect = avatarRef.current.getBoundingClientRect();
|
|
86
|
-
const menuWidth = 230; // minWidth from styles
|
|
87
|
-
const menuHeight = 120; // approximate menu height
|
|
88
|
-
|
|
89
|
-
let left = rect.left + window.scrollX;
|
|
90
|
-
let top = rect.top + window.scrollY;
|
|
91
|
-
|
|
92
|
-
// Ensure menu doesn't go off-screen horizontally
|
|
93
|
-
if (left + menuWidth > windowSize.width) {
|
|
94
|
-
left = windowSize.width - menuWidth - 10; // 10px margin
|
|
95
|
-
}
|
|
96
|
-
if (left < 10) {
|
|
97
|
-
left = 10; // 10px margin
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// For bottom sidebar position, open menu above the avatar
|
|
101
|
-
if (sidebarPosition === 'bottom') {
|
|
102
|
-
top = rect.top + window.scrollY - menuHeight - 10; // Open above
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
setMenuPosition({
|
|
106
|
-
top: top,
|
|
107
|
-
left: left + 40
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
const handleAvatarMouseEnter = (e: React.MouseEvent<HTMLDivElement>) => {
|
|
113
|
-
console.log("handleAvatarMouseEnter");
|
|
114
|
-
e.preventDefault();
|
|
115
|
-
|
|
116
|
-
// Clear any existing timeout
|
|
117
|
-
if (timeoutRef.current) {
|
|
118
|
-
clearTimeout(timeoutRef.current);
|
|
119
|
-
timeoutRef.current = null;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
setOpen(true);
|
|
123
|
-
calculateMenuPosition();
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
const handleAvatarClick = (e: React.MouseEvent<HTMLDivElement>) => {
|
|
127
|
-
console.log("handleAvatarClick");
|
|
128
|
-
e.preventDefault();
|
|
129
|
-
setOpen(prevOpen => !prevOpen);
|
|
130
|
-
calculateMenuPosition();
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
const handleMouseLeave = () => {
|
|
134
|
-
console.log("handleMouseLeave");
|
|
135
|
-
if (!webView) {
|
|
136
|
-
// Add a small delay before closing to allow moving to menu
|
|
137
|
-
timeoutRef.current = setTimeout(() => {
|
|
138
|
-
setOpen(false);
|
|
139
|
-
}, 100);
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
const handleMenuMouseEnter = () => {
|
|
144
|
-
console.log("handleMenuMouseEnter");
|
|
145
|
-
// Clear timeout when entering menu
|
|
146
|
-
if (timeoutRef.current) {
|
|
147
|
-
clearTimeout(timeoutRef.current);
|
|
148
|
-
timeoutRef.current = null;
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
const handleMenuMouseLeave = () => {
|
|
153
|
-
console.log("handleMenuMouseLeave");
|
|
154
|
-
if (!webView) {
|
|
155
|
-
setOpen(false);
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
// Cleanup timeout on unmount
|
|
160
|
-
useEffect(() => {
|
|
161
|
-
return () => {
|
|
162
|
-
if (timeoutRef.current) {
|
|
163
|
-
clearTimeout(timeoutRef.current);
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
}, []);
|
|
167
|
-
|
|
168
|
-
// Recalculate position on window size change
|
|
169
|
-
useEffect(() => {
|
|
170
|
-
if (open) {
|
|
171
|
-
calculateMenuPosition();
|
|
172
|
-
}
|
|
173
|
-
}, [windowSize.width, windowSize.height, open, isSmallScreen]);
|
|
174
|
-
|
|
175
|
-
// Listen for other submenus/menus opening and close this one
|
|
176
|
-
useEffect(() => {
|
|
177
|
-
const unsubscribeSubmenuOpened = NavEventManager.onSubmenuOpened(() => {
|
|
178
|
-
setOpen(false);
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
const unsubscribeCloseAll = NavEventManager.onCloseAllSubmenus(() => {
|
|
182
|
-
setOpen(false);
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
return () => {
|
|
186
|
-
unsubscribeSubmenuOpened();
|
|
187
|
-
unsubscribeCloseAll();
|
|
188
|
-
};
|
|
189
|
-
}, []);
|
|
190
|
-
|
|
191
|
-
// Close on click/tap outside the avatar trigger AND the portal-rendered
|
|
192
|
-
// menu (both refs — the menu isn't a DOM descendant of the trigger since
|
|
193
|
-
// it's rendered via createPortal). Needed for the webview/click-to-open
|
|
194
|
-
// path, which had no way to dismiss the menu other than clicking the
|
|
195
|
-
// avatar again; hover mode already self-closes via handleMouseLeave.
|
|
196
|
-
useClickOutside([avatarRef, menuRef], () => setOpen(false), open);
|
|
197
|
-
|
|
198
|
-
// Show loading state if not authenticated or no user data
|
|
199
|
-
if (!authenticated || !currentUser) {
|
|
200
|
-
/*return (
|
|
201
|
-
<Avatar>
|
|
202
|
-
<CircularProgress size={24} />
|
|
203
|
-
</Avatar>
|
|
204
|
-
);*/
|
|
205
|
-
return null;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
// Get the most current image URL - check both possible properties
|
|
209
|
-
const getAvatarImageUrl = () => {
|
|
210
|
-
|
|
211
|
-
return currentUser?.image_url || currentUser?.image_path || null;
|
|
212
|
-
};
|
|
213
|
-
|
|
214
|
-
// Get user display name
|
|
215
|
-
const getUserDisplayName = () => {
|
|
216
|
-
return currentUser?.name || 'Usuario';
|
|
217
|
-
};
|
|
218
|
-
|
|
219
|
-
// Get user initials for fallback avatar
|
|
220
|
-
const getUserInitials = () => {
|
|
221
|
-
const name = getUserDisplayName();
|
|
222
|
-
return name ? name.charAt(0).toUpperCase() : '?';
|
|
223
|
-
};
|
|
224
|
-
|
|
225
|
-
return (
|
|
226
|
-
<>
|
|
227
|
-
<div
|
|
228
|
-
ref={avatarRef}
|
|
229
|
-
className='dash-user-avatar'
|
|
230
|
-
{...(!webView ? {
|
|
231
|
-
onMouseEnter: handleAvatarMouseEnter,
|
|
232
|
-
onMouseLeave: handleMouseLeave
|
|
233
|
-
} : {
|
|
234
|
-
onClick: handleAvatarClick
|
|
235
|
-
})}
|
|
236
|
-
>
|
|
237
|
-
{getAvatarImageUrl() ? (
|
|
238
|
-
<Avatar
|
|
239
|
-
src={getAvatarImageUrl()}
|
|
240
|
-
key={getAvatarImageUrl()} // Force re-render when image changes
|
|
241
|
-
className='dash-icon-button-color dash-icon-button-bg'
|
|
242
|
-
/>
|
|
243
|
-
) : (
|
|
244
|
-
<Avatar
|
|
245
|
-
className='dash-icon-button-color dash-icon-button-bg'
|
|
246
|
-
>
|
|
247
|
-
{getUserInitials()}
|
|
248
|
-
</Avatar>
|
|
249
|
-
)}
|
|
250
|
-
</div>
|
|
251
|
-
|
|
252
|
-
{open && ReactDOM.createPortal(
|
|
253
|
-
<div
|
|
254
|
-
ref={menuRef}
|
|
255
|
-
className="dash-user-menu-portal"
|
|
256
|
-
onMouseEnter={!webView ? handleMenuMouseEnter : undefined}
|
|
257
|
-
onMouseLeave={!webView ? handleMenuMouseLeave : undefined}
|
|
258
|
-
>
|
|
259
|
-
<div
|
|
260
|
-
className={`dash-user-menu ${open ? 'show' : ''}`}
|
|
261
|
-
style={{
|
|
262
|
-
zIndex: 10000,
|
|
263
|
-
position: 'absolute',
|
|
264
|
-
top: menuPosition.top,
|
|
265
|
-
left: menuPosition.left,
|
|
266
|
-
}}
|
|
267
|
-
>
|
|
268
|
-
<span className='dash-user-name' style={{ padding: '8px 16px', display: 'block' }}>
|
|
269
|
-
{getUserDisplayName()}
|
|
270
|
-
</span>
|
|
271
|
-
<MenuList>
|
|
272
|
-
{/* Plain MUI MenuItem composition — mui-nested-menu's IconMenuItem
|
|
273
|
-
(peer deps top out at @mui/material v7) renders a <MenuItem> that
|
|
274
|
-
doesn't satisfy MUI v9's MenuListContext requirement and crashes
|
|
275
|
-
with "MUI: MenuListContext is missing." A real MenuItem always
|
|
276
|
-
stays compatible with whatever MUI version the app is on. */}
|
|
277
|
-
<MenuItem
|
|
278
|
-
onClick={(e) => {
|
|
279
|
-
e.preventDefault();
|
|
280
|
-
setOpen(false);
|
|
281
|
-
handleProfileRedirect();
|
|
282
|
-
}}
|
|
283
|
-
className='dash-icon-button-color dash-icon-button-bg'
|
|
284
|
-
>
|
|
285
|
-
<ListItemIcon>
|
|
286
|
-
<span className='dash-user-icon'>
|
|
287
|
-
<AccountCircleIcon />
|
|
288
|
-
</span>
|
|
289
|
-
</ListItemIcon>
|
|
290
|
-
<ListItemText>{translate('ra.auth.user_menu', { _: 'Perfil' })}</ListItemText>
|
|
291
|
-
</MenuItem>
|
|
292
|
-
<MenuItem
|
|
293
|
-
onClick={(e) => {
|
|
294
|
-
setOpen(false);
|
|
295
|
-
handleLogout(e);
|
|
296
|
-
}}
|
|
297
|
-
className='dash-icon-button-color dash-icon-button-bg'
|
|
298
|
-
>
|
|
299
|
-
<ListItemIcon>
|
|
300
|
-
<span className='dash-user-icon'>
|
|
301
|
-
<LogoutIcon />
|
|
302
|
-
</span>
|
|
303
|
-
</ListItemIcon>
|
|
304
|
-
<ListItemText>{translate('ra.auth.logout', { _: 'Cerrar sesión' })}</ListItemText>
|
|
305
|
-
</MenuItem>
|
|
306
|
-
</MenuList>
|
|
307
|
-
</div>
|
|
308
|
-
</div>,
|
|
309
|
-
document.body
|
|
310
|
-
)}
|
|
311
|
-
</>
|
|
312
|
-
);
|
|
313
|
-
};
|
|
314
|
-
|
|
315
|
-
//AvatarComponent.whyDidYouRender = true;
|
|
316
|
-
|
|
317
|
-
export default AvatarComponent;
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { Height, WidthFull } from '@mui/icons-material';
|
|
2
|
-
import { Avatar, Box } from '@mui/material';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
|
|
5
|
-
// @ts-ignore - Asset imports may not exist
|
|
6
|
-
//import Logo from '@app/assets/logo-horizontal.png';
|
|
7
|
-
// @ts-ignore - Asset imports may not exist
|
|
8
|
-
//import LogoSquared from '@app/assets/logo-squared.png';
|
|
9
|
-
// @ts-ignore - Asset imports may not exist
|
|
10
|
-
//import BackImage from '@app/assets/login-back.png';
|
|
11
|
-
|
|
12
|
-
type SidebarPosition = 'left' | 'right' | 'top' | 'bottom';
|
|
13
|
-
|
|
14
|
-
interface TenantAvatarComponentProps {
|
|
15
|
-
imageUrl?: string | null;
|
|
16
|
-
maxWidth?: number | string;
|
|
17
|
-
maxHeight?: number | string;
|
|
18
|
-
alt?: string;
|
|
19
|
-
sidebarPosition?: SidebarPosition;
|
|
20
|
-
sidebarSmallWidth?: number | string;
|
|
21
|
-
navExpanded?: boolean;
|
|
22
|
-
navSize?: "small" | "large";
|
|
23
|
-
onClick?: () => void;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const TenantAvatarComponent: React.FC<TenantAvatarComponentProps> = ({
|
|
27
|
-
imageUrl,
|
|
28
|
-
maxWidth = 130,
|
|
29
|
-
maxHeight = 130,
|
|
30
|
-
alt = "Tenant Logo",
|
|
31
|
-
sidebarPosition = "left",
|
|
32
|
-
sidebarSmallWidth = '64px',
|
|
33
|
-
navExpanded = false,
|
|
34
|
-
navSize = "large",
|
|
35
|
-
onClick
|
|
36
|
-
}) => {
|
|
37
|
-
// For horizontal positions (top/bottom), we primarily use maxWidth/maxHeight
|
|
38
|
-
const isHorizontal = sidebarPosition === "top" || sidebarPosition === "bottom";
|
|
39
|
-
const isVertical = sidebarPosition === "left" || sidebarPosition === "right";
|
|
40
|
-
|
|
41
|
-
// Container styling based on sidebar orientation
|
|
42
|
-
const containerSx = {
|
|
43
|
-
padding: '8px',
|
|
44
|
-
display: 'flex',
|
|
45
|
-
alignItems: 'center',
|
|
46
|
-
justifyContent: 'center',
|
|
47
|
-
|
|
48
|
-
// Horizontal sidebar (top/bottom): constrain by height, let width be auto
|
|
49
|
-
...(isHorizontal && {
|
|
50
|
-
height: maxHeight,
|
|
51
|
-
maxHeight: maxHeight,
|
|
52
|
-
}),
|
|
53
|
-
|
|
54
|
-
// Vertical sidebar (left/right): constrain by width based on nav state
|
|
55
|
-
...(isVertical && navSize === "small" && {
|
|
56
|
-
width: sidebarSmallWidth,
|
|
57
|
-
maxWidth: sidebarSmallWidth,
|
|
58
|
-
}),
|
|
59
|
-
...(isVertical && navSize === "large" && navExpanded && {
|
|
60
|
-
width: maxWidth,
|
|
61
|
-
maxWidth: maxWidth,
|
|
62
|
-
}),
|
|
63
|
-
...(isVertical && navSize === "large" && !navExpanded && {
|
|
64
|
-
width: sidebarSmallWidth,
|
|
65
|
-
maxWidth: sidebarSmallWidth,
|
|
66
|
-
}),
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
return (
|
|
70
|
-
<Box
|
|
71
|
-
component={'div'}
|
|
72
|
-
sx={{
|
|
73
|
-
...containerSx,
|
|
74
|
-
//m: 1,
|
|
75
|
-
cursor: onClick ? 'pointer' : 'default',
|
|
76
|
-
}}
|
|
77
|
-
className='dash-tenant-avatar'
|
|
78
|
-
onClick={onClick}
|
|
79
|
-
>
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
<img
|
|
83
|
-
src={imageUrl}
|
|
84
|
-
alt={alt}
|
|
85
|
-
style={{
|
|
86
|
-
width: 'auto',
|
|
87
|
-
height: 'auto',
|
|
88
|
-
maxWidth: '100%',
|
|
89
|
-
maxHeight: '100%',
|
|
90
|
-
objectFit: 'contain'
|
|
91
|
-
}}
|
|
92
|
-
//variant="square" // Use square variant for logos
|
|
93
|
-
/>
|
|
94
|
-
|
|
95
|
-
</Box>
|
|
96
|
-
);
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
export default TenantAvatarComponent;
|