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