@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,1135 @@
1
+
2
+ import { SelectInput, FunctionField } from 'react-admin';
3
+ import ResourceTemplate from './templates/ResourceTemplate';
4
+ import IAppResourceConfig from './interfaces/IAppResourceConfig';
5
+ import { TenantImpersonateResource } from './resources/Tenant/ImpersonateTenantResource';
6
+ import tenantSystemAdminSchema from './schemas/tenant_superadmin';
7
+ import subscriptionPlanSchema from './schemas/subscriptionPlan';
8
+ import { RutValidator } from './utils/validators';
9
+ import { DASHAppConstants } from 'dash-constants';
10
+ import Avatar from './components/avatar/Avatar';
11
+ import SystemUpdateAlt from '@mui/icons-material/SystemUpdateAlt';
12
+ import Person from '@mui/icons-material/Person';
13
+ import CardMembershipIcon from '@mui/icons-material/CardMembership';
14
+ import { lazy } from 'react';
15
+ import BusinessIcon from "@mui/icons-material/Business";
16
+ import Chip from "@mui/material/Chip";
17
+
18
+ import SystemRequestsCache from './contexts/SystemRequestsCache';
19
+ import { SubscriptionPlanFormatsProvider } from './contexts/SubscriptionPlanFormatsProvider';
20
+ import roleSchemaDataGrid from './schemas/rolesDataGrid';
21
+ import FormatCurrency from './components/currency/Format';
22
+
23
+ const TableContainer = lazy(() => import('@mui/material/TableContainer'));
24
+
25
+
26
+ const drawerSettings = {
27
+ drawer: true,
28
+ drawerOptions: {
29
+ view: true,
30
+ edit: false,
31
+ create: false,
32
+ },
33
+ listViewButton: { props: { buttonProps: { variant: 'text', size: 'small' }, label: '' } },
34
+ listEditButton: { props: { buttonProps: { variant: 'text', size: 'small' }, label: '' } },
35
+ listDeleteButton: { confirm: true, props: { buttonProps: { variant: 'text', size: 'small' }, label: '' } },
36
+ };
37
+
38
+ const systemResources: IAppResourceConfig[] = [
39
+
40
+ {
41
+ roles: [DASHAppConstants.system.SYSTEM_ROLE],
42
+ trash: true,
43
+ component: ResourceTemplate,
44
+ model: "system/tenancy",
45
+ //group: "resource.groups.system_resources",
46
+ group: "Accounts",
47
+ //path: "/tenancy/account",
48
+ schema: [
49
+ {
50
+ tab: 'Account',
51
+ label: 'Public Name',
52
+ attribute: 'public_name',
53
+ type: String,
54
+ inList: true,
55
+ inEdit: true,
56
+ inShow: true,
57
+ inCreate: false,
58
+ },
59
+ {
60
+ tab: 'Account',
61
+ label: 'Legal Name',
62
+ attribute: 'legal_name',
63
+ type: String,
64
+ inList: false,
65
+ inEdit: true,
66
+ inShow: true,
67
+ inCreate: false,
68
+ },
69
+ {
70
+ tab: 'Account',
71
+ label: 'Public ID',
72
+ attribute: 'public_id',
73
+ type: String,
74
+ inList: true,
75
+ inEdit: true,
76
+ inShow: true,
77
+ inCreate: false,
78
+ },
79
+ {
80
+ tab: 'Account',
81
+ label: 'Account Status',
82
+ attribute: 'account_status_label',
83
+ type: String,
84
+ custom: true,
85
+ inList: true,
86
+ inEdit: false,
87
+ inShow: true,
88
+ inCreate: false,
89
+ component: () => (
90
+ <FunctionField
91
+ label="Account Status"
92
+ render={(record: any) => {
93
+ const status = record?.account_status_label || record?.account_status || '-';
94
+ const colorMap: Record<string, 'success' | 'warning' | 'error' | 'default'> = {
95
+ 'Active': 'success',
96
+ 'Suspended': 'warning',
97
+ 'Canceled': 'error',
98
+ 'Expired': 'default',
99
+ 'Pending Deletion': 'error',
100
+ };
101
+ return <Chip label={status} color={colorMap[status] || 'default'} size="small" />;
102
+ }}
103
+ />
104
+ ),
105
+ },
106
+ {
107
+ tab: 'Account',
108
+ label: 'Email',
109
+ attribute: 'email',
110
+ type: String,
111
+ inList: true,
112
+ inEdit: true,
113
+ inShow: true,
114
+ inCreate: false,
115
+ },
116
+ {
117
+ tab: 'Account',
118
+ label: 'URL',
119
+ attribute: 'url',
120
+ type: String,
121
+ inList: false,
122
+ inEdit: true,
123
+ inShow: true,
124
+ inCreate: false,
125
+ },
126
+ /*{
127
+ tab: 'Account',
128
+ label: 'Slug',
129
+ attribute: 'slug',
130
+ type: String,
131
+ inList: true,
132
+ inEdit: false,
133
+ inShow: true,
134
+ inCreate: false,
135
+ },*/
136
+ {
137
+ tab: 'Account',
138
+ label: 'Slug (URL)',
139
+ attribute: 'slug',
140
+ type: String,
141
+ inList: false,
142
+ validate: (value: string) => {
143
+ if (!value) throw new Error('El slug es requerido');
144
+ if (!/^[a-z0-9-]+$/.test(value)) throw new Error('Solo letras minúsculas, números y guiones');
145
+ if (value.length > 50) throw new Error('Máximo 50 caracteres');
146
+ },
147
+ },
148
+ {
149
+ tab: 'Account',
150
+ label: 'Currency',
151
+ attribute: 'settings.currency',
152
+ type: String,
153
+ inList: false,
154
+ inEdit: true,
155
+ inShow: true,
156
+ inCreate: true,
157
+ fieldProps: {
158
+ helperText: "Default currency code (e.g., USD, EUR)"
159
+ }
160
+ },
161
+ {
162
+ tab: 'Account',
163
+ label: 'Timezone',
164
+ attribute: 'settings.timezone',
165
+ type: String,
166
+ inList: false,
167
+ inShow: true,
168
+ inEdit: false,
169
+ inCreate: false,
170
+ },
171
+ {
172
+ tab: 'Account',
173
+ label: 'Timezone',
174
+ attribute: 'settings.timezone',
175
+ type: String,
176
+ custom: true,
177
+ inList: false,
178
+ inShow: false,
179
+ inEdit: true,
180
+ inCreate: true,
181
+ component: SelectInput,
182
+ componentProps: {
183
+ source: 'settings.timezone',
184
+ choices: [
185
+ { id: 'America/Santiago', name: 'America/Santiago' },
186
+ { id: 'UTC', name: 'UTC' },
187
+ { id: 'America/New_York', name: 'America/New_York' },
188
+ { id: 'Europe/London', name: 'Europe/London' },
189
+ ],
190
+ defaultValue: 'UTC'
191
+ }
192
+ },
193
+ {
194
+ tab: 'Subscription',
195
+ label: 'Subscription Status',
196
+ attribute: 'subscription_status',
197
+ type: String,
198
+ custom: true,
199
+ inList: true,
200
+ inEdit: false,
201
+ inShow: true,
202
+ inCreate: false,
203
+ component: () => (
204
+ <FunctionField
205
+ label="Subscription Status"
206
+ render={(record: any) => {
207
+ const status = record?.subscription_status || 'none';
208
+ const colorMap: Record<string, 'success' | 'warning' | 'error' | 'info' | 'default'> = {
209
+ 'active': 'success',
210
+ 'canceled': 'error',
211
+ 'past_due': 'warning',
212
+ 'trialing': 'info',
213
+ 'none': 'default',
214
+ };
215
+ return <Chip label={status} color={colorMap[status] || 'default'} size="small" />;
216
+ }}
217
+ />
218
+ ),
219
+ },
220
+ {
221
+ tab: 'Subscription',
222
+ label: 'Plan',
223
+ attribute: 'subscription_plan_name',
224
+ type: String,
225
+ inList: false,
226
+ inEdit: false,
227
+ inShow: true,
228
+ inCreate: false,
229
+ },
230
+ {
231
+ tab: 'Subscription',
232
+ label: 'Subscription State',
233
+ attribute: 'subscription_state',
234
+ type: String,
235
+ inList: false,
236
+ inEdit: false,
237
+ inShow: true,
238
+ inCreate: false,
239
+ },
240
+ {
241
+ tab: 'Subscription',
242
+ label: 'Gateway',
243
+ attribute: 'gateway_type',
244
+ type: String,
245
+ inList: false,
246
+ inEdit: false,
247
+ inShow: true,
248
+ inCreate: false,
249
+ },
250
+ {
251
+ tab: 'Subscription',
252
+ label: 'Canceled At',
253
+ attribute: 'canceled_at',
254
+ type: Date,
255
+ inList: false,
256
+ inEdit: false,
257
+ inShow: true,
258
+ inCreate: false,
259
+ },
260
+ {
261
+ tab: 'Subscription',
262
+ label: 'Expires At',
263
+ attribute: 'expires_at',
264
+ type: Date,
265
+ inList: false,
266
+ inEdit: false,
267
+ inShow: true,
268
+ inCreate: false,
269
+ },
270
+ {
271
+ tab: 'Usage',
272
+ label: 'Tenants',
273
+ attribute: 'tenants_count',
274
+ type: Number,
275
+ inList: true,
276
+ inEdit: false,
277
+ inShow: true,
278
+ inCreate: false,
279
+ },
280
+ {
281
+ tab: 'Usage',
282
+ label: 'Users',
283
+ attribute: 'users_count',
284
+ type: Number,
285
+ inList: true,
286
+ inEdit: false,
287
+ inShow: true,
288
+ inCreate: false,
289
+ },
290
+ {
291
+ tab: 'Trial',
292
+ label: 'Trial Ends At',
293
+ attribute: 'trial_ends_at',
294
+ type: Date,
295
+ inList: false,
296
+ inEdit: false,
297
+ inShow: true,
298
+ inCreate: false,
299
+ },
300
+ {
301
+ tab: 'Trial',
302
+ label: 'Is On Trial',
303
+ attribute: 'is_on_trial',
304
+ type: Boolean,
305
+ inList: true,
306
+ inEdit: false,
307
+ inShow: true,
308
+ inCreate: false,
309
+ },
310
+ {
311
+ tab: 'Trial',
312
+ label: 'Trial Days Remaining',
313
+ attribute: 'trial_days_remaining',
314
+ type: Number,
315
+ inList: false,
316
+ inEdit: false,
317
+ inShow: true,
318
+ inCreate: false,
319
+ },
320
+ ],
321
+ label: "Accounts",
322
+ icon: <BusinessIcon />,
323
+
324
+ create: false,
325
+
326
+ menu: [
327
+ {
328
+ title: 'Accounts',
329
+ redirect: '/system/tenancy',
330
+ },
331
+ {
332
+ title: '🗑',
333
+ redirect: '/system/tenancy/trash',
334
+ },
335
+ ],
336
+
337
+ referenceFilters: [
338
+ {
339
+ id: "PublicName",
340
+ label: "Name",
341
+ source: "public_name",
342
+ reference: null,
343
+ optionText: null,
344
+ alwaysOn: true,
345
+ },
346
+ {
347
+ id: "AccountStatus",
348
+ label: "Account Status",
349
+ source: "account_status",
350
+ reference: [
351
+ { id: 'active', name: 'Active' },
352
+ { id: 'canceled', name: 'Canceled' },
353
+ { id: 'expired', name: 'Expired' },
354
+ { id: 'suspended', name: 'Suspended' },
355
+ { id: 'soft_deleted', name: 'Pending Deletion' },
356
+ ],
357
+ optionText: "name",
358
+ alwaysOn: true,
359
+ },
360
+ ],
361
+
362
+ mutationMode: "pessimistic",
363
+ redirectAfterUpdate: false,
364
+
365
+ ...drawerSettings,
366
+ },
367
+
368
+ {
369
+ roles: [DASHAppConstants.system.SYSTEM_ROLE],
370
+ component: ResourceTemplate,
371
+ customRoutes: (resourceConfig) => TenantImpersonateResource(resourceConfig),
372
+ contextComponent: ({ resourceConfig, mode, children }) => {
373
+ console.log("TenantFormatsProvider", resourceConfig, mode);
374
+ return mode === "list" ? children : (
375
+ <SystemRequestsCache
376
+ cacheKey="tenant_formats_cache"
377
+ apiUrl="system/tenant/systemSettingFormats"
378
+ cacheSeconds={300}
379
+ >
380
+ {children}
381
+ </SystemRequestsCache>
382
+ )
383
+ },
384
+ model: 'system/tenant',
385
+ label: 'resource.system.tenants.menu_list',
386
+ trash: true,
387
+ schema: tenantSystemAdminSchema,
388
+ //references: [{ reference: 'roles', target: 'role', schema: rolesSchema }]
389
+ //references: [{ reference: 'roles', target: 'gitid', schema: roleSchema }],
390
+ icon: <Person />,
391
+ //group: 'resource.groups.system_resources',
392
+ group: "Accounts",
393
+ menu: [{
394
+ title: 'resource.system.tenants.menu_list',
395
+ redirect: '/system/tenant',
396
+ },
397
+
398
+ {
399
+ title: "🗑",
400
+ redirect: "/system/tenant/trash",
401
+ },
402
+ {
403
+ title: 'Impersonar',
404
+ redirect: '/system/tenant/impersonate',
405
+ },
406
+
407
+ ],
408
+ //create: true,
409
+ refreshAfter: true,
410
+ toolbarCreateButton: { enabled: true },
411
+
412
+ referenceFilters: [
413
+ {
414
+ id: "Nombre",
415
+ label: "resource.system.tenants.filter_name",
416
+ source: "name", // id field
417
+ reference: null,
418
+ optionText: null,
419
+ alwaysOn: true,
420
+ },
421
+ ],
422
+
423
+ mainAction: {
424
+ title: 'resource.system.tenants.main_action',
425
+ fn: "redirect",
426
+ // type: "ghost",
427
+ mode: "create",
428
+ redirect: "create",
429
+ },
430
+
431
+ search: false,
432
+ exporter: false,
433
+ postFormatter: (params) => {
434
+
435
+
436
+ if (params.systemMarketplaces) {
437
+ params.system_marketplace_ids = params.systemMarketplaces.map((item) => item.id);
438
+ }
439
+
440
+ return params;
441
+ },
442
+ redirectAfterUpdate: false,
443
+
444
+ mutationMode: 'pessimistic',
445
+ editProps: {
446
+ queryOptions: { meta: { forceFetch: true } },
447
+ undoable: false,
448
+ emptyWhileLoading: true
449
+ },
450
+ dataGridProps: { stickyHeader: true, rowClick: false },
451
+ dataGridWrapper: (props: any) => <TableContainer sx={{ maxHeight: 800 }} >{props.children}</TableContainer>,
452
+ //listEditButton: { enabled: true },
453
+
454
+ ...drawerSettings,
455
+ redirectAfterCreate: true,
456
+
457
+ //toolbarCreateButton: { enabled: true },
458
+ //listEditButton: { enabled: true, component: QuickEditButton, props: { icon: <Bolt />, label: "", resource: "tenant/inline", navigation:"virtualhash", navigate: (id) => id, size: "small", color: "secondary" }},
459
+
460
+
461
+ },
462
+
463
+
464
+
465
+
466
+
467
+ {
468
+ roles: [DASHAppConstants.system.SYSTEM_ROLE],
469
+ component: ResourceTemplate,
470
+ model: 'system/role-permissions-bulk',
471
+ label: 'resource.system.roles.label',
472
+ icon: <SystemUpdateAlt />,
473
+ //group: 'resource.groups.system_resources',
474
+ group: "System",
475
+ menu: [
476
+ {
477
+ title: 'resource.system.roles.menu_list',
478
+ redirect: '/system/role-permissions-bulk',
479
+ },
480
+ ],
481
+
482
+ contextComponent: ({ resourceConfig, mode, children }) => {
483
+ console.log("TenantSettingsFormatsProvider", resourceConfig, mode);
484
+
485
+ return mode === "list" ? children : <SystemRequestsCache
486
+ cacheKey="system_available_permissions_cache"
487
+ apiUrl="system/permission/availablePermissions"
488
+ cacheSeconds={300}
489
+ >{children}</SystemRequestsCache>
490
+ },
491
+
492
+ referenceFilters: [
493
+ {
494
+ id: "Nombre",
495
+ label: "resource.system.roles.filter_name",
496
+ source: "name", // id field
497
+ reference: null,
498
+ optionText: null,
499
+ alwaysOn: true,
500
+ },
501
+ ],
502
+ toolbarCreateButton: { enabled: true },
503
+
504
+ mainAction: {
505
+ title: 'resource.system.roles.main_action',
506
+ fn: "redirect",
507
+ // type: "ghost",
508
+ mode: "create",
509
+ redirect: "create",
510
+ },
511
+
512
+ view: false,
513
+ schema: roleSchemaDataGrid,
514
+
515
+
516
+
517
+ dataGridProps: { stickyHeader: true },
518
+ listEditButton: { enabled: true },
519
+ listViewButton: { enabled: false },
520
+
521
+ toolbarDeleteButton: { enabled: false },
522
+ toolbarListButton: { enabled: false },
523
+ toolbarSaveButton: { enabled: true },
524
+ toolbarExportButton: { enabled: false },
525
+ toolbarEditButton: { enabled: false },
526
+
527
+
528
+ formGroupMode: 'groups',
529
+
530
+ mutationMode: 'pessimistic',
531
+ editProps: {
532
+ queryOptions: { meta: { forceFetch: true } },
533
+ undoable: false,
534
+ emptyWhileLoading: true
535
+ },
536
+
537
+ saveButtonAlwaysEnabled: true,
538
+ refreshAfter: true,
539
+ //redirect: "list",
540
+ //redirectAfterCreate: true,
541
+ //redirectAfterUpdate: true,
542
+
543
+ dataGridWrapper: (props: any) => (
544
+ <TableContainer sx={{ maxHeight: 800 }}>{props.children}</TableContainer>
545
+ ),
546
+ /* references: [
547
+ { reference: 'permission', tab: 'Permisos', target: 'role_id', schema: permissionSchema, type: "ReferenceManyField" },
548
+ ],*/
549
+ postFormatter: (params, _) => {
550
+ /*if(method === "update") {
551
+ params._method = "PUT";
552
+ }*/
553
+ delete params.permissions
554
+ return params
555
+ },
556
+ ...drawerSettings,
557
+ },
558
+
559
+
560
+ {
561
+ roles: [DASHAppConstants.system.SYSTEM_ROLE],
562
+ component: ResourceTemplate,
563
+ trash: true,
564
+ isFormData: true,
565
+ model: 'system/user',
566
+ //group: 'resource.groups.system_resources',
567
+ group: "Accounts",
568
+ label: 'resource.system.users.label',
569
+ refreshAfter: true,
570
+ referenceFilters: [
571
+ // TODO: Cuando se cambia el cliente se debn mostrar sólo los CP de este filtro
572
+ {
573
+ id: 'search',
574
+ label: 'resource.system.users.filter_search',
575
+ source: 'q',
576
+ reference: null,
577
+ optionText: '', // field from the model
578
+ alwaysOn: true,
579
+ },
580
+ ],
581
+ schema: [
582
+ {
583
+ tab: 'Datos Usuario',
584
+ attribute: 'avatar',
585
+ listAttribute: 'image_path',
586
+ label: 'Imágen Usuario',
587
+ type: String,
588
+ sortable: true,
589
+ inEdit: true,
590
+ inCreate: true,
591
+ inShow: true,
592
+ inList: false,
593
+ custom: true,
594
+ component: Avatar,
595
+ processor: 'File',
596
+ },
597
+ {
598
+ label: 'Nombre',
599
+ attribute: 'name',
600
+ type: String,
601
+ tab: 'Datos Usuario',
602
+ //validate: (name: string) => (name && name.length >= 3 ? undefined : <div>Name is too short</div>)
603
+ },
604
+ {
605
+ label: "Apellido",
606
+ attribute: "lastname",
607
+ type: String,
608
+ tab: "Datos Usuario",
609
+ //validate: (name: string) => (name && name.length >= 3 ? undefined : <div>Name is too short</div>)
610
+ },
611
+ {
612
+ tab: 'Datos Usuario',
613
+ attribute: 'public_id',
614
+ label: 'Rut',
615
+ type: String,
616
+ fieldProps: { required: true/*, validate: [required()],*/, showDiv: true },
617
+ slotProps: { input: { fullWidth: true, autoComplete: "off" } },
618
+ sortable: true,
619
+ inEdit: true,
620
+ inCreate: true,
621
+ inShow: true,
622
+ inList: false,
623
+ validate: (value) => {
624
+
625
+ if (!value) throw Error('El campo es requerido');
626
+
627
+ if (!RutValidator(value)) {
628
+ throw Error('El Rut es inválido');
629
+ }
630
+ }
631
+ },
632
+ {
633
+ label: 'Email',
634
+ attribute: 'email',
635
+ type: String,
636
+ tab: 'Datos Usuario',
637
+ slotProps: { input: { fullWidth: true, "data-testid": "email-input" } },
638
+ //validate: (email: string) => (email && email.indexOf('@') > 0 ? undefined : 'Invalid email')
639
+ },
640
+ {
641
+ label: 'Contraseña',
642
+ attribute: 'password',
643
+ type: String,
644
+ isPassword: true,
645
+ slotProps: { input: { fullWidth: true, autoComplete: "new-password" } },
646
+ inList: false,
647
+ tab: 'Contraseña',
648
+ validate: (password: string) => {
649
+ if (password && password.length < 6 && password.length > 1) {
650
+ throw Error('Min 6 caracteres');
651
+ }
652
+ },
653
+ },
654
+ {
655
+ label: 'Confirmar Contraseña',
656
+ attribute: 'password_confirmation',
657
+ type: String,
658
+ isPassword: true,
659
+ slotProps: { input: { fullWidth: true, autoComplete: "new-password" } },
660
+ inList: false,
661
+ tab: 'Contraseña',
662
+ validate: (password: string, values: any) => {
663
+
664
+ if (values.password !== "" && (values.password !== password)) {
665
+ throw Error('Contraseñas no coinciden.');
666
+ }
667
+ },
668
+ },
669
+ {
670
+ // @TODO Solo mostrar cuando se está creando:
671
+ label: 'Genear Contraseña Aleatorea Automáticamente',
672
+ attribute: 'generate_password',
673
+ type: Boolean,
674
+ inList: false,
675
+ tab: 'Contraseña',
676
+ },
677
+ {
678
+ tab: 'Datos Usuario',
679
+ label: 'Roles',
680
+ attribute: 'roles',
681
+ listAttribute: 'role_ids',
682
+ type: 'system/role.name',
683
+ //type: Object,
684
+ // TODO Agregar un filtro, solo para traer los roles de cliente.
685
+ //pagination: false,
686
+ multiple: true,
687
+ inList: false,
688
+ inShow: false,
689
+ //custom: true,
690
+ //componentProps:{ options: {fullwidth: true} },
691
+ //component: SelectArrayInput,
692
+ //searchField: "subdomain"
693
+ },
694
+ {
695
+ tab: 'Datos Usuario',
696
+ label: 'Roles',
697
+ attribute: 'roles',
698
+ listAttribute: 'role_ids',
699
+ type: 'system/role.name',
700
+ //type: Object,
701
+ // TODO Agregar un filtro, solo para traer los roles de cliente.
702
+ //pagination: false,
703
+ multiple: true,
704
+ inEdit: false,
705
+ inCreate: false,
706
+
707
+ //custom: true,
708
+ //componentProps:{ options: {fullwidth: true} },
709
+ //component: ReferenceArrayField,
710
+ //searchField: "subdomain"
711
+ },
712
+ {
713
+ tab: 'Datos Usuario',
714
+ label: 'Cliente',
715
+ attribute: 'tenant_id',
716
+ //listAttribute: 'name',
717
+ type: 'system/tenant.name',
718
+ //type: Object,
719
+ // TODO Agregar un filtro, solo para traer los roles de cliente.
720
+ pagination: false,
721
+ multiple: false,
722
+ //custom: true,
723
+ //componentProps: {multiple:false},
724
+ //componentProps: { options: {fullwidth: true} },
725
+ component: SelectInput,
726
+ fieldProps: {
727
+ allowEmpty: true, // Allow empty selection
728
+ emptyText: 'Sin cliente', // Text for empty option
729
+ },
730
+ componentProps: {
731
+ parse: (value: any) => {
732
+ console.log('Parsing tenant_id value:', value); // Debug log
733
+ // Convert empty string or falsy values to null
734
+ if (value === '' || value === undefined || value === 'null') {
735
+ console.log('Converting to null');
736
+ return null;
737
+ }
738
+ // Convert string numbers to actual numbers
739
+ if (typeof value === 'string' && !isNaN(Number(value))) {
740
+ const numValue = Number(value);
741
+ console.log('Converting to number:', numValue);
742
+ return numValue;
743
+ }
744
+ console.log('Returning original value:', value);
745
+ return value;
746
+ },
747
+ format: (value: any) => {
748
+ console.log('Formatting tenant_id value:', value); // Debug log
749
+ // Format null/undefined as empty string for display
750
+ if (value === null || value === undefined) {
751
+ return '';
752
+ }
753
+ return value;
754
+ }
755
+ },
756
+ processor: 'Null',
757
+
758
+ },
759
+ {
760
+ attribute: 'active',
761
+ type: Boolean,
762
+ inList: true,
763
+ label: 'Activo',
764
+ tab: 'Datos Usuario',
765
+ processor: 'Boolean',
766
+ },
767
+ /*{
768
+ attribute: 'avatar',
769
+ listAttribute: 'system/userclients.avatar',
770
+ type: ImageInput, // TODO: el componente no muestra la imágen
771
+ inList: false,
772
+ label: 'Imágen',
773
+ tab: 'Datos Usuario',
774
+ processor: 'RawFile',
775
+ //validate: (password: string) => (password && password.length >= 6 ? undefined : <div>Password is too short</div>)
776
+ },*/
777
+ ],
778
+ //references: [{ reference: 'roles', target: 'role', schema: rolesSchema }]
779
+ //references: [{ reference: 'roles', target: 'id', schema: roleSchema }],
780
+ icon: <Person />,
781
+ redirectAfterUpdate: false,
782
+ showDialogAfterSubmit: true,
783
+ showNotifyAfterSubmit: true,
784
+ menu: [
785
+ {
786
+ title: 'resource.system.users.menu_list',
787
+ redirect: '/system/user',
788
+ },
789
+ {
790
+ title: "🗑",
791
+ redirect: "/system/user/trash",
792
+ }
793
+ ],
794
+ //{
795
+ // title: "🗑",
796
+ // redirect: "/trash/admin/user",
797
+ //}],
798
+ mainAction: {
799
+ title: 'resource.system.users.main_action',
800
+ // type: "ghost",
801
+ redirect: '/system/user/create',
802
+ },
803
+ mutationMode: 'pessimistic',
804
+ // isFormData: true,
805
+ dataGridProps: { stickyHeader: true },
806
+ dataGridWrapper: (props: any) => (
807
+ <TableContainer sx={{ maxHeight: 800 }}>{props.children}</TableContainer>
808
+ ),
809
+ formPostFormatter: (params, form) => {
810
+ return form;
811
+ },
812
+ /*postFormatter: (params, method) => {
813
+
814
+ if (method === 'update') {
815
+ params._method = 'PUT';
816
+ }
817
+ params.role_id = params.role_ids ? params.role_ids[0] : null;
818
+
819
+ // Handle tenant_id properly - ensure it's null when not selected
820
+ if (params.tenant_id === '' || params.tenant_id === undefined || params.tenant_id === 'null') {
821
+ params.tenant_id = null;
822
+ } else if (params.tenant_id && typeof params.tenant_id === 'string') {
823
+ // Convert string to number if it's a valid number
824
+ const numValue = Number(params.tenant_id);
825
+ if (!isNaN(numValue)) {
826
+ params.tenant_id = numValue;
827
+ }
828
+ }
829
+
830
+ console.log('Processed params:', params); // Debug log
831
+
832
+ return params;
833
+ },*/
834
+ ...drawerSettings,
835
+ },
836
+
837
+ // ============ Subscription Plans Management ============
838
+ {
839
+ roles: [DASHAppConstants.system.SYSTEM_ROLE],
840
+ component: ResourceTemplate,
841
+ model: 'system/subscription-plan',
842
+ label: 'Subscription Plans',
843
+ //group: 'resource.groups.system_resources',
844
+ group: "System",
845
+ icon: <CardMembershipIcon />,
846
+ trash: true,
847
+
848
+ // Context wrapper for fetching limit formats and addon formats from backend
849
+ contextComponent: ({ resourceConfig, mode, children }) => {
850
+ console.log("SubscriptionPlanFormatsProvider", resourceConfig, mode);
851
+ return mode === "list" ? children : (
852
+ <SubscriptionPlanFormatsProvider cacheSeconds={300}>
853
+ {children}
854
+ </SubscriptionPlanFormatsProvider>
855
+ );
856
+ },
857
+
858
+ schema: subscriptionPlanSchema,
859
+
860
+ menu: [
861
+ {
862
+ title: 'All Plans',
863
+ redirect: '/system/subscription-plan',
864
+ },
865
+ ],
866
+
867
+ mainAction: {
868
+ title: 'Create Plan',
869
+ fn: "redirect",
870
+ mode: "create",
871
+ redirect: "create",
872
+ },
873
+
874
+ referenceFilters: [
875
+ {
876
+ id: "name",
877
+ label: "Plan Name",
878
+ source: "name",
879
+ reference: null,
880
+ optionText: null,
881
+ alwaysOn: true,
882
+ },
883
+ {
884
+ id: "is_active",
885
+ label: "Active",
886
+ source: "is_active",
887
+ reference: null,
888
+ optionText: null,
889
+ alwaysOn: false,
890
+ },
891
+ ],
892
+
893
+ // Enable all CRUD operations
894
+ create: true,
895
+ view: true,
896
+ refreshAfter: true,
897
+ toolbarCreateButton: { enabled: true },
898
+
899
+ // Form configuration
900
+ mutationMode: 'pessimistic',
901
+ editProps: {
902
+ queryOptions: { meta: { forceFetch: true } },
903
+ undoable: false,
904
+ emptyWhileLoading: true,
905
+ },
906
+
907
+ // Data grid configuration
908
+ dataGridProps: { stickyHeader: true },
909
+ dataGridWrapper: (props: any) => (
910
+ <TableContainer sx={{ maxHeight: 800 }}>{props.children}</TableContainer>
911
+ ),
912
+ listEditButton: { enabled: true },
913
+ listViewButton: { enabled: true },
914
+
915
+ // Post-processing for form data
916
+ postFormatter: (params, method) => {
917
+ // Ensure limits is properly formatted as an object
918
+ if (params.limits && typeof params.limits === 'object') {
919
+ // Clean up null/undefined values
920
+ const cleanedLimits: Record<string, any> = {};
921
+ Object.entries(params.limits).forEach(([key, value]) => {
922
+ // Convert empty strings to null for integer fields
923
+ if (value === '' || value === undefined) {
924
+ cleanedLimits[key] = null;
925
+ } else {
926
+ cleanedLimits[key] = value;
927
+ }
928
+ });
929
+ params.limits = cleanedLimits;
930
+ }
931
+
932
+ // Ensure prices is properly formatted as an object
933
+ if (params.prices && typeof params.prices === 'object') {
934
+ // Clean up null/undefined/empty values and ensure integer values
935
+ const cleanedPrices: Record<string, number> = {};
936
+ Object.entries(params.prices).forEach(([currencyCode, value]) => {
937
+ // Only include valid numeric values
938
+ if (value !== '' && value !== undefined && value !== null) {
939
+ const numValue = parseInt(String(value), 10);
940
+ if (!isNaN(numValue)) {
941
+ cleanedPrices[currencyCode] = numValue;
942
+ }
943
+ }
944
+ });
945
+ params.prices = cleanedPrices;
946
+ }
947
+
948
+ // Ensure billing_cycle has a default value (required field)
949
+ if (!params.billing_cycle) {
950
+ params.billing_cycle = 'monthly';
951
+ }
952
+
953
+ // Ensure trial_days has a default value
954
+ if (params.trial_days === undefined || params.trial_days === null) {
955
+ params.trial_days = 0;
956
+ }
957
+
958
+ // Ensure tier has a default value
959
+ if (params.tier === undefined || params.tier === null) {
960
+ params.tier = 1;
961
+ }
962
+
963
+ return params;
964
+ },
965
+
966
+ redirectAfterUpdate: false,
967
+ redirectAfterCreate: true,
968
+ ...drawerSettings,
969
+ },
970
+
971
+
972
+ {
973
+ roles: [DASHAppConstants.system.SYSTEM_ROLE],
974
+ component: ResourceTemplate,
975
+ trash: true,
976
+ model: "ecommerce/currency",
977
+ label: "resource.ecommerce.currencies.label",
978
+ schema: [
979
+ {
980
+ label: 'Código',
981
+ attribute: 'code',
982
+ type: String,
983
+ fieldOptions: {
984
+ helperText: 'E.g: CLP | USD ...'
985
+ }
986
+
987
+ },
988
+ {
989
+ label: 'Formato',
990
+ attribute: 'format',
991
+ type: String,
992
+ fieldOptions: {
993
+ helperText: 'E.g: 0.00 | 0,0.00 | 0'
994
+ }
995
+ },
996
+ {
997
+ label: 'Símbolo',
998
+ attribute: 'symbol',
999
+ type: String
1000
+ },
1001
+ {
1002
+ label: 'Enabled',
1003
+ attribute: 'is_enabled',
1004
+ type: Boolean
1005
+ },
1006
+ {
1007
+ label: 'Número formateado',
1008
+ attribute: 'formateado',
1009
+ type: Number,
1010
+ custom: true,
1011
+ inList: false,
1012
+ component: FormatCurrency
1013
+ },
1014
+ ],
1015
+ //references: [{ reference: 'roles', target: 'role', schema: rolesSchema }]
1016
+ //references: [{ reference: 'roles', target: 'id', schema: roleSchema }],
1017
+ icon: <Person />,
1018
+ // group: "resource.groups.system_resources",
1019
+ group: "System",
1020
+ menu: [
1021
+ {
1022
+ title: "resource.ecommerce.currencies.menu_list",
1023
+ redirect: "/ecommerce/currency",
1024
+ },
1025
+ {
1026
+ title: "🗑",
1027
+ redirect: "/ecommerce/currency/trash",
1028
+ },
1029
+ ],
1030
+
1031
+ mainAction: {
1032
+ title: "resource.ecommerce.currencies.main_action",
1033
+ mode: "create",
1034
+ fn: "virtualhash",
1035
+ redirect: "inline/create",
1036
+ },
1037
+ drawer: true,
1038
+ drawerOptions: {
1039
+ create: true,
1040
+ edit: true,
1041
+ view: false
1042
+ },
1043
+
1044
+ mutationMode: "pessimistic",
1045
+ saveButtonAlwaysEnabled: true,
1046
+ listProps: { storeKey: false, filterDefaultValues: { show_disabled: true } }, // deshabilita persistencia deel estado, cache de los valores seleccionados sort, page, etc.
1047
+ resetSelectedIdsOnLoad: true,
1048
+ },
1049
+
1050
+ // ============ Language Management ============
1051
+ {
1052
+ roles: [DASHAppConstants.system.SYSTEM_ROLE],
1053
+ component: ResourceTemplate,
1054
+ trash: true,
1055
+ model: "common/language",
1056
+ label: "resource.common.languages.label",
1057
+ schema: [
1058
+ {
1059
+ label: 'Code',
1060
+ attribute: 'code',
1061
+ type: String,
1062
+ fieldOptions: {
1063
+ helperText: 'ISO 639-1 code (e.g., en, es, pt)'
1064
+ }
1065
+ },
1066
+ {
1067
+ label: 'Name',
1068
+ attribute: 'name',
1069
+ type: String,
1070
+ fieldOptions: {
1071
+ helperText: 'Language name in English'
1072
+ }
1073
+ },
1074
+ {
1075
+ label: 'Native Name',
1076
+ attribute: 'native_name',
1077
+ type: String,
1078
+ fieldOptions: {
1079
+ helperText: 'Language name in native language (e.g., Español)'
1080
+ }
1081
+ },
1082
+ {
1083
+ label: 'Active',
1084
+ attribute: 'is_active',
1085
+ type: Boolean
1086
+ },
1087
+ {
1088
+ label: 'Translations',
1089
+ attribute: 'translations',
1090
+ type: Object,
1091
+ inList: false,
1092
+ inShow: true,
1093
+ inEdit: true,
1094
+ inCreate: true,
1095
+ fieldOptions: {
1096
+ helperText: 'JSON key-value pairs for translations'
1097
+ }
1098
+ },
1099
+ ],
1100
+ icon: <Person />,
1101
+ group: "System",
1102
+ menu: [
1103
+ {
1104
+ title: "resource.common.languages.menu_list",
1105
+ redirect: "/common/language",
1106
+ },
1107
+ {
1108
+ title: "🗑",
1109
+ redirect: "/common/language/trash",
1110
+ },
1111
+ ],
1112
+
1113
+ mainAction: {
1114
+ title: "resource.common.languages.main_action",
1115
+ mode: "create",
1116
+ fn: "virtualhash",
1117
+ redirect: "inline/create",
1118
+ },
1119
+ drawer: true,
1120
+ drawerOptions: {
1121
+ create: true,
1122
+ edit: true,
1123
+ view: false
1124
+ },
1125
+
1126
+ mutationMode: "pessimistic",
1127
+ saveButtonAlwaysEnabled: true,
1128
+ listProps: { storeKey: false },
1129
+ resetSelectedIdsOnLoad: true,
1130
+ }
1131
+
1132
+ ];
1133
+
1134
+
1135
+ export default systemResources;