@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.
Files changed (511) hide show
  1. package/dist/AppAsyncWrapper.js +30 -1
  2. package/dist/AppWrapper.js +35 -1
  3. package/dist/DASHAdmin.js +312 -1
  4. package/dist/RoutingWrapper.js +76 -1
  5. package/dist/classes/DASHStorageClass.js +15 -1
  6. package/dist/components/Input/RichTextField.js +26 -1
  7. package/dist/components/Redirect.js +56 -1
  8. package/dist/components/avatar/Avatar.js +72 -1
  9. package/dist/components/avatar/SingleImageUploader.js +46 -1
  10. package/dist/components/currency/Format.js +71 -1
  11. package/dist/components/custom/Redirect.js +20 -1
  12. package/dist/components/error/Error.js +161 -1
  13. package/dist/components/geocoding/GeocodingField.js +133 -1
  14. package/dist/components/i18n/BridgedLocalesMenuButton.js +126 -1
  15. package/dist/components/i18n/LangSwitcher.js +196 -1
  16. package/dist/components/loader/GlobalLoader.js +71 -1
  17. package/dist/components/logs/LogFile.js +99 -1
  18. package/dist/components/logs/LogFileById.js +75 -1
  19. package/dist/components/logs/LogViewer.js +33 -1
  20. package/dist/components/menu/AppMenu.js +11 -1
  21. package/dist/components/menu/CustomMenuItemLink.js +77 -1
  22. package/dist/components/menu/DarkToggleMode.js +47 -1
  23. package/dist/components/menu/LanguageToggleMode.js +99 -1
  24. package/dist/components/misc/CustomImageInput.js +54 -1
  25. package/dist/components/misc/DASHGlobalErrorHandler.js +159 -1
  26. package/dist/components/misc/DarkModeSwitcher.js +40 -1
  27. package/dist/components/misc/LanguageSwitcher.js +193 -1
  28. package/dist/components/misc/MUIHtmlToolTip.js +50 -1
  29. package/dist/components/misc/MuiSimpleJsonTable.js +178 -1
  30. package/dist/components/misc/MultiLevelTable.js +124 -1
  31. package/dist/components/misc/NoResults.js +17 -1
  32. package/dist/components/misc/PDFViewer.js +86 -1
  33. package/dist/components/navigation/Breadcrumbs.js +178 -1
  34. package/dist/components/navigation/BreadcrumbsManager.js +194 -1
  35. package/dist/components/navigation/index.js +8 -1
  36. package/dist/components/panel/Error.js +161 -1
  37. package/dist/components/permission/AvailablePermissionsContext.js +157 -1
  38. package/dist/components/permission/PermissionsSelector.js +719 -1
  39. package/dist/components/permission/PermissionsSelectorList.js +400 -1
  40. package/dist/components/racustombuttons/CustomRAButton.js +94 -1
  41. package/dist/components/racustombuttons/QuickButton.js +109 -1
  42. package/dist/components/racustombuttons/QuickEditButton.js +114 -1
  43. package/dist/components/racustombuttons/QuickIconButton.js +119 -1
  44. package/dist/components/scrollbar/Scrollbar.js +52 -1
  45. package/dist/components/selects/MultiSelect.js +42 -1
  46. package/dist/components/selects/RASearchableSelect.js +207 -1
  47. package/dist/components/selects/RASearchableSelectChips.js +225 -1
  48. package/dist/components/selects/SearchableSelect.js +128 -1
  49. package/dist/components/subscription/BillingCycleSelectInput.js +50 -1
  50. package/dist/components/subscription/PlanAddonsSettings.js +396 -1
  51. package/dist/components/subscription/PlanAuditLog.js +345 -1
  52. package/dist/components/subscription/PlanFeaturesSettings.js +151 -1
  53. package/dist/components/subscription/PlanLimitsSettings.js +168 -1
  54. package/dist/components/subscription/PlanMetadataSettings.js +219 -1
  55. package/dist/components/subscription/PlanPricesSettings.js +222 -1
  56. package/dist/components/subscription/index.js +12 -1
  57. package/dist/components/svgelements/SvgLoading.js +330 -1
  58. package/dist/components/svgelements/SvgLogo.js +70 -1
  59. package/dist/components/svgelements/SvgLogoMin.js +76 -1
  60. package/dist/components/svgelements/SvgShipping.js +1001 -1
  61. package/dist/components/tenant/TenantAttributes.js +107 -1
  62. package/dist/components/tenant/TenantAttributesContext.js +150 -1
  63. package/dist/components/tenant/TenantSelector.js +160 -1
  64. package/dist/components/tenant/TenantSettings.js +107 -1
  65. package/dist/components/tenant/TenantSettingsContext.js +152 -1
  66. package/dist/components/tenant/TenantTheme.js +112 -1
  67. package/dist/components/user/AvatarComponent.js +270 -1
  68. package/dist/components/user/TenantAvatarComponent.js +83 -1
  69. package/dist/components/user/UserPreferences.js +422 -1
  70. package/dist/config/ACTIONS.js +25 -1
  71. package/dist/config/ConstantsService.js +25 -1
  72. package/dist/config/DASHAdminSystemConstants.js +137 -1
  73. package/dist/config/PARSERS.js +9 -1
  74. package/dist/contexts/DashQueryClientContext.js +78 -1
  75. package/dist/contexts/DashResourceContext.js +21 -1
  76. package/dist/contexts/I18nBridgeContext.js +123 -1
  77. package/dist/contexts/I18nBridgeSetter.js +29 -1
  78. package/dist/contexts/I18nReduxSync.js +16 -1
  79. package/dist/contexts/SubscriptionPlanFormatsProvider.js +175 -1
  80. package/dist/contexts/SystemRequestsCache.js +194 -1
  81. package/dist/contexts/auth/AuthContext.js +396 -1
  82. package/dist/contexts/auth/AuthContextLocalStorage.js +118 -1
  83. package/dist/contexts/auth/DASHAuthenticationService.js +679 -1
  84. package/dist/contexts/auth/WindowContext.js +10 -1
  85. package/dist/contexts/auth/index.js +2 -1
  86. package/dist/contexts/com/FCMContext.js +378 -1
  87. package/dist/contexts/com/LaravelEchoContext.js +45 -1
  88. package/dist/contexts/com/LaravelEchoMgr.js +121 -1
  89. package/dist/contexts/com/components/DefaultNotificationComponent.js +31 -1
  90. package/dist/contexts/com/components/NotificationAttributesTable.js +28 -1
  91. package/dist/contexts/com/components/NotificationRenderer.js +36 -1
  92. package/dist/contexts/com/components/NotificationsWidget.js +142 -1
  93. package/dist/contexts/com/components/notificationFormats.js +15 -1
  94. package/dist/contexts/com/useLaravelEcho.js +340 -1
  95. package/dist/contexts/dictionary/DictionaryContext.js +43 -1
  96. package/dist/default-theme/DASHAppProviders.js +86 -1
  97. package/dist/default-theme/DashThemeContext.js +146 -1
  98. package/dist/default-theme/DashThemeHelperProvider.js +54 -1
  99. package/dist/default-theme/DomainAppLayout.js +126 -1
  100. package/dist/default-theme/DomainHeader.js +114 -1
  101. package/dist/default-theme/DomainTheme.js +60 -1
  102. package/dist/default-theme/FullLayoutMarkup.js +55 -1
  103. package/dist/default-theme/StaticLayout.js +36 -1
  104. package/dist/default-theme/index.js +19 -1
  105. package/dist/default-theme/menu/AppMaterialMenu.js +364 -1
  106. package/dist/default-theme/menu/AppMenuComponents/SubmenuPortal.js +33 -1
  107. package/dist/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItem.js +239 -1
  108. package/dist/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItems.js +22 -1
  109. package/dist/default-theme/menu/AppMenuComponents/expanded/CollapsableSidebarMenu.js +209 -1
  110. package/dist/default-theme/menu/AppMenuComponents/expanded/SidebarItem.js +71 -1
  111. package/dist/default-theme/menu/AppMenuComponents/getItem.js +7 -1
  112. package/dist/default-theme/menu/AppMenuComponents/submenuConstants.js +78 -1
  113. package/dist/default-theme/menu/AppSidebarMaterial.js +232 -1
  114. package/dist/default-theme/menu/SidebarActions.js +75 -1
  115. package/dist/default-theme/updateDomCssVariables.js +134 -1
  116. package/dist/helpers/checkRole.js +14 -1
  117. package/dist/helpers/parseAxiosError.js +28 -2
  118. package/dist/hooks/audio/useAudio.js +24 -1
  119. package/dist/hooks/axios.js +52 -1
  120. package/dist/hooks/data/useDashboardStats.js +88 -1
  121. package/dist/hooks/data/usePackageByClientsStats.js +51 -1
  122. package/dist/hooks/data/usePackageByCommunesStats.js +51 -1
  123. package/dist/hooks/data/usePackageStats.js +88 -1
  124. package/dist/hooks/data/usePackageWithdrawDetails.js +69 -1
  125. package/dist/hooks/data/useStats.js +94 -1
  126. package/dist/hooks/isCurrentPath.js +18 -1
  127. package/dist/hooks/notifications/WSMessagesManager.js +128 -1
  128. package/dist/hooks/notifications/WSPusherManager.js +70 -1
  129. package/dist/hooks/useBreadcrumbs.js +208 -1
  130. package/dist/hooks/useClickOutside.js +18 -1
  131. package/dist/hooks/useFormPersistance.js +129 -1
  132. package/dist/hooks/useGlobalErrorMediator.js +37 -1
  133. package/dist/hooks/useGlobalLoaderMgr.js +20 -1
  134. package/dist/hooks/useHash.js +24 -1
  135. package/dist/hooks/useLocalStorage.js +68 -1
  136. package/dist/hooks/usePolyglotTranslation.js +57 -1
  137. package/dist/hooks/usePrevious.js +12 -1
  138. package/dist/hooks/usePrintSelected.js +30 -1
  139. package/dist/hooks/useVirtualHash.js +28 -1
  140. package/dist/hooks/window/useWindowSize.js +23 -1
  141. package/dist/index.js +120 -97
  142. package/dist/interfaces.js +6 -1
  143. package/dist/layout/AppLayout.js +36 -1
  144. package/dist/layout/ApplicationLayout.js +110 -1
  145. package/dist/layout/MotionWrapper.js +182 -1
  146. package/dist/layout/MotionWrapper.original.js +182 -1
  147. package/dist/layout/ResourceMenu.js +87 -1
  148. package/dist/layout/ResoureLayout.js +47 -1
  149. package/dist/layout/TransitionWrapper.js +83 -2
  150. package/dist/pages/ChangePassword.js +198 -1
  151. package/dist/pages/DASHLanding.js +9 -1
  152. package/dist/pages/DASHLightWeightLogin.js +495 -1
  153. package/dist/pages/DASHSimpleLogin.js +231 -1
  154. package/dist/pages/Login.js +113 -1
  155. package/dist/pages/Profile.js +347 -1
  156. package/dist/pages/RecoverPassword.js +175 -1
  157. package/dist/pages/SingleImageUploader.js +40 -1
  158. package/dist/pages/VerifyAccount.js +129 -1
  159. package/dist/providers/authProvider.js +186 -1
  160. package/dist/providers/dataProvider.js +468 -1
  161. package/dist/providers/i18n/en.js +514 -1
  162. package/dist/providers/i18n/es.js +520 -1
  163. package/dist/providers/i18n/languages.js +8 -1
  164. package/dist/providers/i18nProvider.js +23 -1
  165. package/dist/react-admin-dash/RADashComponent.js +210 -1
  166. package/dist/react-admin-dash/Resource.js +62 -1
  167. package/dist/resources/Brand/BrandResource.js +106 -1
  168. package/dist/resources/DASHResourceLoader.js +104 -1
  169. package/dist/resources/Log/LogResource.js +59 -1
  170. package/dist/resources/Tenant/ImpersonateTenantResource.js +113 -1
  171. package/dist/resources/Trash/TrashTemplate.js +195 -1
  172. package/dist/resources.js +259 -1
  173. package/dist/schemas/log.js +45 -1
  174. package/dist/schemas/notification.js +39 -1
  175. package/dist/schemas/permissions.js +44 -1
  176. package/dist/schemas/roles.js +48 -1
  177. package/dist/schemas/rolesDataGrid.js +48 -1
  178. package/dist/schemas/subscription/components/SubscriptionActions.js +172 -1
  179. package/dist/schemas/subscription/components/SubscriptionPaymentHistory.js +101 -1
  180. package/dist/schemas/subscription/components/SubscriptionPlanFeatures.js +115 -1
  181. package/dist/schemas/subscription/components/SubscriptionPlanPreview.js +92 -1
  182. package/dist/schemas/subscription/components/SubscriptionPlanStats.js +181 -1
  183. package/dist/schemas/subscription/components/SubscriptionStatusIndicator.js +70 -1
  184. package/dist/schemas/subscription/subscriptionPlanSchema.js +184 -1
  185. package/dist/schemas/subscription/subscriptionSchema.js +147 -1
  186. package/dist/schemas/subscriptionPlan.js +397 -1
  187. package/dist/schemas/tenant.js +122 -1
  188. package/dist/schemas/tenantUser.js +94 -1
  189. package/dist/schemas/tenant_superadmin.js +118 -1
  190. package/dist/schemas/user.js +26 -1
  191. package/dist/systemResources.js +1039 -1
  192. package/dist/systemResources.old.js +668 -1
  193. package/dist/templates/ResourceTemplate.js +196 -1
  194. package/dist/templates/ResourceTemplateCreate.js +144 -1
  195. package/dist/templates/ResourceTemplateEdit.js +147 -1
  196. package/dist/templates/ResourceTemplateFull.js +518 -1
  197. package/dist/templates/ResourceTemplateList.js +295 -1
  198. package/dist/templates/ResourceTemplateShow.js +45 -1
  199. package/dist/templates/TrashTemplate.js +175 -1
  200. package/dist/tenantResources.js +206 -1
  201. package/dist/test_portal_bubbles.js +37 -1
  202. package/dist/theme/AppHeader.js +60 -1
  203. package/dist/theme/AppLayoutSetting.js +34 -1
  204. package/dist/theme/AppLogo.js +7 -1
  205. package/dist/theme/AppSidebar.js +30 -1
  206. package/dist/theme/AppSidebarContent.js +84 -1
  207. package/dist/theme/AppSidebarLogo.js +42 -1
  208. package/dist/theme/components/PageTitle.js +61 -1
  209. package/dist/utils/cache/CacheInvalidatorContext.js +100 -1
  210. package/dist/utils/cache/CacheInvalidatorListenerComponent.js +10 -1
  211. package/dist/utils/cache/useCacheInvalidatorListener.js +17 -1
  212. package/dist/utils/convertFileToBase64.js +10 -1
  213. package/dist/utils/convertToFile.js +12 -1
  214. package/dist/utils/cookies.js +45 -1
  215. package/dist/utils/dashDefaultQueryClient.js +15 -1
  216. package/dist/utils/dataUrlToBlob.js +23 -1
  217. package/dist/utils/deepReplace.js +17 -1
  218. package/dist/utils/getProfileMenu.js +31 -1
  219. package/dist/utils/getTenantSettings.js +9 -1
  220. package/dist/utils/getType.js +10 -1
  221. package/dist/utils/getUserSettings.js +9 -1
  222. package/dist/utils/hasCode.js +14 -1
  223. package/dist/utils/index.js +19 -1
  224. package/dist/utils/injectTenantStyles.js +19 -1
  225. package/dist/utils/isComponent.js +23 -1
  226. package/dist/utils/navEvents.js +75 -1
  227. package/dist/utils/prototypes.js +5 -1
  228. package/dist/utils/regexp.js +7 -1
  229. package/dist/utils/resolveObjectPath.js +5 -1
  230. package/dist/utils/setNativeValue.js +17 -1
  231. package/dist/utils/slugify.js +7 -1
  232. package/dist/utils/validators/emailValidator.js +8 -1
  233. package/dist/utils/validators/requiredValidator.js +7 -1
  234. package/dist/utils/validators/rutValidator.js +25 -1
  235. package/dist/utils/validators.js +57 -1
  236. package/package.json +153 -69
  237. package/src/AppAsyncWrapper.tsx +42 -0
  238. package/src/AppWrapper.tsx +45 -0
  239. package/src/DASHAdmin.tsx +501 -0
  240. package/src/RoutingWrapper.tsx +139 -0
  241. package/src/classes/DASHStorageClass.tsx +8 -0
  242. package/src/components/Input/RichTextField.tsx +27 -0
  243. package/src/components/Redirect.tsx +46 -0
  244. package/src/components/avatar/Avatar.tsx +67 -0
  245. package/src/components/avatar/SingleImageUploader.tsx +53 -0
  246. package/src/components/currency/Format.tsx +77 -0
  247. package/src/components/custom/Redirect.tsx +23 -0
  248. package/src/components/error/Error.tsx +168 -0
  249. package/src/components/geocoding/GeocodingField.tsx +167 -0
  250. package/src/components/i18n/BridgedLocalesMenuButton.tsx +159 -0
  251. package/src/components/i18n/LangSwitcher.tsx +204 -0
  252. package/src/components/loader/GlobalLoader.tsx +56 -0
  253. package/src/components/logs/LogFile.tsx +88 -0
  254. package/src/components/logs/LogFileById.tsx +68 -0
  255. package/src/components/logs/LogViewer.tsx +43 -0
  256. package/src/components/menu/AppMenu.tsx +22 -0
  257. package/src/components/menu/CustomMenuItemLink.tsx +61 -0
  258. package/src/components/menu/DarkToggleMode.tsx +65 -0
  259. package/src/components/menu/LanguageToggleMode.tsx +120 -0
  260. package/src/components/misc/CustomImageInput.tsx +62 -0
  261. package/src/components/misc/DASHGlobalErrorHandler.tsx +194 -0
  262. package/src/components/misc/DarkModeSwitcher.tsx +112 -0
  263. package/src/components/misc/LanguageSwitcher.tsx +199 -0
  264. package/src/components/misc/MUIHtmlToolTip.tsx +15 -0
  265. package/src/components/misc/MuiSimpleJsonTable.tsx +279 -0
  266. package/src/components/misc/MultiLevelTable.tsx +229 -0
  267. package/src/components/misc/NoResults.tsx +25 -0
  268. package/src/components/misc/PDFViewer.tsx +85 -0
  269. package/src/components/navigation/Breadcrumbs.tsx +220 -0
  270. package/src/components/navigation/BreadcrumbsManager.tsx +310 -0
  271. package/src/components/navigation/index.tsx +5 -0
  272. package/src/components/panel/Error.tsx +168 -0
  273. package/src/components/permission/AvailablePermissionsContext.tsx +173 -0
  274. package/src/components/permission/PermissionsSelector.tsx +819 -0
  275. package/src/components/permission/PermissionsSelectorList.tsx +468 -0
  276. package/src/components/permission/tsx +0 -0
  277. package/src/components/racustombuttons/CustomRAButton.tsx +87 -0
  278. package/src/components/racustombuttons/QuickButton.tsx +117 -0
  279. package/src/components/racustombuttons/QuickEditButton.tsx +115 -0
  280. package/src/components/racustombuttons/QuickIconButton.tsx +122 -0
  281. package/src/components/scrollbar/Scrollbar.tsx +31 -0
  282. package/src/components/selects/MultiSelect.tsx +53 -0
  283. package/src/components/selects/RASearchableSelect.tsx +279 -0
  284. package/src/components/selects/RASearchableSelectChips.tsx +304 -0
  285. package/src/components/selects/SearchableSelect.tsx +135 -0
  286. package/src/components/subscription/BillingCycleSelectInput.tsx +68 -0
  287. package/src/components/subscription/PlanAddonsSettings.tsx +522 -0
  288. package/src/components/subscription/PlanAuditLog.tsx +439 -0
  289. package/src/components/subscription/PlanFeaturesSettings.tsx +223 -0
  290. package/src/components/subscription/PlanLimitsSettings.tsx +230 -0
  291. package/src/components/subscription/PlanMetadataSettings.tsx +284 -0
  292. package/src/components/subscription/PlanPricesSettings.tsx +295 -0
  293. package/src/components/subscription/index.ts +7 -0
  294. package/src/components/svgelements/SvgLoading.tsx +229 -0
  295. package/src/components/svgelements/SvgLogo.tsx +53 -0
  296. package/src/components/svgelements/SvgLogoMin.tsx +64 -0
  297. package/src/components/svgelements/SvgShipping.tsx +673 -0
  298. package/src/components/tenant/AvailablePermissionsContext.tsx +0 -0
  299. package/src/components/tenant/TenantAttributes.tsx +153 -0
  300. package/src/components/tenant/TenantAttributesContext.tsx +163 -0
  301. package/src/components/tenant/TenantSelector.tsx +139 -0
  302. package/src/components/tenant/TenantSettings.tsx +172 -0
  303. package/src/components/tenant/TenantSettingsContext.tsx +165 -0
  304. package/src/components/tenant/TenantTheme.tsx +172 -0
  305. package/src/components/user/AvatarComponent.tsx +301 -0
  306. package/src/components/user/TenantAvatarComponent.tsx +99 -0
  307. package/src/components/user/UserPreferences.tsx +642 -0
  308. package/src/config/ACTIONS.tsx +26 -0
  309. package/src/config/ConstantsService.tsx +44 -0
  310. package/src/config/DASHAdminSystemConstants.tsx +182 -0
  311. package/src/config/PARSERS.tsx +9 -0
  312. package/src/contexts/DashQueryClientContext.tsx +113 -0
  313. package/src/contexts/DashResourceContext.tsx +34 -0
  314. package/src/contexts/I18nBridgeContext.tsx +156 -0
  315. package/src/contexts/I18nBridgeSetter.tsx +39 -0
  316. package/src/contexts/I18nReduxSync.tsx +27 -0
  317. package/src/contexts/SubscriptionPlanFormatsProvider.tsx +217 -0
  318. package/src/contexts/SystemRequestsCache.tsx +215 -0
  319. package/src/contexts/auth/AuthContext.tsx +553 -0
  320. package/src/contexts/auth/AuthContextLocalStorage.tsx +140 -0
  321. package/src/contexts/auth/DASHAuthenticationService.tsx +917 -0
  322. package/src/contexts/auth/WindowContext.tsx +15 -0
  323. package/src/contexts/auth/index.tsx +3 -0
  324. package/src/contexts/com/FCMContext.tsx +415 -0
  325. package/src/contexts/com/LaravelEchoContext.tsx +41 -0
  326. package/src/contexts/com/LaravelEchoMgr.tsx +155 -0
  327. package/src/contexts/com/components/DefaultNotificationComponent.tsx +20 -0
  328. package/src/contexts/com/components/NotificationAttributesTable.tsx +54 -0
  329. package/src/contexts/com/components/NotificationRenderer.tsx +42 -0
  330. package/src/contexts/com/components/NotificationsWidget.tsx +182 -0
  331. package/src/contexts/com/components/notificationFormats.tsx +50 -0
  332. package/src/contexts/com/useLaravelEcho.tsx +432 -0
  333. package/src/contexts/dictionary/DictionaryContext.tsx +94 -0
  334. package/src/default-theme/DASHAppProviders.tsx +117 -0
  335. package/src/default-theme/DashThemeContext.tsx +218 -0
  336. package/src/default-theme/DashThemeHelperProvider.tsx +98 -0
  337. package/src/default-theme/DomainAppLayout.tsx +166 -0
  338. package/src/default-theme/DomainHeader.tsx +162 -0
  339. package/src/default-theme/DomainTheme.tsx +59 -0
  340. package/src/default-theme/FullLayoutMarkup.tsx +250 -0
  341. package/src/default-theme/StaticLayout.tsx +47 -0
  342. package/src/default-theme/index.tsx +11 -0
  343. package/src/default-theme/menu/AppMaterialMenu.tsx +545 -0
  344. package/src/default-theme/menu/AppMenuComponents/SubmenuPortal.tsx +56 -0
  345. package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItem.tsx +254 -0
  346. package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItems.tsx +31 -0
  347. package/src/default-theme/menu/AppMenuComponents/expanded/CollapsableSidebarMenu.tsx +276 -0
  348. package/src/default-theme/menu/AppMenuComponents/expanded/SidebarItem.tsx +91 -0
  349. package/src/default-theme/menu/AppMenuComponents/getItem.tsx +17 -0
  350. package/src/default-theme/menu/AppMenuComponents/interfaces.tsx +41 -0
  351. package/src/default-theme/menu/AppMenuComponents/submenuConstants.ts +85 -0
  352. package/src/default-theme/menu/AppSidebarMaterial.tsx +339 -0
  353. package/src/default-theme/menu/SidebarActions.tsx +84 -0
  354. package/src/default-theme/updateDomCssVariables.tsx +176 -0
  355. package/src/helpers/checkRole.tsx +66 -0
  356. package/src/helpers/parseAxiosError.tsx +41 -0
  357. package/src/hooks/audio/useAudio.tsx +39 -0
  358. package/src/hooks/axios.tsx +62 -0
  359. package/src/hooks/data/useDashboardStats.tsx +65 -0
  360. package/src/hooks/data/usePackageByClientsStats.tsx +44 -0
  361. package/src/hooks/data/usePackageByCommunesStats.tsx +44 -0
  362. package/src/hooks/data/usePackageStats.tsx +69 -0
  363. package/src/hooks/data/usePackageWithdrawDetails.tsx +61 -0
  364. package/src/hooks/data/useStats.tsx +86 -0
  365. package/src/hooks/isCurrentPath.tsx +22 -0
  366. package/src/hooks/notifications/WSMessagesManager.tsx +152 -0
  367. package/src/hooks/notifications/WSPusherManager.tsx +92 -0
  368. package/src/hooks/useBreadcrumbs.tsx +329 -0
  369. package/src/hooks/useClickOutside.tsx +17 -0
  370. package/src/hooks/useFormPersistance.tsx +150 -0
  371. package/src/hooks/useGlobalErrorMediator.tsx +43 -0
  372. package/src/hooks/useGlobalLoaderMgr.tsx +21 -0
  373. package/src/hooks/useHash.tsx +27 -0
  374. package/src/hooks/useLocalStorage.tsx +196 -0
  375. package/src/hooks/usePolyglotTranslation.tsx +62 -0
  376. package/src/hooks/usePrevious.tsx +9 -0
  377. package/src/hooks/usePrintSelected.tsx +37 -0
  378. package/src/hooks/useVirtualHash.tsx +33 -0
  379. package/src/hooks/window/useWindowSize.tsx +36 -0
  380. package/src/index.tsx +110 -0
  381. package/src/interfaces/IAppResourceConfig.tsx +20 -0
  382. package/src/interfaces/Log.tsx +16 -0
  383. package/src/interfaces/Tenant.tsx +25 -0
  384. package/src/interfaces/communication/IActions.tsx +5 -0
  385. package/src/interfaces/communication/INotification.tsx +21 -0
  386. package/src/interfaces/communication/IPayload.tsx +3 -0
  387. package/src/interfaces/communication/IRequestAction.tsx +10 -0
  388. package/src/interfaces/communication/IRequestPayload.tsx +7 -0
  389. package/src/interfaces/communication/IResponseAction.tsx +7 -0
  390. package/src/interfaces/misc/IAny.tsx +3 -0
  391. package/src/interfaces/misc/IFlashMessage.tsx +10 -0
  392. package/src/interfaces/navigation/IAppMenu.ts +14 -0
  393. package/src/interfaces/navigation/ICollapsableSidebarMenu.ts +12 -0
  394. package/src/interfaces/navigation/IMenuItem.ts +16 -0
  395. package/src/interfaces/notifications/IModel.tsx +6 -0
  396. package/src/interfaces/notifications/IModelField.tsx +8 -0
  397. package/src/interfaces/notifications/IUserNotification.tsx +12 -0
  398. package/src/interfaces/notifications/IUserNotificationData.tsx +13 -0
  399. package/src/interfaces/notifications/IUserNotificationPayload.tsx +8 -0
  400. package/src/interfaces/user/IGetAuth.tsx +92 -0
  401. package/src/interfaces/user/ITenantSettings.tsx +3 -0
  402. package/src/interfaces/user/IUser.tsx +60 -0
  403. package/src/interfaces/user/IUserSettings.tsx +43 -0
  404. package/src/interfaces.tsx +6 -0
  405. package/src/layout/AppLayout.tsx +112 -0
  406. package/src/layout/ApplicationLayout.tsx +197 -0
  407. package/src/layout/MotionWrapper.original.tsx +236 -0
  408. package/src/layout/MotionWrapper.tsx +236 -0
  409. package/src/layout/ResourceMenu.tsx +164 -0
  410. package/src/layout/ResoureLayout.tsx +105 -0
  411. package/src/layout/TransitionWrapper.tsx +125 -0
  412. package/src/pages/ChangePassword.tsx +179 -0
  413. package/src/pages/DASHLanding.tsx +22 -0
  414. package/src/pages/DASHLightWeightLogin.tsx +610 -0
  415. package/src/pages/DASHSimpleLogin.tsx +260 -0
  416. package/src/pages/Login.tsx +111 -0
  417. package/src/pages/Profile.tsx +394 -0
  418. package/src/pages/RecoverPassword.tsx +166 -0
  419. package/src/pages/SingleImageUploader.tsx +55 -0
  420. package/src/pages/VerifyAccount.tsx +128 -0
  421. package/src/providers/authProvider.tsx +210 -0
  422. package/src/providers/dataProvider.tsx +672 -0
  423. package/src/providers/i18n/en.ts +533 -0
  424. package/src/providers/i18n/es.ts +539 -0
  425. package/src/providers/i18n/languages.tsx +5 -0
  426. package/src/providers/i18nProvider.tsx +23 -0
  427. package/src/react-admin-dash/RADashComponent.tsx +240 -0
  428. package/src/react-admin-dash/Resource.tsx +77 -0
  429. package/src/resources/Brand/BrandResource.tsx +130 -0
  430. package/src/resources/DASHResourceLoader.ts +180 -0
  431. package/src/resources/Log/LogResource.tsx +73 -0
  432. package/src/resources/Tenant/ImpersonateTenantResource.tsx +113 -0
  433. package/src/resources/Trash/TrashTemplate.tsx +180 -0
  434. package/src/resources.tsx +280 -0
  435. package/src/schemas/log.tsx +45 -0
  436. package/src/schemas/notification.tsx +42 -0
  437. package/src/schemas/permissions.tsx +44 -0
  438. package/src/schemas/roles.tsx +48 -0
  439. package/src/schemas/rolesDataGrid.tsx +48 -0
  440. package/src/schemas/subscription/components/SubscriptionActions.tsx +153 -0
  441. package/src/schemas/subscription/components/SubscriptionPaymentHistory.tsx +120 -0
  442. package/src/schemas/subscription/components/SubscriptionPlanFeatures.tsx +155 -0
  443. package/src/schemas/subscription/components/SubscriptionPlanPreview.tsx +128 -0
  444. package/src/schemas/subscription/components/SubscriptionPlanStats.tsx +268 -0
  445. package/src/schemas/subscription/components/SubscriptionStatusIndicator.tsx +72 -0
  446. package/src/schemas/subscription/subscriptionPlanSchema.tsx +185 -0
  447. package/src/schemas/subscription/subscriptionSchema.tsx +152 -0
  448. package/src/schemas/subscriptionPlan.ts +422 -0
  449. package/src/schemas/tenant.tsx +129 -0
  450. package/src/schemas/tenantUser.tsx +96 -0
  451. package/src/schemas/tenant_superadmin.tsx +119 -0
  452. package/src/schemas/user.tsx +26 -0
  453. package/src/systemResources.old.tsx +928 -0
  454. package/src/systemResources.tsx +1135 -0
  455. package/src/templates/ResourceTemplate.tsx +240 -0
  456. package/src/templates/ResourceTemplateCreate.tsx +167 -0
  457. package/src/templates/ResourceTemplateEdit.tsx +176 -0
  458. package/src/templates/ResourceTemplateFull.tsx +581 -0
  459. package/src/templates/ResourceTemplateList.tsx +340 -0
  460. package/src/templates/ResourceTemplateShow.tsx +88 -0
  461. package/src/templates/TrashTemplate.tsx +179 -0
  462. package/src/tenantResources.tsx +223 -0
  463. package/src/test_portal_bubbles.tsx +40 -0
  464. package/src/theme/AppHeader.tsx +52 -0
  465. package/src/theme/AppLayoutSetting.tsx +33 -0
  466. package/src/theme/AppLogo.tsx +13 -0
  467. package/src/theme/AppSidebar.tsx +12 -0
  468. package/src/theme/AppSidebarContent.tsx +105 -0
  469. package/src/theme/AppSidebarLogo.tsx +48 -0
  470. package/src/theme/components/PageTitle.tsx +37 -0
  471. package/src/utils/cache/CacheInvalidatorContext.tsx +125 -0
  472. package/src/utils/cache/CacheInvalidatorListenerComponent.tsx +10 -0
  473. package/src/utils/cache/useCacheInvalidatorListener.tsx +27 -0
  474. package/src/utils/convertFileToBase64.tsx +9 -0
  475. package/src/utils/convertToFile.tsx +14 -0
  476. package/src/utils/cookies.tsx +33 -0
  477. package/src/utils/dashDefaultQueryClient.tsx +34 -0
  478. package/src/utils/dataUrlToBlob.tsx +30 -0
  479. package/src/utils/deepReplace.tsx +19 -0
  480. package/src/utils/getProfileMenu.tsx +41 -0
  481. package/src/utils/getTenantSettings.tsx +9 -0
  482. package/src/utils/getType.tsx +8 -0
  483. package/src/utils/getUserSettings.tsx +8 -0
  484. package/src/utils/hasCode.tsx +14 -0
  485. package/src/utils/index.ts +19 -0
  486. package/src/utils/injectTenantStyles.ts +28 -0
  487. package/src/utils/isComponent.tsx +45 -0
  488. package/src/utils/navEvents.tsx +91 -0
  489. package/src/utils/prototypes.tsx +5 -0
  490. package/src/utils/regexp.tsx +4 -0
  491. package/src/utils/resolveObjectPath.tsx +4 -0
  492. package/src/utils/setNativeValue.tsx +24 -0
  493. package/src/utils/slugify.tsx +11 -0
  494. package/src/utils/validators/emailValidator.tsx +6 -0
  495. package/src/utils/validators/requiredValidator.tsx +5 -0
  496. package/src/utils/validators/rutValidator.tsx +31 -0
  497. package/src/utils/validators.tsx +96 -0
  498. package/dist/ChangePassword-DmWAQAX_.js +0 -152
  499. package/dist/Login-t41HMhVT.js +0 -101
  500. package/dist/Profile-By-gdPUd.js +0 -294
  501. package/dist/RecoverPassword-DzPdbkg2.js +0 -149
  502. package/dist/VerifyAccount-Bofaxe5w.js +0 -99
  503. package/dist/index-gfebuoyf.js +0 -21614
  504. /package/dist/{components/permission/tsx → declarations.d.js} +0 -0
  505. /package/{dist → src}/DASHAdmin.tsx.old +0 -0
  506. /package/{dist → src}/declarations.d.ts +0 -0
  507. /package/{dist → src}/default-theme/DashThemeContext.tsx.fast +0 -0
  508. /package/{dist → src}/default-theme/DashThemeContext.tsx.old +0 -0
  509. /package/{dist → src}/templates/ResourceTemplate.tsx.memoized_experiment +0 -0
  510. /package/{dist → src}/templates/ResourceTemplate.tsx.original +0 -0
  511. /package/{dist → src}/templates/ResourceTemplateOld.tsx.bkup +0 -0
@@ -0,0 +1,218 @@
1
+ import React, { createContext, useContext, useState, useEffect } from 'react';
2
+ import { appTheme, getAntTheme } from 'dash-styles';
3
+ import { AuthPersistenceService } from 'dash-auth';
4
+ import { useSelector } from 'react-redux';
5
+ import { IDASHAppState } from 'dash-admin-state';
6
+ import { updateDomCssVariables } from 'dash-utils';
7
+ import CssBaseline from '@mui/material/CssBaseline';
8
+ import ConfigProvider from 'antd/es/config-provider';
9
+
10
+
11
+ import {
12
+ Theme,
13
+ createTheme,
14
+ ThemeProvider
15
+ } from '@mui/material';
16
+
17
+ interface DashThemeContextType {
18
+ theme: Theme;
19
+ themeOptions: ReturnType<typeof appTheme>;
20
+ recreateTheme: (tenantSettings?: any) => void;
21
+ currentMode: string;
22
+ }
23
+
24
+
25
+
26
+ const DashThemeContext = createContext<DashThemeContextType | null>(null);
27
+
28
+ // Defensive patch for MUI v9: createThemeWithVars can produce a theme where
29
+ // breakpoints.internal_mediaKeys is missing. Ensure it is always set so that
30
+ // responsive `sx` props (e.g. `padding: { xs: 2, sm: 3 }`) do not crash.
31
+ function patchThemeBreakpoints(theme: Theme): Theme {
32
+ const bp = (theme as any).breakpoints;
33
+ if (bp && !bp.internal_mediaKeys && bp.keys && bp.up) {
34
+ bp.internal_mediaKeys = bp.keys.map((key: string) => bp.up(key));
35
+ }
36
+ return theme;
37
+ }
38
+
39
+ export const useDashThemeContext = () => {
40
+ const context = useContext(DashThemeContext);
41
+ if (!context) {
42
+ throw new Error('useDashThemeContext must be used within a DashThemeProvider');
43
+ }
44
+ return context;
45
+ };
46
+
47
+ interface DashThemeProviderProps {
48
+ children?: React.ReactNode;
49
+ extendedOptions?: any;
50
+ }
51
+
52
+ export const DashThemeProvider: React.FC<DashThemeProviderProps> = ({ extendedOptions, children }) => {
53
+ // Track current theme mode from data-theme attribute
54
+ const [currentMode, setCurrentMode] = useState<string>(() =>
55
+ document.documentElement.getAttribute('data-theme') || 'dark'
56
+ );
57
+
58
+ const [themeOptions, setThemeOptions] = useState<ReturnType<typeof appTheme>>(() => {
59
+ // Read persisted tenant settings on initialization to include tenant colors
60
+ // in the initial theme, avoiding a flash of default colors.
61
+ const initialTenantSettings = AuthPersistenceService.getTenantSettings();
62
+ return appTheme(extendedOptions, {
63
+ currentMode,
64
+ colors: initialTenantSettings?.colors,
65
+ tenantSettings: initialTenantSettings,
66
+ });
67
+ });
68
+
69
+ const [theme, setTheme] = useState<Theme>(() => {
70
+ const initialTenantSettings = AuthPersistenceService.getTenantSettings();
71
+ /* @ts-ignore */
72
+ return patchThemeBreakpoints(createTheme(appTheme(extendedOptions, {
73
+ currentMode,
74
+ colors: initialTenantSettings?.colors,
75
+ tenantSettings: initialTenantSettings,
76
+ })));
77
+ });
78
+
79
+
80
+ const [antTheme, setAntTheme] = useState<any>(() => {
81
+ const initialTenantSettings = AuthPersistenceService.getTenantSettings();
82
+
83
+ return getAntTheme({
84
+ currentMode,
85
+ colors: initialTenantSettings?.colors,
86
+ tenantSettings: initialTenantSettings,
87
+ });
88
+ });
89
+
90
+ const getTenantSettings = () => {
91
+ const persistedTenantSettings = AuthPersistenceService.getTenantSettings();
92
+ return persistedTenantSettings || null;
93
+ };
94
+
95
+ const recreateTheme = (tenantSettings?: any, mode?: string) => {
96
+ const settings = tenantSettings || getTenantSettings();
97
+ //const themeMode = mode || currentMode;
98
+ const themeMode = mode || document.documentElement.getAttribute('data-theme') || 'dark';
99
+
100
+ console.log('Recreating MUI theme with tenant settings:', settings, 'mode:', themeMode);
101
+
102
+ const newThemeOptions = appTheme(
103
+ extendedOptions,
104
+ {
105
+ tenantSettings: settings,
106
+ colors: settings?.colors,
107
+ currentMode: themeMode,
108
+ }
109
+ );
110
+ /* @ts-ignore */
111
+ const newTheme = patchThemeBreakpoints(createTheme(newThemeOptions));
112
+
113
+ setThemeOptions(newThemeOptions);
114
+ setTheme(newTheme);
115
+
116
+
117
+ setAntTheme(getAntTheme({
118
+ tenantSettings: settings,
119
+ colors: settings?.colors,
120
+ currentMode: themeMode,
121
+ }));
122
+
123
+ updateDomCssVariables(themeMode, settings?.colors, settings?.values);
124
+ /*if (settings?.colors || settings?.values) {
125
+ updateDomCssVariables(themeMode, settings?.colors, settings?.values);
126
+ }*/
127
+ };
128
+
129
+ // Observer for data-theme attribute changes
130
+ useEffect(() => {
131
+ const observer = new MutationObserver((mutations) => {
132
+ mutations.forEach((mutation) => {
133
+ if (mutation.type === 'attributes' && mutation.attributeName === 'data-theme') {
134
+ const newMode = document.documentElement.getAttribute('data-theme') || 'dark';
135
+ if (newMode !== currentMode) {
136
+ console.log('Theme mode changed from', currentMode, 'to', newMode);
137
+ setCurrentMode(newMode);
138
+ const settings = getTenantSettings();
139
+
140
+ console.log('Updating theme with new mode:', newMode, 'and settings:', settings);
141
+
142
+ updateDomCssVariables(newMode, settings?.colors, settings?.values);
143
+ }
144
+ }
145
+ });
146
+ });
147
+
148
+ // Start observing
149
+ observer.observe(document.documentElement, {
150
+ attributes: true,
151
+ attributeFilter: ['data-theme']
152
+ });
153
+
154
+ // Cleanup observer on unmount
155
+ return () => observer.disconnect();
156
+ }, [currentMode]);
157
+
158
+ // React to mode changes
159
+ useEffect(() => {
160
+ console.log('Current mode updated to:', currentMode);
161
+ const tenantSettings = getTenantSettings();
162
+ recreateTheme(tenantSettings, currentMode);
163
+ }, [currentMode]);
164
+
165
+ // Initial setup
166
+ useEffect(() => {
167
+ const tenantSettings = getTenantSettings();
168
+
169
+ if (tenantSettings) {
170
+ console.log("Recreating MUI theme on mount");
171
+ recreateTheme(tenantSettings, currentMode);
172
+ }
173
+ }, []);
174
+
175
+ // Listen for DASHTRefreshTheme CustomEvent to trigger theme recreation
176
+ useEffect(() => {
177
+ const handler = (event: Event) => {
178
+ if (event.type === 'DASHTRefreshTheme') {
179
+ const tenantSettings = getTenantSettings();
180
+ recreateTheme(tenantSettings, currentMode);
181
+ }
182
+ };
183
+ window.addEventListener('DASHTRefreshTheme', handler);
184
+ return () => window.removeEventListener('DASHTRefreshTheme', handler);
185
+ }, []);
186
+
187
+ const contextValue: DashThemeContextType = {
188
+ theme,
189
+ themeOptions,
190
+ recreateTheme,
191
+ currentMode,
192
+
193
+ };
194
+
195
+ return (
196
+ <ThemeProvider noSsr disableTransitionOnChange theme={theme}>
197
+ <CssBaseline />
198
+ <DashThemeContext.Provider value={contextValue}>
199
+
200
+
201
+ <ConfigProvider
202
+ theme={antTheme}
203
+ >
204
+
205
+ {children}
206
+
207
+ </ConfigProvider>
208
+
209
+
210
+
211
+
212
+
213
+ </DashThemeContext.Provider>
214
+ </ThemeProvider>
215
+ );
216
+ };
217
+
218
+ export default DashThemeContext;
@@ -0,0 +1,98 @@
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;
@@ -0,0 +1,166 @@
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;
@@ -0,0 +1,162 @@
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;