@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,150 @@
1
+ import { useEffect, useCallback, useRef } from 'react';
2
+ import { useFormContext } from 'react-hook-form';
3
+ import { useParams } from 'react-router-dom';
4
+ import { dashStorage } from 'dash-utils';
5
+ interface FormPersistenceOptions {
6
+ persistState?: boolean;
7
+ storageKey?: string;
8
+ debounceMs?: number;
9
+ excludeFields?: string[];
10
+ }
11
+
12
+ export const useFormPersistence = (options: FormPersistenceOptions = {}) => {
13
+ const {
14
+ persistState = false,
15
+ storageKey,
16
+ debounceMs = 1000,
17
+ excludeFields = []
18
+ } = options;
19
+
20
+ const { watch, setValue, getValues } = useFormContext();
21
+ const { id: tabId } = useParams();
22
+ const debounceRef = useRef<ReturnType<typeof setTimeout>>(null);
23
+
24
+ // Generate storage key
25
+ const finalStorageKey = storageKey || `tab-form-${tabId}`;
26
+
27
+ // Save form data to localStorage
28
+ const saveFormData = useCallback((data: any) => {
29
+ if (!persistState) return;
30
+
31
+ try {
32
+ // Filter out excluded fields
33
+ const filteredData = { ...data };
34
+ excludeFields.forEach(field => {
35
+ delete filteredData[field];
36
+ });
37
+
38
+ const persistData = {
39
+ formData: filteredData,
40
+ timestamp: Date.now(),
41
+ tabId
42
+ };
43
+
44
+ dashStorage.setItem(finalStorageKey, JSON.stringify(persistData));
45
+ console.log('📦 Form data persisted:', finalStorageKey);
46
+ } catch (error) {
47
+ console.error('Failed to persist form data:', error);
48
+ }
49
+ }, [persistState, finalStorageKey, excludeFields, tabId]);
50
+
51
+ // Load form data from localStorage
52
+ const loadFormData = useCallback(() => {
53
+ if (!persistState) return null;
54
+
55
+ try {
56
+ const stored = dashStorage.getItem(finalStorageKey);
57
+ if (!stored) return null;
58
+
59
+ const persistData = JSON.parse(stored);
60
+
61
+ // Check if data is not too old (optional: 24 hours)
62
+ const maxAge = 24 * 60 * 60 * 1000; // 24 hours
63
+ if (Date.now() - persistData.timestamp > maxAge) {
64
+ dashStorage.removeItem(finalStorageKey);
65
+ return null;
66
+ }
67
+
68
+ console.log('📦 Form data loaded from storage:', finalStorageKey);
69
+ return persistData.formData;
70
+ } catch (error) {
71
+ console.error('Failed to load form data:', error);
72
+ return null;
73
+ }
74
+ }, [persistState, finalStorageKey]);
75
+
76
+ // Restore form data
77
+ const restoreFormData = useCallback(() => {
78
+ const savedData = loadFormData();
79
+ if (!savedData) return false;
80
+
81
+ try {
82
+ // Restore each field
83
+ Object.keys(savedData).forEach(fieldName => {
84
+ setValue(fieldName, savedData[fieldName], {
85
+ shouldDirty: true,
86
+ shouldTouch: true,
87
+ shouldValidate: false
88
+ });
89
+ });
90
+
91
+ console.log('✅ Form data restored successfully');
92
+ return true;
93
+ } catch (error) {
94
+ console.error('Failed to restore form data:', error);
95
+ return false;
96
+ }
97
+ }, [loadFormData, setValue]);
98
+
99
+ // Clear persisted data
100
+ const clearPersistedData = useCallback(() => {
101
+ try {
102
+ dashStorage.removeItem(finalStorageKey);
103
+ console.log('🗑️ Persisted form data cleared:', finalStorageKey);
104
+ } catch (error) {
105
+ console.error('Failed to clear persisted data:', error);
106
+ }
107
+ }, [finalStorageKey]);
108
+
109
+ // Watch for form changes and save with debouncing
110
+ useEffect(() => {
111
+ if (!persistState) return;
112
+
113
+ const subscription = watch((data) => {
114
+ // Clear existing timeout
115
+ if (debounceRef.current) {
116
+ clearTimeout(debounceRef.current);
117
+ }
118
+
119
+ // Set new timeout
120
+ debounceRef.current = setTimeout(() => {
121
+ saveFormData(data);
122
+ }, debounceMs);
123
+ });
124
+
125
+ return () => {
126
+ subscription.unsubscribe();
127
+ if (debounceRef.current) {
128
+ clearTimeout(debounceRef.current);
129
+ }
130
+ };
131
+ }, [watch, persistState, saveFormData, debounceMs]);
132
+
133
+ // Cleanup on unmount
134
+ useEffect(() => {
135
+ return () => {
136
+ if (debounceRef.current) {
137
+ clearTimeout(debounceRef.current);
138
+ }
139
+ };
140
+ }, []);
141
+
142
+ return {
143
+ restoreFormData,
144
+ clearPersistedData,
145
+ loadFormData,
146
+ saveFormData: () => saveFormData(getValues())
147
+ };
148
+ };
149
+
150
+ export default useFormPersistence;
@@ -0,0 +1,43 @@
1
+ import { random } from 'lodash';
2
+ import React, { useState } from 'react';
3
+ import { dashStorage } from 'dash-utils';
4
+ const useGlobalErrorMediator = () => {
5
+ const [error, setError] = React.useState<any>(null);
6
+ const errorChangeHandler = React.useCallback((e) => {
7
+ if (dashStorage.getItem('lastGlobalError') === JSON.stringify(e.data)) {
8
+ return;
9
+ }
10
+
11
+ setError(e.data);
12
+ dashStorage.setItem('lastGlobalError', JSON.stringify(e.data));
13
+
14
+ setTimeout(() => {
15
+ dashStorage.setItem('lastGlobalError', JSON.stringify({}));
16
+ }, 1000);
17
+ }, []);
18
+
19
+ React.useEffect(() => {
20
+ dashStorage.setItem('lastGlobalError', JSON.stringify({}));
21
+
22
+ window.addEventListener('GlobalError', errorChangeHandler);
23
+ return () => {
24
+ dashStorage.setItem('lastGlobalError', JSON.stringify({}));
25
+ window.removeEventListener('GlobalError', errorChangeHandler);
26
+ };
27
+ }, []);
28
+
29
+ const _update = React.useCallback(
30
+ (newError) => {
31
+ window.dispatchEvent(new MessageEvent('GlobalError', { data: {error:newError} }));
32
+ },
33
+ [error],
34
+ );
35
+
36
+ const sendError = (error: any) => {
37
+ _update(error);
38
+ };
39
+
40
+ return { error, sendError };
41
+ };
42
+
43
+ export default useGlobalErrorMediator;
@@ -0,0 +1,21 @@
1
+ import React, { useState } from 'react';
2
+ import { useDispatch, useSelector } from 'react-redux';
3
+
4
+ const useGlobalLoaderMgr = () => {
5
+ const useLoader = useState<boolean>(false);
6
+ React.useEffect(() => {
7
+
8
+ window.addEventListener('dash-global-loader', (e: any) => {
9
+
10
+ return useLoader[1](e.data)
11
+ });
12
+ return () => {
13
+ window.removeEventListener('dash-global-loader', (e: any) =>
14
+ useLoader[1](e.data),
15
+ );
16
+ };
17
+ }, []);
18
+ return useLoader;
19
+ };
20
+
21
+ export default useGlobalLoaderMgr;
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+
3
+ const useHash = () => {
4
+ const [hash, setHash] = React.useState(() => window.location.hash);
5
+
6
+ const hashChangeHandler = React.useCallback(() => {
7
+ setHash(window.location.hash);
8
+ }, []);
9
+
10
+ React.useEffect(() => {
11
+ window.addEventListener('hashchange', hashChangeHandler);
12
+ return () => {
13
+ window.removeEventListener('hashchange', hashChangeHandler);
14
+ };
15
+ }, []);
16
+
17
+ const updateHash = React.useCallback(
18
+ (newHash) => {
19
+ /*if (newHash !== hash)*/ window.location.hash = newHash;
20
+ },
21
+ [hash],
22
+ );
23
+
24
+ return [hash, updateHash];
25
+ };
26
+
27
+ export default useHash;
@@ -0,0 +1,196 @@
1
+ import { useCallback, useEffect, useState, useMemo } from 'react';
2
+ import { dashStorage } from 'dash-utils';
3
+ const isBrowser = typeof window !== 'undefined';
4
+
5
+ const isLocalStorageAvailable = () => {
6
+ if (!isBrowser) {
7
+ return false;
8
+ }
9
+ const test = `test-${Date.now()}`;
10
+ try {
11
+ dashStorage.setItem(test, test);
12
+ dashStorage.removeItem(test);
13
+ return true;
14
+ } catch (e) {
15
+ return false;
16
+ }
17
+ };
18
+
19
+ const useLocalStorage = (key, initialValue = '') => {
20
+ const available = isLocalStorageAvailable();
21
+ const getValueFromLocalStorage = useCallback(() => {
22
+ try {
23
+ if (!available) {
24
+ return initialValue;
25
+ }
26
+ const item = dashStorage.getItem(key);
27
+ return item ? JSON.parse(item) : initialValue;
28
+ } catch (error) {
29
+ return initialValue;
30
+ }
31
+ }, [available, initialValue, key]);
32
+
33
+ const _initialValue = getValueFromLocalStorage();
34
+
35
+ const [storedValue, setStoredValue] = useState(_initialValue);
36
+
37
+ useEffect(() => {
38
+ if (available) {
39
+ const value = getValueFromLocalStorage();
40
+ // This should not be necessary, though wwhen local storage available, get the value from localstorage and set to state.
41
+ setStoredValue(value);
42
+ }
43
+ }, [available]);
44
+
45
+ // Listen to localStorage change to apply it
46
+ const changeHandler = useCallback(
47
+ (e) => {
48
+
49
+ const { key: changeKey, newValue } = e;
50
+ if (key === changeKey) {
51
+
52
+ setStoredValue(JSON.parse(newValue));
53
+ }
54
+ },
55
+ [key],
56
+ );
57
+
58
+ // Listen changes
59
+ useEffect(() => {
60
+ if (available) {
61
+ window.addEventListener('storage', changeHandler);
62
+ return () => {
63
+ window.removeEventListener('storage', changeHandler);
64
+ };
65
+ }
66
+ }, [available]); // eslint-disable-line react-hooks/exhaustive-deps
67
+
68
+ const setValue = (value) => {
69
+ if (!available) {
70
+ return false;
71
+ }
72
+
73
+ const valueToStore =
74
+ value instanceof Function ? value(storedValue) : value;
75
+ //if (valueToStore !== storedValue) {
76
+
77
+ dashStorage.setItem(key, JSON.stringify(valueToStore));
78
+
79
+ setStoredValue(valueToStore);
80
+ //}
81
+ };
82
+ // Build the output
83
+ /*return useMemo(() => {
84
+ const _storedValue = getValueFromLocalStorage();
85
+ return [storedValue, setValue];
86
+ }, [storedValue, key]);*/
87
+ return [storedValue, setValue];
88
+ };
89
+
90
+ export default useLocalStorage;
91
+
92
+
93
+
94
+ /*
95
+ import { useCallback, useEffect, useState } from 'react';
96
+
97
+ function useLocalStorage<T = any>(
98
+ key: string,
99
+ initialValue?: T
100
+ ): [T, (value: T | ((val: T) => T)) => void, () => void] {
101
+ // Check if we're running in a browser environment
102
+ const isBrowser = typeof window !== 'undefined';
103
+
104
+ // Function to safely parse JSON from localStorage
105
+ const getStoredValue = useCallback((): T => {
106
+ if (!isBrowser) {
107
+ return initialValue as T;
108
+ }
109
+
110
+ try {
111
+ const item = dashStorage.getItem(key);
112
+
113
+ // Return parsed JSON or initialValue if no item exists
114
+ if (!item) {
115
+ return initialValue as T;
116
+ }
117
+
118
+ try {
119
+ return JSON.parse(item);
120
+ } catch (parseError) {
121
+ console.error(`Error parsing localStorage key "${key}":`, parseError);
122
+ return initialValue as T;
123
+ }
124
+ } catch (error) {
125
+ console.error(`Error reading localStorage key "${key}":`, error);
126
+ return initialValue as T;
127
+ }
128
+ }, [key, initialValue, isBrowser]);
129
+
130
+ // State to store our value
131
+ const [storedValue, setStoredValue] = useState<T>(getStoredValue());
132
+
133
+ // Function to update localStorage and state
134
+ const setValue = useCallback((value: T | ((val: T) => T)) => {
135
+ if (!isBrowser) {
136
+ console.warn(`Cannot set localStorage key "${key}" - not in browser environment`);
137
+ return;
138
+ }
139
+
140
+ try {
141
+ // Allow value to be a function for setState-like updates
142
+ const valueToStore = value instanceof Function ? value(storedValue) : value;
143
+
144
+ // Save to state
145
+ setStoredValue(valueToStore);
146
+
147
+ // Save to localStorage
148
+ dashStorage.setItem(key, JSON.stringify(valueToStore));
149
+ } catch (error) {
150
+ console.error(`Error setting localStorage key "${key}":`, error);
151
+ }
152
+ }, [key, storedValue, isBrowser]);
153
+
154
+ // Function to remove the item from localStorage
155
+ const removeValue = useCallback(() => {
156
+ if (!isBrowser) {
157
+ return;
158
+ }
159
+
160
+ try {
161
+ dashStorage.removeItem(key);
162
+ setStoredValue(initialValue as T);
163
+ } catch (error) {
164
+ console.error(`Error removing localStorage key "${key}":`, error);
165
+ }
166
+ }, [key, initialValue, isBrowser]);
167
+
168
+ // Listen for changes to this localStorage key in other tabs/windows
169
+ useEffect(() => {
170
+ if (!isBrowser) {
171
+ return;
172
+ }
173
+
174
+ const handleStorageChange = (event: StorageEvent) => {
175
+ if (event.key === key && event.newValue !== JSON.stringify(storedValue)) {
176
+ try {
177
+ const newValue = event.newValue ? JSON.parse(event.newValue) : initialValue;
178
+ setStoredValue(newValue as T);
179
+ } catch (error) {
180
+ console.error(`Error parsing storage event value for key "${key}":`, error);
181
+ }
182
+ }
183
+ };
184
+
185
+ window.addEventListener('storage', handleStorageChange);
186
+
187
+ return () => {
188
+ window.removeEventListener('storage', handleStorageChange);
189
+ };
190
+ }, [key, initialValue, storedValue, isBrowser]);
191
+
192
+ return [storedValue, setValue, removeValue];
193
+ }
194
+
195
+ export default useLocalStorage;
196
+ */
@@ -0,0 +1,62 @@
1
+ import { useSelector, useDispatch } from 'react-redux';
2
+ import { useMemo, useCallback } from 'react';
3
+ import Polyglot from 'node-polyglot';
4
+ import { DASH_REDUX_ACTIONS, IDASHAppState } from 'dash-admin-state';
5
+
6
+
7
+ /**
8
+ * Hook to get available locales from Redux settings
9
+ */
10
+ export const useLocales = ({ locales }: { locales?: { locale: string; name: string }[] } = {}) => {
11
+ const availableLocales = useSelector((state: IDASHAppState<any,any,any>) => state.settings?.availableLocales);
12
+
13
+ return useMemo(() => {
14
+ if (locales && locales.length > 0) {
15
+ return locales;
16
+ }
17
+ return availableLocales || [
18
+ { locale: 'es', name: 'Español', languageId: 'spanish', icon: 'es' },
19
+ { locale: 'en', name: 'English', languageId: 'english', icon: 'en' },
20
+ ];
21
+ }, [locales, availableLocales]);
22
+ };
23
+
24
+ /**
25
+ * Hook to get and set current locale using Redux
26
+ * Returns [currentLocale, setLocaleFunction]
27
+ */
28
+ export const useLocaleState = (): [string, (locale: string) => void] => {
29
+ const dispatch = useDispatch();
30
+ const currentLocale = useSelector((state: IDASHAppState<any,any,any>) => state.settings?.locale || 'es');
31
+
32
+ const setLocale = useCallback((newLocale: string) => {
33
+ // Update Redux state (switchLanguage returns a thunk, so we need to cast dispatch)
34
+ (dispatch as any)(DASH_REDUX_ACTIONS.switchLanguage(newLocale));
35
+
36
+ // Persist to localStorage
37
+ localStorage.setItem('dash-user-locale', newLocale);
38
+ }, [dispatch]);
39
+
40
+ return [currentLocale, setLocale];
41
+ };
42
+
43
+ /**
44
+ * Hook to get a translation function (similar to useTranslate from react-admin)
45
+ */
46
+ export const useTranslate = () => {
47
+ const locale = useSelector((state: IDASHAppState<any,any,any>) => state.settings?.locale || 'es');
48
+ const translations = useSelector((state: IDASHAppState<any,any,any>) => state.settings?.translations || {});
49
+
50
+ return useMemo(() => {
51
+ const messages = translations[locale] || translations['es'];
52
+ const polyglot = new Polyglot({
53
+ phrases: messages,
54
+ locale,
55
+ allowMissing: true,
56
+ });
57
+
58
+ return (key: string, options?: any) => {
59
+ return polyglot.t(key, options);
60
+ };
61
+ }, [locale, translations]);
62
+ };
@@ -0,0 +1,9 @@
1
+ import { useEffect, useRef } from 'react';
2
+ const usePrevious = (value) => {
3
+ const ref = useRef(undefined);
4
+ useEffect(() => {
5
+ ref.current = value;
6
+ });
7
+ return ref.current;
8
+ };
9
+ export default usePrevious;
@@ -0,0 +1,37 @@
1
+
2
+ import React, { useState } from 'react';
3
+
4
+ const usePrintSelected = () => {
5
+ const printSelectedUseState = useState<{
6
+ selectedIds: number[];
7
+ filterValues: any;
8
+ }>(null);
9
+
10
+ const sendPrintSelectedEvent = (selectedIds: number[], filterValues: any) => {
11
+ window.dispatchEvent(
12
+ new MessageEvent('printSelected', {
13
+ data: {
14
+ value: { selectedIds: selectedIds, filterValues: filterValues },
15
+ },
16
+ }),
17
+ );
18
+ };
19
+
20
+ const eventHook = (e: any) => {
21
+ printSelectedUseState[1](e.data.value);
22
+ };
23
+
24
+ React.useEffect(() => {
25
+ window.addEventListener('printSelected', eventHook);
26
+ return () => {
27
+ window.removeEventListener('printSelected', eventHook);
28
+ };
29
+ }, []);
30
+
31
+ return {
32
+ printSelectedUseState: printSelectedUseState,
33
+ sendPrintSelectedEvent: sendPrintSelectedEvent,
34
+ };
35
+ };
36
+
37
+ export default usePrintSelected;
@@ -0,0 +1,33 @@
1
+ import { random } from 'lodash';
2
+ import React from 'react';
3
+
4
+ const useVirtualHash = () => {
5
+ const [hash, setHash] = React.useState<string>(() => window.location.hash);
6
+
7
+ const hashChangeHandler = React.useCallback((e) => {
8
+ setHash(e.data);
9
+ }, []);
10
+
11
+ React.useEffect(() => {
12
+ window.addEventListener('virtualhash', hashChangeHandler);
13
+ return () => {
14
+ window.removeEventListener('virtualhash', hashChangeHandler);
15
+ };
16
+ }, []);
17
+
18
+ const _update = React.useCallback(
19
+ (newHash) => {
20
+ history.replaceState(null, null, `#${newHash}`);
21
+ window.dispatchEvent(new MessageEvent('virtualhash', { data: `#${newHash}` }));
22
+ },
23
+ [hash],
24
+ );
25
+
26
+ const setVirtualHash = (hash: string) => {
27
+ _update(hash);
28
+ };
29
+
30
+ return { hash, setVirtualHash };
31
+ };
32
+
33
+ export default useVirtualHash;
@@ -0,0 +1,36 @@
1
+ import { useState, useEffect } from 'react';
2
+
3
+ interface IWindowSize {
4
+ width: number | undefined;
5
+ height: number | undefined;
6
+ }
7
+
8
+ const useWindowSize = (): IWindowSize => {
9
+ // Initialize state with undefined width/height so server and client renders match
10
+ // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/
11
+ const [windowSize, setWindowSize] = useState<IWindowSize>({
12
+ width: undefined,
13
+ height: undefined,
14
+ });
15
+
16
+ useEffect(() => {
17
+ // Handler to call on window resize
18
+ function handleResize() {
19
+ // Set window width/height to state
20
+ setWindowSize({
21
+ width: window.innerWidth,
22
+ height: window.innerHeight,
23
+ });
24
+ }
25
+ // Add event listener
26
+ window.addEventListener('resize', handleResize);
27
+ // Call handler right away so state gets updated with initial window size
28
+ handleResize();
29
+ // Remove event listener on cleanup
30
+ return () => window.removeEventListener('resize', handleResize);
31
+ }, []); // Empty array ensures that effect is only run on mount
32
+
33
+ return windowSize;
34
+ };
35
+
36
+ export default useWindowSize;