@dashadmin/dash-admin 1.3.25 → 1.3.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (511) hide show
  1. package/dist/AppAsyncWrapper.js +30 -1
  2. package/dist/AppWrapper.js +35 -1
  3. package/dist/DASHAdmin.js +312 -1
  4. package/dist/RoutingWrapper.js +76 -1
  5. package/dist/classes/DASHStorageClass.js +15 -1
  6. package/dist/components/Input/RichTextField.js +26 -1
  7. package/dist/components/Redirect.js +56 -1
  8. package/dist/components/avatar/Avatar.js +72 -1
  9. package/dist/components/avatar/SingleImageUploader.js +46 -1
  10. package/dist/components/currency/Format.js +71 -1
  11. package/dist/components/custom/Redirect.js +20 -1
  12. package/dist/components/error/Error.js +161 -1
  13. package/dist/components/geocoding/GeocodingField.js +133 -1
  14. package/dist/components/i18n/BridgedLocalesMenuButton.js +126 -1
  15. package/dist/components/i18n/LangSwitcher.js +196 -1
  16. package/dist/components/loader/GlobalLoader.js +71 -1
  17. package/dist/components/logs/LogFile.js +99 -1
  18. package/dist/components/logs/LogFileById.js +75 -1
  19. package/dist/components/logs/LogViewer.js +33 -1
  20. package/dist/components/menu/AppMenu.js +11 -1
  21. package/dist/components/menu/CustomMenuItemLink.js +77 -1
  22. package/dist/components/menu/DarkToggleMode.js +47 -1
  23. package/dist/components/menu/LanguageToggleMode.js +99 -1
  24. package/dist/components/misc/CustomImageInput.js +54 -1
  25. package/dist/components/misc/DASHGlobalErrorHandler.js +159 -1
  26. package/dist/components/misc/DarkModeSwitcher.js +40 -1
  27. package/dist/components/misc/LanguageSwitcher.js +193 -1
  28. package/dist/components/misc/MUIHtmlToolTip.js +50 -1
  29. package/dist/components/misc/MuiSimpleJsonTable.js +178 -1
  30. package/dist/components/misc/MultiLevelTable.js +124 -1
  31. package/dist/components/misc/NoResults.js +17 -1
  32. package/dist/components/misc/PDFViewer.js +86 -1
  33. package/dist/components/navigation/Breadcrumbs.js +178 -1
  34. package/dist/components/navigation/BreadcrumbsManager.js +194 -1
  35. package/dist/components/navigation/index.js +8 -1
  36. package/dist/components/panel/Error.js +161 -1
  37. package/dist/components/permission/AvailablePermissionsContext.js +157 -1
  38. package/dist/components/permission/PermissionsSelector.js +719 -1
  39. package/dist/components/permission/PermissionsSelectorList.js +400 -1
  40. package/dist/components/racustombuttons/CustomRAButton.js +94 -1
  41. package/dist/components/racustombuttons/QuickButton.js +109 -1
  42. package/dist/components/racustombuttons/QuickEditButton.js +114 -1
  43. package/dist/components/racustombuttons/QuickIconButton.js +119 -1
  44. package/dist/components/scrollbar/Scrollbar.js +52 -1
  45. package/dist/components/selects/MultiSelect.js +42 -1
  46. package/dist/components/selects/RASearchableSelect.js +207 -1
  47. package/dist/components/selects/RASearchableSelectChips.js +225 -1
  48. package/dist/components/selects/SearchableSelect.js +128 -1
  49. package/dist/components/subscription/BillingCycleSelectInput.js +50 -1
  50. package/dist/components/subscription/PlanAddonsSettings.js +396 -1
  51. package/dist/components/subscription/PlanAuditLog.js +345 -1
  52. package/dist/components/subscription/PlanFeaturesSettings.js +151 -1
  53. package/dist/components/subscription/PlanLimitsSettings.js +168 -1
  54. package/dist/components/subscription/PlanMetadataSettings.js +219 -1
  55. package/dist/components/subscription/PlanPricesSettings.js +222 -1
  56. package/dist/components/subscription/index.js +12 -1
  57. package/dist/components/svgelements/SvgLoading.js +330 -1
  58. package/dist/components/svgelements/SvgLogo.js +70 -1
  59. package/dist/components/svgelements/SvgLogoMin.js +76 -1
  60. package/dist/components/svgelements/SvgShipping.js +1001 -1
  61. package/dist/components/tenant/TenantAttributes.js +107 -1
  62. package/dist/components/tenant/TenantAttributesContext.js +150 -1
  63. package/dist/components/tenant/TenantSelector.js +160 -1
  64. package/dist/components/tenant/TenantSettings.js +107 -1
  65. package/dist/components/tenant/TenantSettingsContext.js +152 -1
  66. package/dist/components/tenant/TenantTheme.js +112 -1
  67. package/dist/components/user/AvatarComponent.js +270 -1
  68. package/dist/components/user/TenantAvatarComponent.js +83 -1
  69. package/dist/components/user/UserPreferences.js +422 -1
  70. package/dist/config/ACTIONS.js +25 -1
  71. package/dist/config/ConstantsService.js +25 -1
  72. package/dist/config/DASHAdminSystemConstants.js +137 -1
  73. package/dist/config/PARSERS.js +9 -1
  74. package/dist/contexts/DashQueryClientContext.js +78 -1
  75. package/dist/contexts/DashResourceContext.js +21 -1
  76. package/dist/contexts/I18nBridgeContext.js +123 -1
  77. package/dist/contexts/I18nBridgeSetter.js +29 -1
  78. package/dist/contexts/I18nReduxSync.js +16 -1
  79. package/dist/contexts/SubscriptionPlanFormatsProvider.js +175 -1
  80. package/dist/contexts/SystemRequestsCache.js +194 -1
  81. package/dist/contexts/auth/AuthContext.js +396 -1
  82. package/dist/contexts/auth/AuthContextLocalStorage.js +118 -1
  83. package/dist/contexts/auth/DASHAuthenticationService.js +679 -1
  84. package/dist/contexts/auth/WindowContext.js +10 -1
  85. package/dist/contexts/auth/index.js +2 -1
  86. package/dist/contexts/com/FCMContext.js +378 -1
  87. package/dist/contexts/com/LaravelEchoContext.js +45 -1
  88. package/dist/contexts/com/LaravelEchoMgr.js +121 -1
  89. package/dist/contexts/com/components/DefaultNotificationComponent.js +31 -1
  90. package/dist/contexts/com/components/NotificationAttributesTable.js +28 -1
  91. package/dist/contexts/com/components/NotificationRenderer.js +36 -1
  92. package/dist/contexts/com/components/NotificationsWidget.js +142 -1
  93. package/dist/contexts/com/components/notificationFormats.js +15 -1
  94. package/dist/contexts/com/useLaravelEcho.js +340 -1
  95. package/dist/contexts/dictionary/DictionaryContext.js +43 -1
  96. package/dist/default-theme/DASHAppProviders.js +86 -1
  97. package/dist/default-theme/DashThemeContext.js +146 -1
  98. package/dist/default-theme/DashThemeHelperProvider.js +54 -1
  99. package/dist/default-theme/DomainAppLayout.js +126 -1
  100. package/dist/default-theme/DomainHeader.js +114 -1
  101. package/dist/default-theme/DomainTheme.js +60 -1
  102. package/dist/default-theme/FullLayoutMarkup.js +55 -1
  103. package/dist/default-theme/StaticLayout.js +36 -1
  104. package/dist/default-theme/index.js +19 -1
  105. package/dist/default-theme/menu/AppMaterialMenu.js +364 -1
  106. package/dist/default-theme/menu/AppMenuComponents/SubmenuPortal.js +33 -1
  107. package/dist/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItem.js +239 -1
  108. package/dist/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItems.js +22 -1
  109. package/dist/default-theme/menu/AppMenuComponents/expanded/CollapsableSidebarMenu.js +209 -1
  110. package/dist/default-theme/menu/AppMenuComponents/expanded/SidebarItem.js +71 -1
  111. package/dist/default-theme/menu/AppMenuComponents/getItem.js +7 -1
  112. package/dist/default-theme/menu/AppMenuComponents/submenuConstants.js +78 -1
  113. package/dist/default-theme/menu/AppSidebarMaterial.js +232 -1
  114. package/dist/default-theme/menu/SidebarActions.js +75 -1
  115. package/dist/default-theme/updateDomCssVariables.js +134 -1
  116. package/dist/helpers/checkRole.js +14 -1
  117. package/dist/helpers/parseAxiosError.js +28 -2
  118. package/dist/hooks/audio/useAudio.js +24 -1
  119. package/dist/hooks/axios.js +52 -1
  120. package/dist/hooks/data/useDashboardStats.js +88 -1
  121. package/dist/hooks/data/usePackageByClientsStats.js +51 -1
  122. package/dist/hooks/data/usePackageByCommunesStats.js +51 -1
  123. package/dist/hooks/data/usePackageStats.js +88 -1
  124. package/dist/hooks/data/usePackageWithdrawDetails.js +69 -1
  125. package/dist/hooks/data/useStats.js +94 -1
  126. package/dist/hooks/isCurrentPath.js +18 -1
  127. package/dist/hooks/notifications/WSMessagesManager.js +128 -1
  128. package/dist/hooks/notifications/WSPusherManager.js +70 -1
  129. package/dist/hooks/useBreadcrumbs.js +208 -1
  130. package/dist/hooks/useClickOutside.js +18 -1
  131. package/dist/hooks/useFormPersistance.js +129 -1
  132. package/dist/hooks/useGlobalErrorMediator.js +37 -1
  133. package/dist/hooks/useGlobalLoaderMgr.js +20 -1
  134. package/dist/hooks/useHash.js +24 -1
  135. package/dist/hooks/useLocalStorage.js +68 -1
  136. package/dist/hooks/usePolyglotTranslation.js +57 -1
  137. package/dist/hooks/usePrevious.js +12 -1
  138. package/dist/hooks/usePrintSelected.js +30 -1
  139. package/dist/hooks/useVirtualHash.js +28 -1
  140. package/dist/hooks/window/useWindowSize.js +23 -1
  141. package/dist/index.js +120 -97
  142. package/dist/interfaces.js +6 -1
  143. package/dist/layout/AppLayout.js +36 -1
  144. package/dist/layout/ApplicationLayout.js +110 -1
  145. package/dist/layout/MotionWrapper.js +182 -1
  146. package/dist/layout/MotionWrapper.original.js +182 -1
  147. package/dist/layout/ResourceMenu.js +87 -1
  148. package/dist/layout/ResoureLayout.js +47 -1
  149. package/dist/layout/TransitionWrapper.js +83 -2
  150. package/dist/pages/ChangePassword.js +198 -1
  151. package/dist/pages/DASHLanding.js +9 -1
  152. package/dist/pages/DASHLightWeightLogin.js +495 -1
  153. package/dist/pages/DASHSimpleLogin.js +231 -1
  154. package/dist/pages/Login.js +113 -1
  155. package/dist/pages/Profile.js +347 -1
  156. package/dist/pages/RecoverPassword.js +175 -1
  157. package/dist/pages/SingleImageUploader.js +40 -1
  158. package/dist/pages/VerifyAccount.js +129 -1
  159. package/dist/providers/authProvider.js +186 -1
  160. package/dist/providers/dataProvider.js +468 -1
  161. package/dist/providers/i18n/en.js +514 -1
  162. package/dist/providers/i18n/es.js +520 -1
  163. package/dist/providers/i18n/languages.js +8 -1
  164. package/dist/providers/i18nProvider.js +23 -1
  165. package/dist/react-admin-dash/RADashComponent.js +210 -1
  166. package/dist/react-admin-dash/Resource.js +62 -1
  167. package/dist/resources/Brand/BrandResource.js +106 -1
  168. package/dist/resources/DASHResourceLoader.js +104 -1
  169. package/dist/resources/Log/LogResource.js +59 -1
  170. package/dist/resources/Tenant/ImpersonateTenantResource.js +113 -1
  171. package/dist/resources/Trash/TrashTemplate.js +195 -1
  172. package/dist/resources.js +259 -1
  173. package/dist/schemas/log.js +45 -1
  174. package/dist/schemas/notification.js +39 -1
  175. package/dist/schemas/permissions.js +44 -1
  176. package/dist/schemas/roles.js +48 -1
  177. package/dist/schemas/rolesDataGrid.js +48 -1
  178. package/dist/schemas/subscription/components/SubscriptionActions.js +172 -1
  179. package/dist/schemas/subscription/components/SubscriptionPaymentHistory.js +101 -1
  180. package/dist/schemas/subscription/components/SubscriptionPlanFeatures.js +115 -1
  181. package/dist/schemas/subscription/components/SubscriptionPlanPreview.js +92 -1
  182. package/dist/schemas/subscription/components/SubscriptionPlanStats.js +181 -1
  183. package/dist/schemas/subscription/components/SubscriptionStatusIndicator.js +70 -1
  184. package/dist/schemas/subscription/subscriptionPlanSchema.js +184 -1
  185. package/dist/schemas/subscription/subscriptionSchema.js +147 -1
  186. package/dist/schemas/subscriptionPlan.js +397 -1
  187. package/dist/schemas/tenant.js +122 -1
  188. package/dist/schemas/tenantUser.js +94 -1
  189. package/dist/schemas/tenant_superadmin.js +118 -1
  190. package/dist/schemas/user.js +26 -1
  191. package/dist/systemResources.js +1039 -1
  192. package/dist/systemResources.old.js +668 -1
  193. package/dist/templates/ResourceTemplate.js +196 -1
  194. package/dist/templates/ResourceTemplateCreate.js +144 -1
  195. package/dist/templates/ResourceTemplateEdit.js +147 -1
  196. package/dist/templates/ResourceTemplateFull.js +518 -1
  197. package/dist/templates/ResourceTemplateList.js +295 -1
  198. package/dist/templates/ResourceTemplateShow.js +45 -1
  199. package/dist/templates/TrashTemplate.js +175 -1
  200. package/dist/tenantResources.js +206 -1
  201. package/dist/test_portal_bubbles.js +37 -1
  202. package/dist/theme/AppHeader.js +60 -1
  203. package/dist/theme/AppLayoutSetting.js +34 -1
  204. package/dist/theme/AppLogo.js +7 -1
  205. package/dist/theme/AppSidebar.js +30 -1
  206. package/dist/theme/AppSidebarContent.js +84 -1
  207. package/dist/theme/AppSidebarLogo.js +42 -1
  208. package/dist/theme/components/PageTitle.js +61 -1
  209. package/dist/utils/cache/CacheInvalidatorContext.js +100 -1
  210. package/dist/utils/cache/CacheInvalidatorListenerComponent.js +10 -1
  211. package/dist/utils/cache/useCacheInvalidatorListener.js +17 -1
  212. package/dist/utils/convertFileToBase64.js +10 -1
  213. package/dist/utils/convertToFile.js +12 -1
  214. package/dist/utils/cookies.js +45 -1
  215. package/dist/utils/dashDefaultQueryClient.js +15 -1
  216. package/dist/utils/dataUrlToBlob.js +23 -1
  217. package/dist/utils/deepReplace.js +17 -1
  218. package/dist/utils/getProfileMenu.js +31 -1
  219. package/dist/utils/getTenantSettings.js +9 -1
  220. package/dist/utils/getType.js +10 -1
  221. package/dist/utils/getUserSettings.js +9 -1
  222. package/dist/utils/hasCode.js +14 -1
  223. package/dist/utils/index.js +19 -1
  224. package/dist/utils/injectTenantStyles.js +19 -1
  225. package/dist/utils/isComponent.js +23 -1
  226. package/dist/utils/navEvents.js +75 -1
  227. package/dist/utils/prototypes.js +5 -1
  228. package/dist/utils/regexp.js +7 -1
  229. package/dist/utils/resolveObjectPath.js +5 -1
  230. package/dist/utils/setNativeValue.js +17 -1
  231. package/dist/utils/slugify.js +7 -1
  232. package/dist/utils/validators/emailValidator.js +8 -1
  233. package/dist/utils/validators/requiredValidator.js +7 -1
  234. package/dist/utils/validators/rutValidator.js +25 -1
  235. package/dist/utils/validators.js +57 -1
  236. package/package.json +153 -69
  237. package/src/AppAsyncWrapper.tsx +42 -0
  238. package/src/AppWrapper.tsx +45 -0
  239. package/src/DASHAdmin.tsx +501 -0
  240. package/src/RoutingWrapper.tsx +139 -0
  241. package/src/classes/DASHStorageClass.tsx +8 -0
  242. package/src/components/Input/RichTextField.tsx +27 -0
  243. package/src/components/Redirect.tsx +46 -0
  244. package/src/components/avatar/Avatar.tsx +67 -0
  245. package/src/components/avatar/SingleImageUploader.tsx +53 -0
  246. package/src/components/currency/Format.tsx +77 -0
  247. package/src/components/custom/Redirect.tsx +23 -0
  248. package/src/components/error/Error.tsx +168 -0
  249. package/src/components/geocoding/GeocodingField.tsx +167 -0
  250. package/src/components/i18n/BridgedLocalesMenuButton.tsx +159 -0
  251. package/src/components/i18n/LangSwitcher.tsx +204 -0
  252. package/src/components/loader/GlobalLoader.tsx +56 -0
  253. package/src/components/logs/LogFile.tsx +88 -0
  254. package/src/components/logs/LogFileById.tsx +68 -0
  255. package/src/components/logs/LogViewer.tsx +43 -0
  256. package/src/components/menu/AppMenu.tsx +22 -0
  257. package/src/components/menu/CustomMenuItemLink.tsx +61 -0
  258. package/src/components/menu/DarkToggleMode.tsx +65 -0
  259. package/src/components/menu/LanguageToggleMode.tsx +120 -0
  260. package/src/components/misc/CustomImageInput.tsx +62 -0
  261. package/src/components/misc/DASHGlobalErrorHandler.tsx +194 -0
  262. package/src/components/misc/DarkModeSwitcher.tsx +112 -0
  263. package/src/components/misc/LanguageSwitcher.tsx +199 -0
  264. package/src/components/misc/MUIHtmlToolTip.tsx +15 -0
  265. package/src/components/misc/MuiSimpleJsonTable.tsx +279 -0
  266. package/src/components/misc/MultiLevelTable.tsx +229 -0
  267. package/src/components/misc/NoResults.tsx +25 -0
  268. package/src/components/misc/PDFViewer.tsx +85 -0
  269. package/src/components/navigation/Breadcrumbs.tsx +220 -0
  270. package/src/components/navigation/BreadcrumbsManager.tsx +310 -0
  271. package/src/components/navigation/index.tsx +5 -0
  272. package/src/components/panel/Error.tsx +168 -0
  273. package/src/components/permission/AvailablePermissionsContext.tsx +173 -0
  274. package/src/components/permission/PermissionsSelector.tsx +819 -0
  275. package/src/components/permission/PermissionsSelectorList.tsx +468 -0
  276. package/src/components/permission/tsx +0 -0
  277. package/src/components/racustombuttons/CustomRAButton.tsx +87 -0
  278. package/src/components/racustombuttons/QuickButton.tsx +117 -0
  279. package/src/components/racustombuttons/QuickEditButton.tsx +115 -0
  280. package/src/components/racustombuttons/QuickIconButton.tsx +122 -0
  281. package/src/components/scrollbar/Scrollbar.tsx +31 -0
  282. package/src/components/selects/MultiSelect.tsx +53 -0
  283. package/src/components/selects/RASearchableSelect.tsx +279 -0
  284. package/src/components/selects/RASearchableSelectChips.tsx +304 -0
  285. package/src/components/selects/SearchableSelect.tsx +135 -0
  286. package/src/components/subscription/BillingCycleSelectInput.tsx +68 -0
  287. package/src/components/subscription/PlanAddonsSettings.tsx +522 -0
  288. package/src/components/subscription/PlanAuditLog.tsx +439 -0
  289. package/src/components/subscription/PlanFeaturesSettings.tsx +223 -0
  290. package/src/components/subscription/PlanLimitsSettings.tsx +230 -0
  291. package/src/components/subscription/PlanMetadataSettings.tsx +284 -0
  292. package/src/components/subscription/PlanPricesSettings.tsx +295 -0
  293. package/src/components/subscription/index.ts +7 -0
  294. package/src/components/svgelements/SvgLoading.tsx +229 -0
  295. package/src/components/svgelements/SvgLogo.tsx +53 -0
  296. package/src/components/svgelements/SvgLogoMin.tsx +64 -0
  297. package/src/components/svgelements/SvgShipping.tsx +673 -0
  298. package/src/components/tenant/AvailablePermissionsContext.tsx +0 -0
  299. package/src/components/tenant/TenantAttributes.tsx +153 -0
  300. package/src/components/tenant/TenantAttributesContext.tsx +163 -0
  301. package/src/components/tenant/TenantSelector.tsx +139 -0
  302. package/src/components/tenant/TenantSettings.tsx +172 -0
  303. package/src/components/tenant/TenantSettingsContext.tsx +165 -0
  304. package/src/components/tenant/TenantTheme.tsx +172 -0
  305. package/src/components/user/AvatarComponent.tsx +301 -0
  306. package/src/components/user/TenantAvatarComponent.tsx +99 -0
  307. package/src/components/user/UserPreferences.tsx +642 -0
  308. package/src/config/ACTIONS.tsx +26 -0
  309. package/src/config/ConstantsService.tsx +44 -0
  310. package/src/config/DASHAdminSystemConstants.tsx +182 -0
  311. package/src/config/PARSERS.tsx +9 -0
  312. package/src/contexts/DashQueryClientContext.tsx +113 -0
  313. package/src/contexts/DashResourceContext.tsx +34 -0
  314. package/src/contexts/I18nBridgeContext.tsx +156 -0
  315. package/src/contexts/I18nBridgeSetter.tsx +39 -0
  316. package/src/contexts/I18nReduxSync.tsx +27 -0
  317. package/src/contexts/SubscriptionPlanFormatsProvider.tsx +217 -0
  318. package/src/contexts/SystemRequestsCache.tsx +215 -0
  319. package/src/contexts/auth/AuthContext.tsx +553 -0
  320. package/src/contexts/auth/AuthContextLocalStorage.tsx +140 -0
  321. package/src/contexts/auth/DASHAuthenticationService.tsx +917 -0
  322. package/src/contexts/auth/WindowContext.tsx +15 -0
  323. package/src/contexts/auth/index.tsx +3 -0
  324. package/src/contexts/com/FCMContext.tsx +415 -0
  325. package/src/contexts/com/LaravelEchoContext.tsx +41 -0
  326. package/src/contexts/com/LaravelEchoMgr.tsx +155 -0
  327. package/src/contexts/com/components/DefaultNotificationComponent.tsx +20 -0
  328. package/src/contexts/com/components/NotificationAttributesTable.tsx +54 -0
  329. package/src/contexts/com/components/NotificationRenderer.tsx +42 -0
  330. package/src/contexts/com/components/NotificationsWidget.tsx +182 -0
  331. package/src/contexts/com/components/notificationFormats.tsx +50 -0
  332. package/src/contexts/com/useLaravelEcho.tsx +432 -0
  333. package/src/contexts/dictionary/DictionaryContext.tsx +94 -0
  334. package/src/default-theme/DASHAppProviders.tsx +117 -0
  335. package/src/default-theme/DashThemeContext.tsx +218 -0
  336. package/src/default-theme/DashThemeHelperProvider.tsx +98 -0
  337. package/src/default-theme/DomainAppLayout.tsx +166 -0
  338. package/src/default-theme/DomainHeader.tsx +162 -0
  339. package/src/default-theme/DomainTheme.tsx +59 -0
  340. package/src/default-theme/FullLayoutMarkup.tsx +250 -0
  341. package/src/default-theme/StaticLayout.tsx +47 -0
  342. package/src/default-theme/index.tsx +11 -0
  343. package/src/default-theme/menu/AppMaterialMenu.tsx +545 -0
  344. package/src/default-theme/menu/AppMenuComponents/SubmenuPortal.tsx +56 -0
  345. package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItem.tsx +254 -0
  346. package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItems.tsx +31 -0
  347. package/src/default-theme/menu/AppMenuComponents/expanded/CollapsableSidebarMenu.tsx +276 -0
  348. package/src/default-theme/menu/AppMenuComponents/expanded/SidebarItem.tsx +91 -0
  349. package/src/default-theme/menu/AppMenuComponents/getItem.tsx +17 -0
  350. package/src/default-theme/menu/AppMenuComponents/interfaces.tsx +41 -0
  351. package/src/default-theme/menu/AppMenuComponents/submenuConstants.ts +85 -0
  352. package/src/default-theme/menu/AppSidebarMaterial.tsx +339 -0
  353. package/src/default-theme/menu/SidebarActions.tsx +84 -0
  354. package/src/default-theme/updateDomCssVariables.tsx +176 -0
  355. package/src/helpers/checkRole.tsx +66 -0
  356. package/src/helpers/parseAxiosError.tsx +41 -0
  357. package/src/hooks/audio/useAudio.tsx +39 -0
  358. package/src/hooks/axios.tsx +62 -0
  359. package/src/hooks/data/useDashboardStats.tsx +65 -0
  360. package/src/hooks/data/usePackageByClientsStats.tsx +44 -0
  361. package/src/hooks/data/usePackageByCommunesStats.tsx +44 -0
  362. package/src/hooks/data/usePackageStats.tsx +69 -0
  363. package/src/hooks/data/usePackageWithdrawDetails.tsx +61 -0
  364. package/src/hooks/data/useStats.tsx +86 -0
  365. package/src/hooks/isCurrentPath.tsx +22 -0
  366. package/src/hooks/notifications/WSMessagesManager.tsx +152 -0
  367. package/src/hooks/notifications/WSPusherManager.tsx +92 -0
  368. package/src/hooks/useBreadcrumbs.tsx +329 -0
  369. package/src/hooks/useClickOutside.tsx +17 -0
  370. package/src/hooks/useFormPersistance.tsx +150 -0
  371. package/src/hooks/useGlobalErrorMediator.tsx +43 -0
  372. package/src/hooks/useGlobalLoaderMgr.tsx +21 -0
  373. package/src/hooks/useHash.tsx +27 -0
  374. package/src/hooks/useLocalStorage.tsx +196 -0
  375. package/src/hooks/usePolyglotTranslation.tsx +62 -0
  376. package/src/hooks/usePrevious.tsx +9 -0
  377. package/src/hooks/usePrintSelected.tsx +37 -0
  378. package/src/hooks/useVirtualHash.tsx +33 -0
  379. package/src/hooks/window/useWindowSize.tsx +36 -0
  380. package/src/index.tsx +110 -0
  381. package/src/interfaces/IAppResourceConfig.tsx +20 -0
  382. package/src/interfaces/Log.tsx +16 -0
  383. package/src/interfaces/Tenant.tsx +25 -0
  384. package/src/interfaces/communication/IActions.tsx +5 -0
  385. package/src/interfaces/communication/INotification.tsx +21 -0
  386. package/src/interfaces/communication/IPayload.tsx +3 -0
  387. package/src/interfaces/communication/IRequestAction.tsx +10 -0
  388. package/src/interfaces/communication/IRequestPayload.tsx +7 -0
  389. package/src/interfaces/communication/IResponseAction.tsx +7 -0
  390. package/src/interfaces/misc/IAny.tsx +3 -0
  391. package/src/interfaces/misc/IFlashMessage.tsx +10 -0
  392. package/src/interfaces/navigation/IAppMenu.ts +14 -0
  393. package/src/interfaces/navigation/ICollapsableSidebarMenu.ts +12 -0
  394. package/src/interfaces/navigation/IMenuItem.ts +16 -0
  395. package/src/interfaces/notifications/IModel.tsx +6 -0
  396. package/src/interfaces/notifications/IModelField.tsx +8 -0
  397. package/src/interfaces/notifications/IUserNotification.tsx +12 -0
  398. package/src/interfaces/notifications/IUserNotificationData.tsx +13 -0
  399. package/src/interfaces/notifications/IUserNotificationPayload.tsx +8 -0
  400. package/src/interfaces/user/IGetAuth.tsx +92 -0
  401. package/src/interfaces/user/ITenantSettings.tsx +3 -0
  402. package/src/interfaces/user/IUser.tsx +60 -0
  403. package/src/interfaces/user/IUserSettings.tsx +43 -0
  404. package/src/interfaces.tsx +6 -0
  405. package/src/layout/AppLayout.tsx +112 -0
  406. package/src/layout/ApplicationLayout.tsx +197 -0
  407. package/src/layout/MotionWrapper.original.tsx +236 -0
  408. package/src/layout/MotionWrapper.tsx +236 -0
  409. package/src/layout/ResourceMenu.tsx +164 -0
  410. package/src/layout/ResoureLayout.tsx +105 -0
  411. package/src/layout/TransitionWrapper.tsx +125 -0
  412. package/src/pages/ChangePassword.tsx +179 -0
  413. package/src/pages/DASHLanding.tsx +22 -0
  414. package/src/pages/DASHLightWeightLogin.tsx +610 -0
  415. package/src/pages/DASHSimpleLogin.tsx +260 -0
  416. package/src/pages/Login.tsx +111 -0
  417. package/src/pages/Profile.tsx +394 -0
  418. package/src/pages/RecoverPassword.tsx +166 -0
  419. package/src/pages/SingleImageUploader.tsx +55 -0
  420. package/src/pages/VerifyAccount.tsx +128 -0
  421. package/src/providers/authProvider.tsx +210 -0
  422. package/src/providers/dataProvider.tsx +672 -0
  423. package/src/providers/i18n/en.ts +533 -0
  424. package/src/providers/i18n/es.ts +539 -0
  425. package/src/providers/i18n/languages.tsx +5 -0
  426. package/src/providers/i18nProvider.tsx +23 -0
  427. package/src/react-admin-dash/RADashComponent.tsx +240 -0
  428. package/src/react-admin-dash/Resource.tsx +77 -0
  429. package/src/resources/Brand/BrandResource.tsx +130 -0
  430. package/src/resources/DASHResourceLoader.ts +180 -0
  431. package/src/resources/Log/LogResource.tsx +73 -0
  432. package/src/resources/Tenant/ImpersonateTenantResource.tsx +113 -0
  433. package/src/resources/Trash/TrashTemplate.tsx +180 -0
  434. package/src/resources.tsx +280 -0
  435. package/src/schemas/log.tsx +45 -0
  436. package/src/schemas/notification.tsx +42 -0
  437. package/src/schemas/permissions.tsx +44 -0
  438. package/src/schemas/roles.tsx +48 -0
  439. package/src/schemas/rolesDataGrid.tsx +48 -0
  440. package/src/schemas/subscription/components/SubscriptionActions.tsx +153 -0
  441. package/src/schemas/subscription/components/SubscriptionPaymentHistory.tsx +120 -0
  442. package/src/schemas/subscription/components/SubscriptionPlanFeatures.tsx +155 -0
  443. package/src/schemas/subscription/components/SubscriptionPlanPreview.tsx +128 -0
  444. package/src/schemas/subscription/components/SubscriptionPlanStats.tsx +268 -0
  445. package/src/schemas/subscription/components/SubscriptionStatusIndicator.tsx +72 -0
  446. package/src/schemas/subscription/subscriptionPlanSchema.tsx +185 -0
  447. package/src/schemas/subscription/subscriptionSchema.tsx +152 -0
  448. package/src/schemas/subscriptionPlan.ts +422 -0
  449. package/src/schemas/tenant.tsx +129 -0
  450. package/src/schemas/tenantUser.tsx +96 -0
  451. package/src/schemas/tenant_superadmin.tsx +119 -0
  452. package/src/schemas/user.tsx +26 -0
  453. package/src/systemResources.old.tsx +928 -0
  454. package/src/systemResources.tsx +1135 -0
  455. package/src/templates/ResourceTemplate.tsx +240 -0
  456. package/src/templates/ResourceTemplateCreate.tsx +167 -0
  457. package/src/templates/ResourceTemplateEdit.tsx +176 -0
  458. package/src/templates/ResourceTemplateFull.tsx +581 -0
  459. package/src/templates/ResourceTemplateList.tsx +340 -0
  460. package/src/templates/ResourceTemplateShow.tsx +88 -0
  461. package/src/templates/TrashTemplate.tsx +179 -0
  462. package/src/tenantResources.tsx +223 -0
  463. package/src/test_portal_bubbles.tsx +40 -0
  464. package/src/theme/AppHeader.tsx +52 -0
  465. package/src/theme/AppLayoutSetting.tsx +33 -0
  466. package/src/theme/AppLogo.tsx +13 -0
  467. package/src/theme/AppSidebar.tsx +12 -0
  468. package/src/theme/AppSidebarContent.tsx +105 -0
  469. package/src/theme/AppSidebarLogo.tsx +48 -0
  470. package/src/theme/components/PageTitle.tsx +37 -0
  471. package/src/utils/cache/CacheInvalidatorContext.tsx +125 -0
  472. package/src/utils/cache/CacheInvalidatorListenerComponent.tsx +10 -0
  473. package/src/utils/cache/useCacheInvalidatorListener.tsx +27 -0
  474. package/src/utils/convertFileToBase64.tsx +9 -0
  475. package/src/utils/convertToFile.tsx +14 -0
  476. package/src/utils/cookies.tsx +33 -0
  477. package/src/utils/dashDefaultQueryClient.tsx +34 -0
  478. package/src/utils/dataUrlToBlob.tsx +30 -0
  479. package/src/utils/deepReplace.tsx +19 -0
  480. package/src/utils/getProfileMenu.tsx +41 -0
  481. package/src/utils/getTenantSettings.tsx +9 -0
  482. package/src/utils/getType.tsx +8 -0
  483. package/src/utils/getUserSettings.tsx +8 -0
  484. package/src/utils/hasCode.tsx +14 -0
  485. package/src/utils/index.ts +19 -0
  486. package/src/utils/injectTenantStyles.ts +28 -0
  487. package/src/utils/isComponent.tsx +45 -0
  488. package/src/utils/navEvents.tsx +91 -0
  489. package/src/utils/prototypes.tsx +5 -0
  490. package/src/utils/regexp.tsx +4 -0
  491. package/src/utils/resolveObjectPath.tsx +4 -0
  492. package/src/utils/setNativeValue.tsx +24 -0
  493. package/src/utils/slugify.tsx +11 -0
  494. package/src/utils/validators/emailValidator.tsx +6 -0
  495. package/src/utils/validators/requiredValidator.tsx +5 -0
  496. package/src/utils/validators/rutValidator.tsx +31 -0
  497. package/src/utils/validators.tsx +96 -0
  498. package/dist/ChangePassword-DmWAQAX_.js +0 -152
  499. package/dist/Login-t41HMhVT.js +0 -101
  500. package/dist/Profile-By-gdPUd.js +0 -294
  501. package/dist/RecoverPassword-DzPdbkg2.js +0 -149
  502. package/dist/VerifyAccount-Bofaxe5w.js +0 -99
  503. package/dist/index-gfebuoyf.js +0 -21614
  504. /package/dist/{components/permission/tsx → declarations.d.js} +0 -0
  505. /package/{dist → src}/DASHAdmin.tsx.old +0 -0
  506. /package/{dist → src}/declarations.d.ts +0 -0
  507. /package/{dist → src}/default-theme/DashThemeContext.tsx.fast +0 -0
  508. /package/{dist → src}/default-theme/DashThemeContext.tsx.old +0 -0
  509. /package/{dist → src}/templates/ResourceTemplate.tsx.memoized_experiment +0 -0
  510. /package/{dist → src}/templates/ResourceTemplate.tsx.original +0 -0
  511. /package/{dist → src}/templates/ResourceTemplateOld.tsx.bkup +0 -0
@@ -0,0 +1,432 @@
1
+ import { useState, useEffect, useContext, useCallback, useRef } from 'react';
2
+ import { difference } from 'lodash';
3
+ import usePrevious from '@rooks/use-previous';
4
+ import { Channel } from 'laravel-echo/src/channel';
5
+ import Echo, { EchoOptions } from 'laravel-echo';
6
+ import Pusher from 'pusher-js';
7
+
8
+ import { ConstantsContext } from '../../config/ConstantsService';
9
+ import { getEnv } from 'dash-constants/src/DASHAdminSystemConstants';
10
+
11
+
12
+
13
+ import { IDASHAppState } from 'dash-admin-state';
14
+ import { IDashAutoAdminResourceConfig } from 'dash-auto-admin';
15
+ import { useSelector } from 'react-redux';
16
+
17
+ import { dashStorage } from 'dash-utils';
18
+ // Make Pusher available globally
19
+ (window as any).Pusher = Pusher;
20
+
21
+ // Singleton manager for Echo clients
22
+ class EchoClientManager {
23
+ private static instance: EchoClientManager;
24
+ public clients: Map<string, Echo<"pusher">>;
25
+
26
+ private constructor() {
27
+ this.clients = new Map();
28
+ }
29
+
30
+ public static getInstance(): EchoClientManager {
31
+ if (!EchoClientManager.instance) {
32
+ EchoClientManager.instance = new EchoClientManager();
33
+ }
34
+ return EchoClientManager.instance;
35
+ }
36
+
37
+ public setClient(hash: string, client: Echo<"pusher">): void {
38
+ this.clients.set(hash, client);
39
+ }
40
+
41
+ public getClient(hash: string): Echo<"pusher"> | undefined {
42
+ return this.clients.get(hash);
43
+ }
44
+
45
+ public removeClient(hash: string): boolean {
46
+ return this.clients.delete(hash);
47
+ }
48
+
49
+ public hasClient(hash: string): boolean {
50
+ return this.clients.has(hash);
51
+ }
52
+ }
53
+
54
+ export const echoManager = EchoClientManager.getInstance();
55
+
56
+ const useLaravelEcho = ({
57
+ type,
58
+ channel,
59
+ events,
60
+ userId,
61
+ socketId,
62
+ pingInterval = 30000, // Default ping interval: 30 seconds
63
+ debug = true,
64
+ enabled = false
65
+ }: {
66
+ type: 'public' | 'private';
67
+ channel: string;
68
+ events?: { [key: string]: (e: any) => any };
69
+ userId?: number;
70
+ socketId?: string;
71
+ pingInterval?: number;
72
+ debug?: boolean,
73
+ enabled?:boolean
74
+ }) => {
75
+ const [echoChannel, setEchoChannel] = useState<Channel | null>(null);
76
+ const [laravelEchoClient, setLaravelEchoClient] = useState<Echo<"pusher"> | null>(null);
77
+ const [lastEvent, setLastEvent] = useState<{ event: string, data: any ,channel?:string}>(null);
78
+ const [isConnected, setIsConnected] = useState(false);
79
+ const prevChannel = usePrevious(channel);
80
+ const constants = useContext(ConstantsContext);
81
+ const pingTimerRef = useRef<number | null>(null);
82
+
83
+ const auth: any = useSelector(
84
+ (state: IDASHAppState<any, any, IDashAutoAdminResourceConfig>) =>
85
+ state.auth
86
+ );
87
+ const [currentUserId, setCurrentUserId] = useState(null);
88
+
89
+ console.log('🔍 useLaravelEcho: Hook called with params:', {
90
+ type,
91
+ channel,
92
+ userId,
93
+ enabled,
94
+ hasAuth: !!auth?.user,
95
+ authUserId: auth?.user?.id,
96
+ authenticated: auth?.authenticated
97
+ });
98
+
99
+ useEffect(() => {
100
+
101
+ if (auth.user?.id && typeof auth.user.id === 'number' && auth.user.id !== userId) {
102
+ setCurrentUserId(auth.user.id);
103
+ }
104
+ if (auth?.authenticated === false) {
105
+ setCurrentUserId(null);
106
+ }
107
+
108
+ }, [auth])
109
+
110
+ const isProd = getEnv('APP_ENV') === 'production';
111
+ //const isProd = false;
112
+ const log = (message: string, data?: any) => {
113
+ if (debug) {
114
+ console.log(`%c📡 ${message}`, 'color: #2196F3; font-weight: bold; font-size: 12px;', data || '');
115
+ }
116
+ };
117
+
118
+ const logError = (message: string, error?: any) => {
119
+ if (debug) {
120
+ console.error(`%c📡 ${message}`, 'color: #f44336; font-weight: bold; font-size: 12px;', error || '');
121
+ }
122
+ };
123
+
124
+ const pingConnection = useCallback(() => {
125
+ if (laravelEchoClient && laravelEchoClient.connector && laravelEchoClient.connector.pusher) {
126
+ try {
127
+ log('Sending custom ping event...');
128
+ laravelEchoClient.connector.pusher.send_event('client-ping', {
129
+ timestamp: new Date().toISOString()
130
+ });
131
+ } catch (error) {
132
+ logError('Error pinging WebSocket connection:', error);
133
+ }
134
+ }
135
+ }, [laravelEchoClient, debug]);
136
+
137
+ // Hash for the client, it has to be like that, because public channel is open parallel to private which requires userid
138
+ // For now this implementation is constrained to 2 clients, one for public and one for private only.
139
+ const getClientId = useCallback(() => {
140
+ //return `${type}-${userId || 'public'}`;
141
+ return `${type}-${channel || 'global'}-${userId || 'public'}`;
142
+ }, [type, userId, channel]);
143
+
144
+ const cleanup = useCallback(() => {
145
+ if (pingTimerRef.current) {
146
+ window.clearInterval(pingTimerRef.current);
147
+ pingTimerRef.current = null;
148
+ }
149
+ //if (laravelEchoClient) {
150
+ log('Disconnecting Laravel Echo client...', getClientId());
151
+ //echoManager.getClient(getClientId()).disconnect();
152
+ laravelEchoClient && laravelEchoClient.disconnect();
153
+ //echoManager.getClient(getClientId()).disconnect();
154
+ log('Setting Laravel Echo client to null...');
155
+ setLaravelEchoClient(null);
156
+ log('Setting Echo channel to null...');
157
+ setEchoChannel(null);
158
+ log('Clearing current events...');
159
+ setLastEvent(null);
160
+ log('Setting connection status to false...');
161
+ setIsConnected(false);
162
+ log('Removing client from Echo manager...');
163
+ //echoManager.removeClient(getClientId())
164
+ //}
165
+ }, [laravelEchoClient]);
166
+
167
+ useEffect(() => {
168
+
169
+ if(!enabled) {
170
+ console.log('🔍 useLaravelEcho: Hook disabled, skipping WebSocket setup');
171
+ return;
172
+ }
173
+
174
+ if (!(JSON.parse(getEnv('APP_SOCKETS_ENABLED')))) {
175
+ console.log('🔍 useLaravelEcho: WebSockets disabled by APP_SOCKETS_ENABLED env var');
176
+ return;
177
+ }
178
+
179
+ /*
180
+ if (!userId) {
181
+ return
182
+ }
183
+
184
+ if (type === 'private' && !userId) {
185
+ console.log('[WebSocket] Skipping private channel - no userId specified');
186
+ return;
187
+ }
188
+ */
189
+
190
+ const clientId = getClientId();
191
+
192
+ console.log('🔍 useLaravelEcho: Setting up WebSocket connection...', {
193
+ clientId,
194
+ type,
195
+ channel,
196
+ userId,
197
+ enabled
198
+ });
199
+
200
+ // For private channels, we need a userId for authentication
201
+ if (type === 'private' && !userId) {
202
+ console.log('🔍 useLaravelEcho: Skipping private channel setup - no userId provided');
203
+ return;
204
+ }
205
+
206
+ if (type === 'public' || (type === 'private' && userId)) {
207
+
208
+
209
+ if (echoManager.clients.has(clientId)) {
210
+ const existingClient = echoManager.getClient(clientId);
211
+
212
+ console.log('🔍 useLaravelEcho: Using existing Echo client:', clientId);
213
+ setLaravelEchoClient(existingClient);
214
+ return;
215
+ }
216
+
217
+ const token = userId ? dashStorage.getItem('token') : null;
218
+
219
+ const authConfig = token ? {
220
+ headers: {
221
+ Authorization: `Bearer ${token}`,
222
+ Accept: 'application/json',
223
+ 'X-Requested-With': 'XMLHttpRequest',
224
+ }
225
+ } : undefined;
226
+
227
+
228
+ try {
229
+ const socketHostEnv = getEnv('APP_SOCKETS_HOST');
230
+ const socketScheme = getEnv('APP_SOCKETS_SCHEME')?.toLowerCase();
231
+ const isSSL = socketScheme === 'https';
232
+
233
+ // Use host from env or fallback to window.location.hostname
234
+ const wsHost = socketHostEnv || window.location.hostname;
235
+
236
+ const portEnv = getEnv('APP_SOCKETS_PORT');
237
+ const completeConfig = {
238
+ broadcaster: 'pusher',
239
+ key: getEnv('APP_SOCKETS_KEY') || 'dash',
240
+ wsHost,
241
+ ...(portEnv && portEnv !== '' ? { wsPort: portEnv } : {}),
242
+ secure: isSSL,
243
+ forceTLS: isSSL,
244
+ encrypted: isSSL,
245
+ useTLS: isSSL,
246
+ disableStats: !isSSL,
247
+ enabledTransports: isSSL ? ['wss', 'ws'] : ['ws'],
248
+ disableCluster: true,
249
+ cluster: 'mt1',
250
+ logToConsole: debug,
251
+ activityTimeout: 120000,
252
+ pongTimeout: 30000,
253
+ };
254
+ console.log('🔍 useLaravelEcho: WebSocket config:', completeConfig);
255
+
256
+ if (authConfig) {
257
+ const baseUrl = getEnv('APP_BACKEND_URL') || window.location.origin;
258
+ const authPath = getEnv('APP_SOCKETS_AUTH_ENDPOINT') || '/api/ws/auth';
259
+ const formattedBaseUrl = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;
260
+ const formattedAuthPath = authPath.startsWith('/') ? authPath.substring(1) : authPath;
261
+ const authEndpoint = `${formattedBaseUrl}${formattedAuthPath}`;
262
+
263
+ console.log('🔍 useLaravelEcho: Using auth endpoint:', authEndpoint);
264
+ completeConfig['authEndpoint'] = authEndpoint;
265
+ completeConfig['auth'] = authConfig;
266
+ }
267
+
268
+ console.log('🔍 useLaravelEcho: Initializing Echo client with config:', completeConfig);
269
+ const echo = new Echo(completeConfig as EchoOptions<"pusher">);
270
+ if (echo.connector && echo.connector.pusher) {
271
+ echo.connector.pusher.bind_global((eventName, data) => {
272
+ log(`Global event received: ${eventName}`, data);
273
+ setLastEvent({ event: eventName, data });
274
+ /*if (typeof events[eventName] === 'function') {
275
+ events[eventName](data);
276
+ }*/
277
+ });
278
+
279
+ echo.connector.pusher.connection.bind('connected', () => {
280
+ log('Connected to Pusher!');
281
+ setIsConnected(true);
282
+ dashStorage.setItem('socketConnectionState', 'true');
283
+
284
+ if (pingTimerRef.current) {
285
+ window.clearInterval(pingTimerRef.current);
286
+ }
287
+ pingTimerRef.current = window.setInterval(pingConnection, pingInterval);
288
+ });
289
+
290
+ echo.connector.pusher.connection.bind('disconnected', () => {
291
+ log('Disconnected from Pusher');
292
+ setIsConnected(false);
293
+
294
+ if (pingTimerRef.current) {
295
+ window.clearInterval(pingTimerRef.current);
296
+ pingTimerRef.current = null;
297
+ }
298
+ });
299
+
300
+ echo.connector.pusher.connection.bind('error', (err: any) => {
301
+ logError('Pusher connection error:', err);
302
+ setIsConnected(false);
303
+ });
304
+ }
305
+
306
+ log('Setting Echo client', clientId);
307
+ echoManager.setClient(clientId, echo);
308
+ setLaravelEchoClient(echo);
309
+ } catch (error) {
310
+
311
+ logError('Error initializing Echo client:', error);
312
+ cleanup();
313
+ }
314
+ }
315
+ return () => {
316
+ if (debug) {
317
+ console.log("%c📡 Socket listener unmounted!", "color: #ff6b6b; font-weight: bold;");
318
+ cleanup();
319
+ }
320
+ }
321
+
322
+ }, [userId, enabled, channel]);
323
+
324
+
325
+
326
+
327
+ useEffect(() => {
328
+ if (!laravelEchoClient || !channel) return;
329
+ if (type === 'private' && !userId) return;
330
+
331
+ log(`Attempting to subscribe to ${type} channel: ${channel}`);
332
+
333
+ const isSubscribed = laravelEchoClient.connector.channels[channel.includes('.') ? `private-${channel}` : channel] !== undefined;
334
+ if (isSubscribed) {
335
+ log(`Skipping, already suscribed`);
336
+ return;
337
+ }
338
+
339
+ if (echoChannel && prevChannel && channel !== prevChannel) {
340
+ log(`Leaving previous channel: ${prevChannel}`);
341
+ laravelEchoClient.leaveChannel(prevChannel);
342
+ setEchoChannel(null);
343
+ //setCurrentEvents([]);
344
+ }
345
+
346
+ if (!echoChannel || channel !== prevChannel) {
347
+ try {
348
+ let newChannel;
349
+
350
+ if (type === 'private') {
351
+ log(`Subscribing to private channel: ${channel}`);
352
+ newChannel = laravelEchoClient.private(channel.replace('{userId}', userId.toString()));
353
+ } else {
354
+ log(`Subscribing to public channel: ${channel}`);
355
+ newChannel = laravelEchoClient.channel(channel);
356
+ }
357
+
358
+ setEchoChannel(newChannel);
359
+ log('Channel subscription successful:', newChannel);
360
+ } catch (error) {
361
+ logError(`Error subscribing to ${type} channel ${channel}:`, error);
362
+ }
363
+ }
364
+
365
+ return () => {
366
+ if (laravelEchoClient && channel) {
367
+ laravelEchoClient.leaveChannel(channel);
368
+ }
369
+ };
370
+ }, [laravelEchoClient, channel, type, userId, prevChannel, debug]);
371
+
372
+ useEffect(() => {
373
+ if (!laravelEchoClient || !isConnected) return;
374
+
375
+ const handleVisibilityChange = () => {
376
+ if (document.visibilityState === 'visible') {
377
+ if (laravelEchoClient.connector &&
378
+ laravelEchoClient.connector.pusher &&
379
+ laravelEchoClient.connector.pusher.connection.state !== 'connected') {
380
+ log('Tab is visible again, reconnecting...');
381
+ laravelEchoClient.connector.pusher.connect();
382
+ }
383
+ }
384
+ };
385
+
386
+ const handleOnline = () => {
387
+ log('Browser is online, reconnecting...');
388
+ if (laravelEchoClient.connector && laravelEchoClient.connector.pusher) {
389
+ laravelEchoClient.connector.pusher.connect();
390
+ }
391
+ };
392
+
393
+ document.addEventListener('visibilitychange', handleVisibilityChange);
394
+ window.addEventListener('online', handleOnline);
395
+
396
+ return () => {
397
+ document.removeEventListener('visibilitychange', handleVisibilityChange);
398
+ window.removeEventListener('online', handleOnline);
399
+ };
400
+ }, [laravelEchoClient, isConnected, debug]);
401
+
402
+ const addListener = useCallback((eventName: string, callback: (data: any) => void) => {
403
+
404
+ if (!echoChannel) return;
405
+ console.log(`Adding listener for event: ${eventName}`);
406
+ //const formattedEventName = eventName.startsWith('.') ? eventName : `.${eventName}`;
407
+ const formattedEventName = eventName;
408
+ echoChannel.listen(formattedEventName, callback);
409
+ //setCurrentEvents(prev => [...prev, eventName]);
410
+ }, [echoChannel]);
411
+
412
+ const removeListener = useCallback((eventName: string) => {
413
+
414
+ if (!echoChannel) return;
415
+ console.log(`Adding listener for event: ${eventName}`);
416
+ //const formattedEventName = eventName.startsWith('.') ? eventName : `.${eventName}`;
417
+ const formattedEventName = eventName;
418
+ echoChannel.stopListening(formattedEventName);
419
+ //setCurrentEvents(prev => prev.filter(e => e !== eventName));
420
+ }, [echoChannel]);
421
+
422
+ return {
423
+ echoChannel,
424
+ isConnected,
425
+ lastEvent,
426
+ ping: pingConnection,
427
+ addListener,
428
+ removeListener
429
+ };
430
+ };
431
+
432
+ export default useLaravelEcho;
@@ -0,0 +1,94 @@
1
+
2
+ import React, { FC } from 'react';
3
+
4
+ /**
5
+ * Defines the interface for the DictionaryContext, which provides access to a dictionary of key-value pairs and a set of replacements to be applied to strings.
6
+ *
7
+ * @interface IDictionaryContext
8
+ * @property {{[key: string]: any}} dictionary - An object containing the dictionary of key-value pairs.
9
+ * @property {{[key: string]: any}} replacements - An object containing the replacements to be applied to strings.
10
+ * @property {function(string, boolean?): string} get - A function that retrieves the value for a given key from the dictionary, optionally applying the replacements.
11
+ */
12
+ export interface IDictionaryContext {
13
+ dictionary: { [key: string]: any };
14
+ replacements: { [key: string]: any };
15
+ get: (key: string, replace?:boolean) => string;
16
+ }
17
+
18
+ /**
19
+ * Recursively replaces all occurrences of keys in the provided `dictionary` object with their corresponding values in the given `string`.
20
+ *
21
+ * @param string - The input string to perform the replacements on.
22
+ * @param dictionary - An object containing key-value pairs to use for the replacements.
23
+ * @returns The input string with all replacements made.
24
+ */
25
+ function replaceDictValues(string: string, dictionary: { [key: string]: string }): string {
26
+ for (const [key, value] of Object.entries(dictionary)) {
27
+ if (typeof value === 'object' && value !== null) {
28
+ string = replaceDictValues(string, value);
29
+ } else {
30
+ string = Array.isArray(string) ? string.join(', ').replace(key, value) : typeof string === 'string' ? string.replace(key, value) : string;
31
+ }
32
+ }
33
+
34
+ return string;
35
+ }
36
+
37
+
38
+ /**
39
+ * Provides a context for accessing a dictionary of key-value pairs and a set of replacements to be applied to strings.
40
+ *
41
+ * The `DictionaryContext` exposes an interface with the following properties:
42
+ * - `dictionary`: An object containing the dictionary of key-value pairs.
43
+ * - `replacements`: An object containing the replacements to be applied to strings.
44
+ * - `get`: A function that retrieves the value for a given key from the dictionary, optionally applying the replacements.
45
+ */
46
+ export const DictionaryContext = React.createContext<IDictionaryContext>({
47
+ dictionary: null,
48
+ replacements: null,
49
+ get: (key: string/* , replace?:boolean*/) => {
50
+ return key; /*return constants.dict[key] ? constants.dict[key] : key*/
51
+ },
52
+ });
53
+
54
+ /**
55
+ * Provides a `DictionaryContext.Provider` component that wraps child components and provides access to a dictionary of key-value pairs and a set of replacements to be applied to strings.
56
+ *
57
+ * The `DictionaryProvider` component accepts the following props:
58
+ * - `dictionary`: An object containing the dictionary of key-value pairs.
59
+ * - `replacements`: An object containing the replacements to be applied to strings.
60
+ * - `children`: The React nodes to be wrapped by the `DictionaryContext.Provider`.
61
+ *
62
+ * The `DictionaryContext.Provider` exposes the following values:
63
+ * - `dictionary`: The dictionary of key-value pairs.
64
+ * - `replacements`: The replacements to be applied to strings.
65
+ * - `get`: A function that retrieves the value for a given key from the dictionary, optionally applying the replacements.
66
+ *
67
+ * @returns The DictionaryProvider component
68
+ */
69
+ const DictionaryProvider: FC<{
70
+ dictionary: { [key: string]: any };
71
+ replacements: { [key: string]: any };
72
+ children: React.ReactNode;
73
+ }> = ({ dictionary, replacements, children }) => {
74
+
75
+ return (
76
+ <DictionaryContext.Provider
77
+ value={{
78
+ dictionary,
79
+ replacements,
80
+ get: (key: string, replace?:boolean) => {
81
+ let str = key;
82
+ if (replace && replacements) {
83
+ str = replaceDictValues(str, replacements);
84
+ }
85
+ return dictionary[str] ? dictionary[str] : str;
86
+ },
87
+ }}
88
+ >
89
+ {children}
90
+ </DictionaryContext.Provider>
91
+ );
92
+ };
93
+
94
+ export { DictionaryContext as default, DictionaryProvider };
@@ -0,0 +1,117 @@
1
+ import * as React from 'react';
2
+ import { ToastContainer } from 'react-toastify';
3
+ import { DialogServiceProvider } from 'dash-dialog';
4
+ import DASHModal from 'dash-modal';
5
+ import { LaravelEchoProvider } from '../contexts/com/LaravelEchoContext';
6
+ import {DASHAppConstants} from 'dash-constants';
7
+ import { CacheInvalidatorContextProvider } from '../utils/cache/CacheInvalidatorContext';
8
+ // Direct imports to avoid circular barrel imports
9
+ import CacheInvalidatorListenerComponent from '../utils/cache/CacheInvalidatorListenerComponent';
10
+ import DASHGlobalErrorHandler from '../components/misc/DASHGlobalErrorHandler';
11
+ import DashQueryClientContext from '../contexts/DashQueryClientContext';
12
+ import { FCMProvider } from '../contexts/com/FCMContext';
13
+ import Redirect from '../components/custom/Redirect';
14
+ import WSMessagesManager from '../hooks/notifications/WSMessagesManager';
15
+ import { Theme } from '@mui/material';
16
+ import { LocalizationProvider, LocalizationProviderProps } from '@mui/x-date-pickers';
17
+ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
18
+ import { AuthContextProvider } from '../contexts/auth';
19
+ import { Provider } from 'react-redux';
20
+ import { IDASHAppState } from 'dash-admin-state';
21
+ import { Store } from 'redux';
22
+ import { DashThemeProvider } from './DashThemeContext';
23
+ import { ComponentRegistryProvider, IDashAutoAdminCustomFieldComponent } from 'dash-auto-admin';
24
+ import { QueryClient } from '@tanstack/react-query';
25
+ import { Persister } from '@tanstack/react-query-persist-client';
26
+ import { I18nBridgeProvider, useI18nBridge } from '../contexts/I18nBridgeContext';
27
+
28
+ export interface IDomainAppProviders<U, A, R> extends React.PropsWithChildren {
29
+ wsMessagesManager?: typeof WSMessagesManager
30
+ theme?: Partial<Theme> | ((outerTheme: Partial<Theme>) => Partial<Theme>)
31
+ dateAdapter?: LocalizationProviderProps<any>["dateAdapter"]
32
+ store?: Store<IDASHAppState<U, A, R>>
33
+ extendedThemeOptions?: any
34
+ dashAutoAdminComponents?: Record<string, React.FC<IDashAutoAdminCustomFieldComponent>>
35
+ queryClient?: any
36
+ /** Optional persister for localStorage query caching */
37
+ queryPersister?: Persister
38
+ CustomEchoProvider?: React.ComponentType<any>
39
+ }
40
+
41
+ /**
42
+ * BridgedDASHModal
43
+ *
44
+ * A wrapper for DASHModal that uses the I18nBridgeContext to provide
45
+ * translations when rendered outside of the React Admin context.
46
+ */
47
+ const BridgedDASHModal = (props: any) => {
48
+ const { i18nProvider, locale } = useI18nBridge();
49
+
50
+ const translate = React.useCallback((key: string, options?: any) => {
51
+ if (!i18nProvider) return key;
52
+ try {
53
+ return i18nProvider.translate(key, options);
54
+ } catch (e) {
55
+ return key;
56
+ }
57
+ }, [i18nProvider, locale]);
58
+
59
+ const confirmText = props.confirmText === undefined ? translate('dash.action.continue') : props.confirmText;
60
+ const cancelText = props.cancelText === undefined ? translate('dash.action.cancel') : props.cancelText;
61
+
62
+ return <DASHModal {...props} confirmText={confirmText} cancelText={cancelText} />;
63
+ };
64
+
65
+ const DomainAppProviders = <U, A, R>({
66
+ wsMessagesManager,
67
+ dateAdapter,
68
+ store,
69
+ children,
70
+ extendedThemeOptions,
71
+ dashAutoAdminComponents,
72
+ queryClient,
73
+
74
+ queryPersister,
75
+ CustomEchoProvider
76
+ }: IDomainAppProviders<U, A, R>): React.JSX.Element => {
77
+
78
+ const content = (
79
+ <I18nBridgeProvider>
80
+ <DashThemeProvider extendedOptions={extendedThemeOptions}>
81
+ <LocalizationProvider dateAdapter={dateAdapter || AdapterDayjs}>
82
+ <AuthContextProvider>
83
+ <DashQueryClientContext queryClient={queryClient} persister={queryPersister}>
84
+ <ComponentRegistryProvider customComponents={dashAutoAdminComponents || {}}>
85
+ <DialogServiceProvider
86
+ component={BridgedDASHModal}
87
+ componentProps={{ sound: DASHAppConstants.system.UI_SOUNDS }}
88
+
89
+ ><FCMProvider>
90
+ {/* Use CustomEchoProvider if provided, otherwise default to LaravelEchoProvider */}
91
+ {(() => {
92
+ const EchoProvider = CustomEchoProvider || LaravelEchoProvider;
93
+ return (
94
+ <EchoProvider manager={wsMessagesManager || WSMessagesManager}>
95
+ <CacheInvalidatorContextProvider>
96
+ <CacheInvalidatorListenerComponent />
97
+ <ToastContainer style={{ width: '520px' }} />
98
+ <DASHGlobalErrorHandler />
99
+ {children}
100
+ </CacheInvalidatorContextProvider>
101
+ </EchoProvider>
102
+ );
103
+ })()}
104
+ </FCMProvider>
105
+ </DialogServiceProvider>
106
+ </ComponentRegistryProvider>
107
+ </DashQueryClientContext>
108
+ </AuthContextProvider>
109
+ </LocalizationProvider>
110
+ </DashThemeProvider>
111
+ </I18nBridgeProvider>
112
+ );
113
+
114
+ return store ? <Provider store={store}>{content}</Provider> : content;
115
+ };
116
+
117
+ export default DomainAppProviders;