@dashadmin/dash-admin 1.3.73 → 1.3.74-srcfree.2

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 (553) hide show
  1. package/dist/AppAsyncWrapper.d.ts +3 -0
  2. package/dist/AppWrapper.d.ts +3 -0
  3. package/dist/DASHAdmin.d.ts +38 -0
  4. package/dist/RoutingWrapper.d.ts +10 -0
  5. package/dist/classes/DASHStorageClass.d.ts +5 -0
  6. package/dist/components/Input/RichTextField.d.ts +4 -0
  7. package/dist/components/Redirect.d.ts +9 -0
  8. package/dist/components/avatar/Avatar.d.ts +7 -0
  9. package/dist/components/avatar/SingleImageUploader.d.ts +9 -0
  10. package/dist/components/currency/Format.d.ts +4 -0
  11. package/dist/components/custom/Redirect.d.ts +7 -0
  12. package/dist/components/error/Error.d.ts +31 -0
  13. package/dist/components/geocoding/GeocodingField.d.ts +4 -0
  14. package/dist/components/i18n/BridgedLocalesMenuButton.d.ts +7 -0
  15. package/dist/components/i18n/LangSwitcher.d.ts +10 -0
  16. package/dist/components/loader/GlobalLoader.d.ts +6 -0
  17. package/dist/components/logs/LogFile.d.ts +6 -0
  18. package/dist/components/logs/LogFileById.d.ts +6 -0
  19. package/dist/components/logs/LogViewer.d.ts +8 -0
  20. package/dist/components/menu/AppMenu.d.ts +7 -0
  21. package/dist/components/menu/CustomMenuItemLink.d.ts +12 -0
  22. package/dist/components/menu/DarkToggleMode.d.ts +3 -0
  23. package/dist/components/menu/LanguageToggleMode.d.ts +3 -0
  24. package/dist/components/misc/CustomImageInput.d.ts +4 -0
  25. package/dist/components/misc/DASHGlobalErrorHandler.d.ts +10 -0
  26. package/dist/components/misc/DarkModeSwitcher.d.ts +3 -0
  27. package/dist/components/misc/HorizontalScroller.d.ts +14 -0
  28. package/dist/components/misc/LanguageSwitcher.d.ts +10 -0
  29. package/dist/components/misc/MuiSimpleJsonTable.d.ts +16 -0
  30. package/dist/components/misc/MultiLevelTable.d.ts +18 -0
  31. package/dist/components/misc/NoResults.d.ts +6 -0
  32. package/dist/components/misc/PDFViewer.d.ts +4 -0
  33. package/dist/components/navigation/Breadcrumbs.d.ts +14 -0
  34. package/dist/components/navigation/BreadcrumbsManager.d.ts +14 -0
  35. package/{src/components/navigation/index.tsx → dist/components/navigation/index.d.ts} +0 -1
  36. package/dist/components/panel/Error.d.ts +31 -0
  37. package/dist/components/permission/AvailablePermissionsContext.d.ts +11 -0
  38. package/dist/components/permission/PermissionsSelector.d.ts +4 -0
  39. package/dist/components/permission/PermissionsSelectorList.d.ts +4 -0
  40. package/dist/components/racustombuttons/CustomRAButton.d.ts +23 -0
  41. package/dist/components/racustombuttons/QuickButton.d.ts +15 -0
  42. package/dist/components/racustombuttons/QuickEditButton.d.ts +28 -0
  43. package/dist/components/racustombuttons/QuickIconButton.d.ts +27 -0
  44. package/dist/components/scrollbar/Scrollbar.d.ts +7 -0
  45. package/dist/components/selects/MultiSelect.d.ts +4 -0
  46. package/dist/components/selects/RASearchableSelect.d.ts +25 -0
  47. package/dist/components/selects/RASearchableSelectChips.d.ts +29 -0
  48. package/dist/components/selects/SearchableSelect.d.ts +3 -0
  49. package/dist/components/serviceAccount/ApiKeyRevealDialog.d.ts +7 -0
  50. package/dist/components/serviceAccount/ServiceAccountStatusSwitch.d.ts +4 -0
  51. package/dist/components/subscription/BillingCycleSelectInput.d.ts +3 -0
  52. package/dist/components/subscription/PlanAddonsSettings.d.ts +4 -0
  53. package/dist/components/subscription/PlanAuditLog.d.ts +4 -0
  54. package/dist/components/subscription/PlanFeaturesSettings.d.ts +4 -0
  55. package/dist/components/subscription/PlanLimitsSettings.d.ts +4 -0
  56. package/dist/components/subscription/PlanMetadataSettings.d.ts +4 -0
  57. package/dist/components/subscription/PlanPricesSettings.d.ts +4 -0
  58. package/{src/components/subscription/index.ts → dist/components/subscription/index.d.ts} +0 -2
  59. package/dist/components/svgelements/SvgLoading.d.ts +3 -0
  60. package/dist/components/svgelements/SvgLogo.d.ts +3 -0
  61. package/dist/components/svgelements/SvgLogoMin.d.ts +3 -0
  62. package/dist/components/svgelements/SvgShipping.d.ts +3 -0
  63. package/dist/components/tenancy/GlobalTenantWrapper.d.ts +6 -0
  64. package/dist/components/tenancy/TenantSwitcher.d.ts +16 -0
  65. package/dist/components/tenant/SettingsSections.d.ts +11 -0
  66. package/dist/components/tenant/TenancyPlan.d.ts +4 -0
  67. package/dist/components/tenant/TenancyPlan.js +307 -0
  68. package/dist/components/tenant/TenancySettings.d.ts +4 -0
  69. package/dist/components/tenant/TenantAttributes.d.ts +4 -0
  70. package/dist/components/tenant/TenantAttributesContext.d.ts +10 -0
  71. package/dist/components/tenant/TenantSelector.d.ts +11 -0
  72. package/dist/components/tenant/TenantSettings.d.ts +4 -0
  73. package/dist/components/tenant/TenantSettingsContext.d.ts +11 -0
  74. package/dist/components/tenant/TenantTheme.d.ts +4 -0
  75. package/dist/components/user/AvatarComponent.d.ts +6 -0
  76. package/dist/components/user/TenantAvatarComponent.d.ts +15 -0
  77. package/dist/components/user/UserPreferences.d.ts +3 -0
  78. package/dist/config/ACTIONS.d.ts +3 -0
  79. package/dist/config/ConstantsService.d.ts +14 -0
  80. package/dist/config/DASHAdminSystemConstants.d.ts +120 -0
  81. package/dist/config/PARSERS.d.ts +5 -0
  82. package/dist/contexts/DashQueryClientContext.d.ts +19 -0
  83. package/dist/contexts/DashResourceContext.d.ts +11 -0
  84. package/dist/contexts/I18nBridgeContext.d.ts +18 -0
  85. package/dist/contexts/I18nBridgeSetter.d.ts +3 -0
  86. package/dist/contexts/I18nReduxSync.d.ts +6 -0
  87. package/dist/contexts/SubscriptionPlanFormatsProvider.d.ts +13 -0
  88. package/dist/contexts/SystemRequestsCache.d.ts +16 -0
  89. package/dist/contexts/auth/AuthContext.d.ts +40 -0
  90. package/dist/contexts/auth/AuthContextLocalStorage.d.ts +27 -0
  91. package/dist/contexts/auth/DASHAuthenticationService.d.ts +46 -0
  92. package/dist/contexts/auth/WindowContext.d.ts +8 -0
  93. package/{src/contexts/auth/index.tsx → dist/contexts/auth/index.d.ts} +0 -1
  94. package/dist/contexts/com/FCMContext.d.ts +62 -0
  95. package/dist/contexts/com/LaravelEchoContext.d.ts +18 -0
  96. package/dist/contexts/com/LaravelEchoMgr.d.ts +8 -0
  97. package/dist/contexts/com/components/DefaultNotificationComponent.d.ts +6 -0
  98. package/dist/contexts/com/components/EchoNotificationsCenter.d.ts +3 -0
  99. package/dist/contexts/com/components/NotificationAttributesTable.d.ts +8 -0
  100. package/dist/contexts/com/components/NotificationRenderer.d.ts +8 -0
  101. package/dist/contexts/com/components/NotificationsWidget.d.ts +17 -0
  102. package/dist/contexts/com/components/notificationFormats.d.ts +38 -0
  103. package/dist/contexts/com/useLaravelEcho.d.ts +37 -0
  104. package/dist/contexts/dictionary/DictionaryContext.d.ts +21 -0
  105. package/dist/default-theme/DASHAppProviders.d.ts +21 -0
  106. package/dist/default-theme/DashThemeContext.d.ts +17 -0
  107. package/dist/default-theme/DashThemeHelperProvider.d.ts +10 -0
  108. package/dist/default-theme/DomainAppLayout.d.ts +13 -0
  109. package/dist/default-theme/DomainHeader.d.ts +6 -0
  110. package/dist/default-theme/DomainTheme.d.ts +8 -0
  111. package/dist/default-theme/FullLayoutMarkup.d.ts +9 -0
  112. package/dist/default-theme/StaticLayout.d.ts +5 -0
  113. package/{src/default-theme/index.tsx → dist/default-theme/index.d.ts} +0 -3
  114. package/dist/default-theme/menu/AppDashboardGrid.d.ts +24 -0
  115. package/dist/default-theme/menu/AppMaterialMenu.d.ts +11 -0
  116. package/dist/default-theme/menu/AppMenuComponents/SubmenuPortal.d.ts +15 -0
  117. package/dist/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItem.d.ts +22 -0
  118. package/dist/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItems.d.ts +11 -0
  119. package/dist/default-theme/menu/AppMenuComponents/expanded/CollapsableSidebarMenu.d.ts +4 -0
  120. package/dist/default-theme/menu/AppMenuComponents/expanded/SidebarItem.d.ts +3 -0
  121. package/dist/default-theme/menu/AppMenuComponents/getItem.d.ts +3 -0
  122. package/dist/default-theme/menu/AppMenuComponents/interfaces.d.ts +36 -0
  123. package/dist/default-theme/menu/AppMenuComponents/submenuConstants.d.ts +7 -0
  124. package/dist/default-theme/menu/AppSidebarMaterial.d.ts +8 -0
  125. package/dist/default-theme/menu/SidebarActions.d.ts +8 -0
  126. package/dist/default-theme/updateDomCssVariables.d.ts +6 -0
  127. package/dist/helpers/checkRole.d.ts +2 -0
  128. package/dist/helpers/parseAxiosError.d.ts +1 -0
  129. package/dist/hooks/audio/useAudio.d.ts +2 -0
  130. package/dist/hooks/axios.d.ts +5 -0
  131. package/dist/hooks/data/useDashboardStats.d.ts +13 -0
  132. package/dist/hooks/data/usePackageByClientsStats.d.ts +13 -0
  133. package/dist/hooks/data/usePackageByCommunesStats.d.ts +13 -0
  134. package/dist/hooks/data/usePackageStats.d.ts +13 -0
  135. package/dist/hooks/data/usePackageWithdrawDetails.d.ts +25 -0
  136. package/dist/hooks/data/useStats.d.ts +9 -0
  137. package/dist/hooks/isCurrentPath.d.ts +3 -0
  138. package/dist/hooks/notifications/WSMessagesManager.d.ts +4 -0
  139. package/dist/hooks/notifications/WSPusherManager.d.ts +3 -0
  140. package/dist/hooks/useBreadcrumbs.d.ts +21 -0
  141. package/dist/hooks/useClickOutside.d.ts +2 -0
  142. package/dist/hooks/useFormPersistance.d.ts +13 -0
  143. package/dist/hooks/useGlobalErrorMediator.d.ts +5 -0
  144. package/dist/hooks/useGlobalLoaderMgr.d.ts +3 -0
  145. package/dist/hooks/useHash.d.ts +2 -0
  146. package/dist/hooks/useLocalStorage.d.ts +2 -0
  147. package/dist/hooks/usePolyglotTranslation.d.ts +11 -0
  148. package/dist/hooks/usePrevious.d.ts +2 -0
  149. package/dist/hooks/usePrintSelected.d.ts +12 -0
  150. package/dist/hooks/useVirtualHash.d.ts +5 -0
  151. package/dist/hooks/window/useWindowSize.d.ts +6 -0
  152. package/{src/index.tsx → dist/index.d.ts} +22 -91
  153. package/dist/interfaces/IAppResourceConfig.d.ts +10 -0
  154. package/dist/interfaces/Log.d.ts +15 -0
  155. package/dist/interfaces/Tenant.d.ts +25 -0
  156. package/{src/interfaces/communication/IActions.tsx → dist/interfaces/communication/IActions.d.ts} +1 -2
  157. package/{src/interfaces/communication/INotification.tsx → dist/interfaces/communication/INotification.d.ts} +5 -7
  158. package/{src/interfaces/communication/IPayload.tsx → dist/interfaces/communication/IPayload.d.ts} +1 -1
  159. package/dist/interfaces/communication/IRequestAction.d.ts +10 -0
  160. package/dist/interfaces/communication/IRequestPayload.d.ts +7 -0
  161. package/dist/interfaces/communication/IResponseAction.d.ts +7 -0
  162. package/{src/interfaces/misc/IAny.tsx → dist/interfaces/misc/IAny.d.ts} +1 -1
  163. package/dist/interfaces/misc/IFlashMessage.d.ts +10 -0
  164. package/dist/interfaces/navigation/IAppMenu.d.ts +11 -0
  165. package/dist/interfaces/navigation/ICollapsableSidebarMenu.d.ts +10 -0
  166. package/dist/interfaces/navigation/IMenuItem.d.ts +14 -0
  167. package/{src/interfaces/notifications/IModel.tsx → dist/interfaces/notifications/IModel.d.ts} +1 -2
  168. package/dist/interfaces/notifications/IModelField.d.ts +10 -0
  169. package/dist/interfaces/notifications/IUserNotification.d.ts +11 -0
  170. package/{src/interfaces/notifications/IUserNotificationData.tsx → dist/interfaces/notifications/IUserNotificationData.d.ts} +6 -7
  171. package/dist/interfaces/notifications/IUserNotificationPayload.d.ts +10 -0
  172. package/dist/interfaces/user/IGetAuth.d.ts +75 -0
  173. package/dist/interfaces/user/ITenantSettings.d.ts +3 -0
  174. package/dist/interfaces/user/IUser.d.ts +60 -0
  175. package/dist/interfaces/user/IUserSettings.d.ts +36 -0
  176. package/{src/interfaces.tsx → dist/interfaces.d.ts} +5 -6
  177. package/dist/layout/AppLayout.d.ts +5 -0
  178. package/dist/layout/ApplicationLayout.d.ts +22 -0
  179. package/dist/layout/MotionWrapper.d.ts +22 -0
  180. package/dist/layout/MotionWrapper.original.d.ts +22 -0
  181. package/dist/layout/ResourceMenu.d.ts +7 -0
  182. package/dist/layout/ResoureLayout.d.ts +8 -0
  183. package/dist/layout/TransitionWrapper.d.ts +8 -0
  184. package/dist/pages/ChangePassword.d.ts +6 -0
  185. package/dist/pages/DASHLanding.d.ts +5 -0
  186. package/dist/pages/DASHLightWeightLogin.d.ts +6 -0
  187. package/dist/pages/DASHSimpleLogin.d.ts +6 -0
  188. package/dist/pages/Login.d.ts +3 -0
  189. package/dist/pages/Profile.d.ts +3 -0
  190. package/dist/pages/RecoverPassword.d.ts +3 -0
  191. package/dist/pages/SingleImageUploader.d.ts +8 -0
  192. package/dist/pages/VerifyAccount.d.ts +5 -0
  193. package/dist/providers/authProvider.d.ts +15 -0
  194. package/dist/providers/dataProvider.d.ts +31 -0
  195. package/dist/providers/i18n/en.d.ts +569 -0
  196. package/dist/providers/i18n/es.d.ts +2 -0
  197. package/dist/providers/i18n/languages.d.ts +571 -0
  198. package/dist/providers/i18n/mergeTranslations.d.ts +3 -0
  199. package/dist/providers/i18nProvider.d.ts +2 -0
  200. package/dist/react-admin-dash/RADashComponent.d.ts +7 -0
  201. package/dist/react-admin-dash/Resource.d.ts +16 -0
  202. package/dist/resources/Brand/BrandResource.d.ts +3 -0
  203. package/dist/resources/DASHResourceLoader.d.ts +17 -0
  204. package/dist/resources/Log/LogResource.d.ts +3 -0
  205. package/dist/resources/Tenant/ImpersonateTenantResource.d.ts +5 -0
  206. package/dist/resources/Trash/TrashTemplate.d.ts +3 -0
  207. package/dist/resources/User/components/AvatarUploadField.d.ts +6 -0
  208. package/dist/resources/User/components/PasswordFields.d.ts +8 -0
  209. package/dist/resources/User/getProfileMenu.d.ts +4 -0
  210. package/dist/resources/User/profileResource.d.ts +3 -0
  211. package/dist/resources/User/userLayout.d.ts +2 -0
  212. package/dist/resources/User/userResource.d.ts +3 -0
  213. package/dist/resources/User/userSchema.d.ts +3 -0
  214. package/dist/resources/User/usersFilters.d.ts +3 -0
  215. package/dist/resources.d.ts +11 -0
  216. package/dist/schemas/log.d.ts +3 -0
  217. package/dist/schemas/notification.d.ts +3 -0
  218. package/dist/schemas/permissions.d.ts +3 -0
  219. package/dist/schemas/roles.d.ts +3 -0
  220. package/dist/schemas/rolesDataGrid.d.ts +3 -0
  221. package/dist/schemas/subscription/components/SubscriptionActions.d.ts +4 -0
  222. package/dist/schemas/subscription/components/SubscriptionPaymentHistory.d.ts +4 -0
  223. package/dist/schemas/subscription/components/SubscriptionPlanFeatures.d.ts +4 -0
  224. package/dist/schemas/subscription/components/SubscriptionPlanPreview.d.ts +4 -0
  225. package/dist/schemas/subscription/components/SubscriptionPlanStats.d.ts +4 -0
  226. package/dist/schemas/subscription/components/SubscriptionStatusIndicator.d.ts +4 -0
  227. package/dist/schemas/subscription/subscriptionPlanSchema.d.ts +3 -0
  228. package/dist/schemas/subscription/subscriptionSchema.d.ts +3 -0
  229. package/dist/schemas/subscriptionPlan.d.ts +3 -0
  230. package/dist/schemas/tenant.d.ts +3 -0
  231. package/dist/schemas/tenantUser.d.ts +3 -0
  232. package/dist/schemas/tenant_superadmin.d.ts +3 -0
  233. package/dist/schemas/user.d.ts +3 -0
  234. package/dist/systemResources.d.ts +3 -0
  235. package/dist/systemResources.js +18 -2
  236. package/dist/systemResources.old.d.ts +3 -0
  237. package/dist/templates/ResourceTemplate.d.ts +10 -0
  238. package/dist/templates/ResourceTemplateCreate.d.ts +3 -0
  239. package/dist/templates/ResourceTemplateEdit.d.ts +3 -0
  240. package/dist/templates/ResourceTemplateFull.d.ts +7 -0
  241. package/dist/templates/ResourceTemplateList.d.ts +8 -0
  242. package/dist/templates/ResourceTemplateShow.d.ts +3 -0
  243. package/dist/templates/TrashTemplate.d.ts +3 -0
  244. package/dist/tenantResources.d.ts +3 -0
  245. package/dist/test_portal_bubbles.d.ts +2 -0
  246. package/dist/theme/AppHeader.d.ts +6 -0
  247. package/dist/theme/AppLayoutSetting.d.ts +28 -0
  248. package/dist/theme/AppLogo.d.ts +8 -0
  249. package/dist/theme/AppSidebar.d.ts +7 -0
  250. package/dist/theme/AppSidebarContent.d.ts +12 -0
  251. package/dist/theme/AppSidebarLogo.d.ts +9 -0
  252. package/dist/theme/components/PageTitle.d.ts +10 -0
  253. package/dist/utils/cache/CacheInvalidatorContext.d.ts +25 -0
  254. package/dist/utils/cache/CacheInvalidatorListenerComponent.d.ts +3 -0
  255. package/dist/utils/cache/useCacheInvalidatorListener.d.ts +4 -0
  256. package/dist/utils/convertFileToBase64.d.ts +2 -0
  257. package/dist/utils/convertToFile.d.ts +2 -0
  258. package/dist/utils/cookies.d.ts +5 -0
  259. package/dist/utils/dashDefaultQueryClient.d.ts +3 -0
  260. package/dist/utils/dataUrlToBlob.d.ts +2 -0
  261. package/dist/utils/deepReplace.d.ts +2 -0
  262. package/dist/utils/getProfileMenu.d.ts +3 -0
  263. package/dist/utils/getTenantSettings.d.ts +3 -0
  264. package/dist/utils/getType.d.ts +2 -0
  265. package/dist/utils/getUserSettings.d.ts +3 -0
  266. package/dist/utils/hasCode.d.ts +2 -0
  267. package/dist/utils/index.d.ts +19 -0
  268. package/dist/utils/injectTenantStyles.d.ts +2 -0
  269. package/dist/utils/isComponent.d.ts +2 -0
  270. package/dist/utils/navEvents.d.ts +28 -0
  271. package/dist/utils/regexp.d.ts +1 -0
  272. package/dist/utils/resolveObjectPath.d.ts +2 -0
  273. package/dist/utils/setNativeValue.d.ts +2 -0
  274. package/dist/utils/slugify.d.ts +1 -0
  275. package/dist/utils/validators/emailValidator.d.ts +2 -0
  276. package/dist/utils/validators/requiredValidator.d.ts +2 -0
  277. package/dist/utils/validators/rutValidator.d.ts +2 -0
  278. package/dist/utils/validators.d.ts +3 -0
  279. package/package.json +25 -22
  280. package/src/AppAsyncWrapper.tsx +0 -42
  281. package/src/AppWrapper.tsx +0 -45
  282. package/src/DASHAdmin.tsx +0 -502
  283. package/src/DASHAdmin.tsx.old +0 -456
  284. package/src/RoutingWrapper.tsx +0 -143
  285. package/src/classes/DASHStorageClass.tsx +0 -8
  286. package/src/components/Input/RichTextField.tsx +0 -27
  287. package/src/components/Redirect.tsx +0 -46
  288. package/src/components/avatar/Avatar.tsx +0 -71
  289. package/src/components/avatar/SingleImageUploader.tsx +0 -107
  290. package/src/components/currency/Format.tsx +0 -79
  291. package/src/components/custom/Redirect.tsx +0 -23
  292. package/src/components/error/Error.tsx +0 -168
  293. package/src/components/geocoding/GeocodingField.tsx +0 -167
  294. package/src/components/i18n/BridgedLocalesMenuButton.tsx +0 -160
  295. package/src/components/i18n/LangSwitcher.tsx +0 -204
  296. package/src/components/loader/GlobalLoader.tsx +0 -49
  297. package/src/components/logs/LogFile.tsx +0 -88
  298. package/src/components/logs/LogFileById.tsx +0 -68
  299. package/src/components/logs/LogViewer.tsx +0 -43
  300. package/src/components/menu/AppMenu.tsx +0 -22
  301. package/src/components/menu/CustomMenuItemLink.tsx +0 -61
  302. package/src/components/menu/DarkToggleMode.tsx +0 -65
  303. package/src/components/menu/LanguageToggleMode.tsx +0 -120
  304. package/src/components/misc/CustomImageInput.tsx +0 -62
  305. package/src/components/misc/DASHGlobalErrorHandler.tsx +0 -194
  306. package/src/components/misc/DarkModeSwitcher.tsx +0 -112
  307. package/src/components/misc/HorizontalScroller.tsx +0 -225
  308. package/src/components/misc/LanguageSwitcher.tsx +0 -199
  309. package/src/components/misc/MUIHtmlToolTip.tsx +0 -15
  310. package/src/components/misc/MuiSimpleJsonTable.tsx +0 -279
  311. package/src/components/misc/MultiLevelTable.tsx +0 -229
  312. package/src/components/misc/NoResults.tsx +0 -28
  313. package/src/components/misc/PDFViewer.tsx +0 -85
  314. package/src/components/navigation/Breadcrumbs.tsx +0 -220
  315. package/src/components/navigation/BreadcrumbsManager.tsx +0 -310
  316. package/src/components/panel/Error.tsx +0 -168
  317. package/src/components/permission/AvailablePermissionsContext.tsx +0 -173
  318. package/src/components/permission/PermissionsSelector.tsx +0 -834
  319. package/src/components/permission/PermissionsSelectorList.tsx +0 -473
  320. package/src/components/racustombuttons/CustomRAButton.tsx +0 -87
  321. package/src/components/racustombuttons/QuickButton.tsx +0 -117
  322. package/src/components/racustombuttons/QuickEditButton.tsx +0 -115
  323. package/src/components/racustombuttons/QuickIconButton.tsx +0 -122
  324. package/src/components/scrollbar/Scrollbar.tsx +0 -31
  325. package/src/components/selects/MultiSelect.tsx +0 -53
  326. package/src/components/selects/RASearchableSelect.tsx +0 -282
  327. package/src/components/selects/RASearchableSelectChips.tsx +0 -308
  328. package/src/components/selects/SearchableSelect.tsx +0 -139
  329. package/src/components/serviceAccount/ApiKeyRevealDialog.tsx +0 -129
  330. package/src/components/serviceAccount/ServiceAccountStatusSwitch.tsx +0 -99
  331. package/src/components/subscription/BillingCycleSelectInput.tsx +0 -68
  332. package/src/components/subscription/PlanAddonsSettings.tsx +0 -563
  333. package/src/components/subscription/PlanAuditLog.tsx +0 -453
  334. package/src/components/subscription/PlanFeaturesSettings.tsx +0 -243
  335. package/src/components/subscription/PlanLimitsSettings.tsx +0 -230
  336. package/src/components/subscription/PlanMetadataSettings.tsx +0 -306
  337. package/src/components/subscription/PlanPricesSettings.tsx +0 -307
  338. package/src/components/svgelements/SvgLoading.tsx +0 -229
  339. package/src/components/svgelements/SvgLogo.tsx +0 -53
  340. package/src/components/svgelements/SvgLogoMin.tsx +0 -64
  341. package/src/components/svgelements/SvgShipping.tsx +0 -673
  342. package/src/components/tenancy/GlobalTenantWrapper.tsx +0 -84
  343. package/src/components/tenancy/TenantSwitcher.tsx +0 -514
  344. package/src/components/tenant/SettingsSections.tsx +0 -151
  345. package/src/components/tenant/TenancySettings.tsx +0 -122
  346. package/src/components/tenant/TenantAttributes.tsx +0 -153
  347. package/src/components/tenant/TenantAttributesContext.tsx +0 -163
  348. package/src/components/tenant/TenantSelector.tsx +0 -142
  349. package/src/components/tenant/TenantSettings.tsx +0 -184
  350. package/src/components/tenant/TenantSettingsContext.tsx +0 -165
  351. package/src/components/tenant/TenantTheme.tsx +0 -172
  352. package/src/components/user/AvatarComponent.tsx +0 -317
  353. package/src/components/user/TenantAvatarComponent.tsx +0 -99
  354. package/src/components/user/UserPreferences.tsx +0 -677
  355. package/src/config/ACTIONS.tsx +0 -26
  356. package/src/config/ConstantsService.tsx +0 -44
  357. package/src/config/DASHAdminSystemConstants.tsx +0 -183
  358. package/src/config/PARSERS.tsx +0 -9
  359. package/src/contexts/DashQueryClientContext.tsx +0 -113
  360. package/src/contexts/DashResourceContext.tsx +0 -34
  361. package/src/contexts/I18nBridgeContext.tsx +0 -156
  362. package/src/contexts/I18nBridgeSetter.tsx +0 -39
  363. package/src/contexts/I18nReduxSync.tsx +0 -27
  364. package/src/contexts/SubscriptionPlanFormatsProvider.tsx +0 -217
  365. package/src/contexts/SystemRequestsCache.tsx +0 -215
  366. package/src/contexts/auth/AuthContext.tsx +0 -567
  367. package/src/contexts/auth/AuthContextLocalStorage.tsx +0 -140
  368. package/src/contexts/auth/DASHAuthenticationService.tsx +0 -915
  369. package/src/contexts/auth/WindowContext.tsx +0 -15
  370. package/src/contexts/com/FCMContext.tsx +0 -415
  371. package/src/contexts/com/LaravelEchoContext.tsx +0 -41
  372. package/src/contexts/com/LaravelEchoMgr.tsx +0 -155
  373. package/src/contexts/com/components/DefaultNotificationComponent.tsx +0 -20
  374. package/src/contexts/com/components/EchoNotificationsCenter.tsx +0 -65
  375. package/src/contexts/com/components/NotificationAttributesTable.tsx +0 -54
  376. package/src/contexts/com/components/NotificationRenderer.tsx +0 -42
  377. package/src/contexts/com/components/NotificationsWidget.tsx +0 -182
  378. package/src/contexts/com/components/notificationFormats.tsx +0 -50
  379. package/src/contexts/com/useLaravelEcho.tsx +0 -432
  380. package/src/contexts/dictionary/DictionaryContext.tsx +0 -94
  381. package/src/declarations.d.ts +0 -17
  382. package/src/default-theme/DASHAppProviders.tsx +0 -117
  383. package/src/default-theme/DashThemeContext.tsx +0 -209
  384. package/src/default-theme/DashThemeContext.tsx.fast +0 -143
  385. package/src/default-theme/DashThemeContext.tsx.old +0 -306
  386. package/src/default-theme/DashThemeHelperProvider.tsx +0 -98
  387. package/src/default-theme/DomainAppLayout.tsx +0 -166
  388. package/src/default-theme/DomainHeader.tsx +0 -162
  389. package/src/default-theme/DomainTheme.tsx +0 -59
  390. package/src/default-theme/FullLayoutMarkup.tsx +0 -231
  391. package/src/default-theme/StaticLayout.tsx +0 -47
  392. package/src/default-theme/menu/AppDashboardGrid.tsx +0 -279
  393. package/src/default-theme/menu/AppMaterialMenu.tsx +0 -546
  394. package/src/default-theme/menu/AppMenuComponents/SubmenuPortal.tsx +0 -61
  395. package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItem.tsx +0 -264
  396. package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItems.tsx +0 -31
  397. package/src/default-theme/menu/AppMenuComponents/expanded/CollapsableSidebarMenu.tsx +0 -293
  398. package/src/default-theme/menu/AppMenuComponents/expanded/SidebarItem.tsx +0 -92
  399. package/src/default-theme/menu/AppMenuComponents/getItem.tsx +0 -17
  400. package/src/default-theme/menu/AppMenuComponents/interfaces.tsx +0 -41
  401. package/src/default-theme/menu/AppMenuComponents/submenuConstants.ts +0 -90
  402. package/src/default-theme/menu/AppSidebarMaterial.tsx +0 -339
  403. package/src/default-theme/menu/SidebarActions.tsx +0 -84
  404. package/src/default-theme/updateDomCssVariables.tsx +0 -176
  405. package/src/helpers/checkRole.tsx +0 -66
  406. package/src/helpers/parseAxiosError.tsx +0 -41
  407. package/src/hooks/audio/useAudio.tsx +0 -39
  408. package/src/hooks/axios.tsx +0 -165
  409. package/src/hooks/data/useDashboardStats.tsx +0 -65
  410. package/src/hooks/data/usePackageByClientsStats.tsx +0 -44
  411. package/src/hooks/data/usePackageByCommunesStats.tsx +0 -44
  412. package/src/hooks/data/usePackageStats.tsx +0 -69
  413. package/src/hooks/data/usePackageWithdrawDetails.tsx +0 -61
  414. package/src/hooks/data/useStats.tsx +0 -86
  415. package/src/hooks/isCurrentPath.tsx +0 -22
  416. package/src/hooks/notifications/WSMessagesManager.tsx +0 -152
  417. package/src/hooks/notifications/WSPusherManager.tsx +0 -92
  418. package/src/hooks/useBreadcrumbs.tsx +0 -329
  419. package/src/hooks/useClickOutside.tsx +0 -57
  420. package/src/hooks/useFormPersistance.tsx +0 -150
  421. package/src/hooks/useGlobalErrorMediator.tsx +0 -43
  422. package/src/hooks/useGlobalLoaderMgr.tsx +0 -21
  423. package/src/hooks/useHash.tsx +0 -27
  424. package/src/hooks/useLocalStorage.tsx +0 -196
  425. package/src/hooks/usePolyglotTranslation.tsx +0 -62
  426. package/src/hooks/usePrevious.tsx +0 -9
  427. package/src/hooks/usePrintSelected.tsx +0 -37
  428. package/src/hooks/useVirtualHash.tsx +0 -33
  429. package/src/hooks/window/useWindowSize.tsx +0 -36
  430. package/src/interfaces/IAppResourceConfig.tsx +0 -20
  431. package/src/interfaces/Log.tsx +0 -16
  432. package/src/interfaces/Tenant.tsx +0 -25
  433. package/src/interfaces/communication/IRequestAction.tsx +0 -10
  434. package/src/interfaces/communication/IRequestPayload.tsx +0 -7
  435. package/src/interfaces/communication/IResponseAction.tsx +0 -7
  436. package/src/interfaces/misc/IFlashMessage.tsx +0 -10
  437. package/src/interfaces/navigation/IAppMenu.ts +0 -14
  438. package/src/interfaces/navigation/ICollapsableSidebarMenu.ts +0 -12
  439. package/src/interfaces/navigation/IMenuItem.ts +0 -16
  440. package/src/interfaces/notifications/IModelField.tsx +0 -8
  441. package/src/interfaces/notifications/IUserNotification.tsx +0 -12
  442. package/src/interfaces/notifications/IUserNotificationPayload.tsx +0 -8
  443. package/src/interfaces/user/IGetAuth.tsx +0 -92
  444. package/src/interfaces/user/ITenantSettings.tsx +0 -3
  445. package/src/interfaces/user/IUser.tsx +0 -60
  446. package/src/interfaces/user/IUserSettings.tsx +0 -43
  447. package/src/layout/AppLayout.tsx +0 -112
  448. package/src/layout/ApplicationLayout.tsx +0 -197
  449. package/src/layout/MotionWrapper.original.tsx +0 -236
  450. package/src/layout/MotionWrapper.tsx +0 -236
  451. package/src/layout/ResourceMenu.tsx +0 -164
  452. package/src/layout/ResoureLayout.tsx +0 -105
  453. package/src/layout/TransitionWrapper.tsx +0 -125
  454. package/src/pages/ChangePassword.tsx +0 -179
  455. package/src/pages/DASHLanding.tsx +0 -22
  456. package/src/pages/DASHLightWeightLogin.tsx +0 -611
  457. package/src/pages/DASHSimpleLogin.tsx +0 -260
  458. package/src/pages/Login.tsx +0 -111
  459. package/src/pages/Profile.tsx +0 -357
  460. package/src/pages/RecoverPassword.tsx +0 -175
  461. package/src/pages/SingleImageUploader.tsx +0 -55
  462. package/src/pages/VerifyAccount.tsx +0 -128
  463. package/src/providers/authProvider.tsx +0 -217
  464. package/src/providers/dataProvider.tsx +0 -672
  465. package/src/providers/i18n/en.ts +0 -646
  466. package/src/providers/i18n/es.ts +0 -652
  467. package/src/providers/i18n/languages.tsx +0 -8
  468. package/src/providers/i18n/mergeTranslations.ts +0 -53
  469. package/src/providers/i18nProvider.tsx +0 -23
  470. package/src/react-admin-dash/RADashComponent.tsx +0 -240
  471. package/src/react-admin-dash/Resource.tsx +0 -77
  472. package/src/resources/Brand/BrandResource.tsx +0 -130
  473. package/src/resources/DASHResourceLoader.ts +0 -180
  474. package/src/resources/Log/LogResource.tsx +0 -73
  475. package/src/resources/Tenant/ImpersonateTenantResource.tsx +0 -113
  476. package/src/resources/Trash/TrashTemplate.tsx +0 -180
  477. package/src/resources/User/components/AvatarUploadField.tsx +0 -57
  478. package/src/resources/User/components/PasswordFields.tsx +0 -73
  479. package/src/resources/User/getProfileMenu.ts +0 -57
  480. package/src/resources/User/profileResource.tsx +0 -51
  481. package/src/resources/User/userLayout.tsx +0 -62
  482. package/src/resources/User/userResource.tsx +0 -111
  483. package/src/resources/User/userSchema.tsx +0 -213
  484. package/src/resources/User/usersFilters.tsx +0 -21
  485. package/src/resources.tsx +0 -280
  486. package/src/schemas/log.tsx +0 -45
  487. package/src/schemas/notification.tsx +0 -42
  488. package/src/schemas/permissions.tsx +0 -44
  489. package/src/schemas/roles.tsx +0 -48
  490. package/src/schemas/rolesDataGrid.tsx +0 -48
  491. package/src/schemas/subscription/components/SubscriptionActions.tsx +0 -153
  492. package/src/schemas/subscription/components/SubscriptionPaymentHistory.tsx +0 -127
  493. package/src/schemas/subscription/components/SubscriptionPlanFeatures.tsx +0 -162
  494. package/src/schemas/subscription/components/SubscriptionPlanPreview.tsx +0 -141
  495. package/src/schemas/subscription/components/SubscriptionPlanStats.tsx +0 -318
  496. package/src/schemas/subscription/components/SubscriptionStatusIndicator.tsx +0 -72
  497. package/src/schemas/subscription/subscriptionPlanSchema.tsx +0 -185
  498. package/src/schemas/subscription/subscriptionSchema.tsx +0 -152
  499. package/src/schemas/subscriptionPlan.ts +0 -422
  500. package/src/schemas/tenant.tsx +0 -129
  501. package/src/schemas/tenantUser.tsx +0 -96
  502. package/src/schemas/tenant_superadmin.tsx +0 -119
  503. package/src/schemas/user.tsx +0 -26
  504. package/src/systemResources.old.tsx +0 -928
  505. package/src/systemResources.tsx +0 -1369
  506. package/src/templates/ResourceTemplate.tsx +0 -240
  507. package/src/templates/ResourceTemplate.tsx.memoized_experiment +0 -350
  508. package/src/templates/ResourceTemplate.tsx.original +0 -396
  509. package/src/templates/ResourceTemplateCreate.tsx +0 -182
  510. package/src/templates/ResourceTemplateEdit.tsx +0 -176
  511. package/src/templates/ResourceTemplateFull.tsx +0 -581
  512. package/src/templates/ResourceTemplateList.tsx +0 -340
  513. package/src/templates/ResourceTemplateOld.tsx.bkup +0 -567
  514. package/src/templates/ResourceTemplateShow.tsx +0 -88
  515. package/src/templates/TrashTemplate.tsx +0 -179
  516. package/src/tenantResources.tsx +0 -223
  517. package/src/test_portal_bubbles.tsx +0 -40
  518. package/src/theme/AppHeader.tsx +0 -52
  519. package/src/theme/AppLayoutSetting.tsx +0 -33
  520. package/src/theme/AppLogo.tsx +0 -13
  521. package/src/theme/AppSidebar.tsx +0 -12
  522. package/src/theme/AppSidebarContent.tsx +0 -105
  523. package/src/theme/AppSidebarLogo.tsx +0 -48
  524. package/src/theme/components/PageTitle.tsx +0 -37
  525. package/src/utils/cache/CacheInvalidatorContext.tsx +0 -125
  526. package/src/utils/cache/CacheInvalidatorListenerComponent.tsx +0 -10
  527. package/src/utils/cache/useCacheInvalidatorListener.tsx +0 -27
  528. package/src/utils/convertFileToBase64.tsx +0 -9
  529. package/src/utils/convertToFile.tsx +0 -14
  530. package/src/utils/cookies.tsx +0 -33
  531. package/src/utils/dashDefaultQueryClient.tsx +0 -34
  532. package/src/utils/dataUrlToBlob.tsx +0 -30
  533. package/src/utils/deepReplace.tsx +0 -19
  534. package/src/utils/getProfileMenu.tsx +0 -41
  535. package/src/utils/getTenantSettings.tsx +0 -9
  536. package/src/utils/getType.tsx +0 -8
  537. package/src/utils/getUserSettings.tsx +0 -8
  538. package/src/utils/hasCode.tsx +0 -14
  539. package/src/utils/index.ts +0 -19
  540. package/src/utils/injectTenantStyles.ts +0 -28
  541. package/src/utils/isComponent.tsx +0 -45
  542. package/src/utils/navEvents.tsx +0 -91
  543. package/src/utils/prototypes.tsx +0 -5
  544. package/src/utils/regexp.tsx +0 -4
  545. package/src/utils/resolveObjectPath.tsx +0 -4
  546. package/src/utils/setNativeValue.tsx +0 -24
  547. package/src/utils/slugify.tsx +0 -11
  548. package/src/utils/validators/emailValidator.tsx +0 -6
  549. package/src/utils/validators/requiredValidator.tsx +0 -5
  550. package/src/utils/validators/rutValidator.tsx +0 -31
  551. package/src/utils/validators.tsx +0 -96
  552. /package/{src/components/permission/tsx → dist/components/tenant/AvailablePermissionsContext.d.ts} +0 -0
  553. /package/{src/components/tenant/AvailablePermissionsContext.tsx → dist/utils/prototypes.d.ts} +0 -0
@@ -1,677 +0,0 @@
1
- import React, { useState, useEffect, useCallback, useMemo, useRef } from "react";
2
- import {
3
- CircularProgress,
4
- Box,
5
- Typography,
6
- Switch,
7
- FormControlLabel,
8
- Card,
9
- CardContent,
10
- Alert,
11
- Button,
12
- Snackbar,
13
- Tabs,
14
- Tab,
15
- TextField,
16
- Slider,
17
- InputAdornment,
18
- } from "@mui/material";
19
- import {
20
- Save as SaveIcon,
21
- Notifications as NotificationsIcon,
22
- Settings as SettingsIcon,
23
- } from "@mui/icons-material";
24
- import { useAxios } from 'dash-axios-hook';
25
- import { AuthPersistenceService } from 'dash-auth';
26
-
27
- // ============================================================================
28
- // TYPES AND INTERFACES
29
- // ============================================================================
30
-
31
- interface NotificationConfig {
32
- id: string;
33
- name: string;
34
- className: string;
35
- hasEmail: boolean;
36
- hasPush: boolean;
37
- hasSocket: boolean;
38
- hasDatabase: boolean;
39
- }
40
-
41
- interface NotificationPreference {
42
- id: string;
43
- name: string;
44
- email: boolean;
45
- push: boolean;
46
- }
47
-
48
- interface PreferenceFormat {
49
- id: string;
50
- group: string;
51
- tab: string;
52
- attribute: string;
53
- label: string;
54
- visible: boolean;
55
- required: boolean;
56
- custom?: boolean;
57
- type: 'boolean' | 'integer' | 'string' | 'textarea' | 'select' | 'custom';
58
- component?: string;
59
- editable: boolean;
60
- rules?: string;
61
- default_value: any;
62
- description?: string;
63
- min?: number;
64
- max?: number;
65
- maxLength?: number;
66
- rows?: number;
67
- options?: { value: any; label: string }[];
68
- }
69
-
70
- interface GroupConfig {
71
- label: string;
72
- icon: string;
73
- order: number;
74
- description?: string;
75
- }
76
-
77
- interface PreferencesResponse {
78
- preferences: Record<string, any>;
79
- preference_formats: PreferenceFormat[];
80
- groups: Record<string, GroupConfig>;
81
- }
82
-
83
- // ============================================================================
84
- // HELPER FUNCTIONS
85
- // ============================================================================
86
-
87
- const getGroupIcon = (icon: string) => {
88
- switch (icon) {
89
- case 'notifications':
90
- return <NotificationsIcon />;
91
- case 'settings':
92
- default:
93
- return <SettingsIcon />;
94
- }
95
- };
96
-
97
- // ============================================================================
98
- // MAIN COMPONENT
99
- // ============================================================================
100
-
101
- /**
102
- * UserPreferences Component
103
- *
104
- * This component renders user preferences organized into groups (tabs).
105
- * It supports multiple preference types:
106
- * - boolean: Toggle switch
107
- * - integer: Number input with slider
108
- * - string: Text input
109
- * - textarea: Multi-line text input
110
- * - custom: Custom component (e.g., NotificationPreferences)
111
- *
112
- * Preferences are fetched from /api/system/user/preferences
113
- * and saved via PUT to the same endpoint.
114
- */
115
- const UserPreferences: React.FC = () => {
116
- // ========================================================================
117
- // STATE
118
- // ========================================================================
119
- const [loading, setLoading] = useState(true);
120
- const [saving, setSaving] = useState(false);
121
- const [isDirty, setIsDirty] = useState(false);
122
- const [activeTab, setActiveTab] = useState(0);
123
-
124
- // Notification preferences (custom component)
125
- const [notificationPreferences, setNotificationPreferences] = useState<NotificationPreference[]>([]);
126
-
127
- // Generic preferences (non-notification)
128
- const [genericPreferences, setGenericPreferences] = useState<Record<string, any>>({});
129
-
130
- // Schema from backend
131
- const [preferenceFormats, setPreferenceFormats] = useState<PreferenceFormat[]>([]);
132
- const [groups, setGroups] = useState<Record<string, GroupConfig>>({});
133
-
134
- const [snackbar, setSnackbar] = useState<{ open: boolean; message: string; severity: 'success' | 'error' }>({
135
- open: false,
136
- message: '',
137
- severity: 'success',
138
- });
139
-
140
- const axios = useAxios();
141
-
142
- // Get notification configs from systemValues (for custom notification component)
143
- // Memoize to prevent infinite re-renders
144
- const availableNotifications: NotificationConfig[] = useMemo(() => {
145
- const systemValues = AuthPersistenceService.getSystemValues();
146
- return systemValues?.user_notifications || [];
147
- }, []);
148
-
149
- // Use ref to access availableNotifications in callbacks without causing re-renders
150
- const availableNotificationsRef = useRef(availableNotifications);
151
- availableNotificationsRef.current = availableNotifications;
152
-
153
- // ========================================================================
154
- // COMPUTED VALUES
155
- // ========================================================================
156
-
157
- // Get sorted groups for tabs
158
- const sortedGroups = Object.entries(groups)
159
- .sort(([, a], [, b]) => (a.order || 0) - (b.order || 0))
160
- .map(([key, config]) => ({ key, ...config }));
161
-
162
- // Get preferences for a specific group
163
- const getPreferencesForGroup = (groupKey: string): PreferenceFormat[] => {
164
- return preferenceFormats.filter(pf => pf.group === groupKey && pf.visible);
165
- };
166
-
167
- // ========================================================================
168
- // CALLBACKS
169
- // ========================================================================
170
-
171
- // Build notification preferences from user data
172
- const buildNotificationPreferencesFromUser = useCallback((
173
- userPrefs: any,
174
- notifications: NotificationConfig[]
175
- ): NotificationPreference[] => {
176
- const notificationPrefs = userPrefs?.notifications || [];
177
-
178
- return notifications.map((notif) => {
179
- const existing = Array.isArray(notificationPrefs)
180
- ? notificationPrefs.find((p: any) => p.id === notif.id)
181
- : null;
182
-
183
- return {
184
- id: notif.id,
185
- name: notif.name,
186
- email: existing?.email !== undefined ? existing.email : notif.hasEmail,
187
- push: existing?.push !== undefined ? existing.push : notif.hasPush,
188
- };
189
- });
190
- }, []);
191
-
192
- // Fetch preferences from API
193
- const fetchPreferences = useCallback(async () => {
194
- try {
195
- console.log('🔄 UserPreferences - Fetching preferences from API...');
196
- const response = await axios.get('/system/user/preferences');
197
- const data: PreferencesResponse = response.data;
198
-
199
- console.log('✅ UserPreferences - Fetched:', data);
200
-
201
- // Set schema
202
- setPreferenceFormats(data.preference_formats || []);
203
- setGroups(data.groups || {});
204
-
205
- // Set user preferences
206
- const userPrefs = data.preferences || {};
207
-
208
- // Build notification preferences (custom component)
209
- // Use ref to get current availableNotifications without dependency
210
- const builtNotifPrefs = buildNotificationPreferencesFromUser(userPrefs, availableNotificationsRef.current);
211
- setNotificationPreferences(builtNotifPrefs);
212
-
213
- // Build generic preferences
214
- const genericPrefs: Record<string, any> = {};
215
- (data.preference_formats || []).forEach(format => {
216
- if (format.type !== 'custom') {
217
- genericPrefs[format.id] = userPrefs[format.id] ?? format.default_value;
218
- }
219
- });
220
- setGenericPreferences(genericPrefs);
221
-
222
- setIsDirty(false);
223
-
224
- } catch (error) {
225
- console.error('❌ UserPreferences - Fetch error:', error);
226
- setSnackbar({
227
- open: true,
228
- message: 'Failed to load preferences',
229
- severity: 'error',
230
- });
231
- }
232
- }, [buildNotificationPreferencesFromUser]);
233
-
234
- // Initialize on mount only
235
- useEffect(() => {
236
- const init = async () => {
237
- await fetchPreferences();
238
- setLoading(false);
239
- };
240
- init();
241
- // eslint-disable-next-line react-hooks/exhaustive-deps
242
- }, []);
243
-
244
- // ========================================================================
245
- // HANDLERS
246
- // ========================================================================
247
-
248
- // Handle tab change
249
- const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {
250
- setActiveTab(newValue);
251
- };
252
-
253
- // Handle notification toggle
254
- const handleNotificationToggle = (notificationId: string, type: 'email' | 'push', checked: boolean) => {
255
- setNotificationPreferences(prev => prev.map(pref =>
256
- pref.id === notificationId ? { ...pref, [type]: checked } : pref
257
- ));
258
- setIsDirty(true);
259
- };
260
-
261
- // Handle generic preference change
262
- const handleGenericPreferenceChange = (preferenceId: string, value: any) => {
263
- setGenericPreferences(prev => ({ ...prev, [preferenceId]: value }));
264
- setIsDirty(true);
265
- };
266
-
267
- // Handle save
268
- const handleSave = async () => {
269
- setSaving(true);
270
- try {
271
- const preferencesToSave: Record<string, any> = {
272
- notifications: notificationPreferences,
273
- ...genericPreferences,
274
- };
275
-
276
- const response = await axios.put('/system/user/preferences', {
277
- preferences: preferencesToSave,
278
- });
279
-
280
- console.log('✅ UserPreferences - Saved:', response.data);
281
-
282
- setSnackbar({
283
- open: true,
284
- message: 'Preferences saved successfully!',
285
- severity: 'success',
286
- });
287
- setIsDirty(false);
288
-
289
- // Refresh to ensure UI is in sync
290
- await fetchPreferences();
291
-
292
- } catch (error: any) {
293
- console.error('❌ UserPreferences - Save error:', error);
294
- setSnackbar({
295
- open: true,
296
- message: error.response?.data?.message || 'Failed to save preferences',
297
- severity: 'error',
298
- });
299
- } finally {
300
- setSaving(false);
301
- }
302
- };
303
-
304
- // Close snackbar
305
- const handleCloseSnackbar = () => {
306
- setSnackbar(prev => ({ ...prev, open: false }));
307
- };
308
-
309
- // ========================================================================
310
- // RENDER HELPERS
311
- // ========================================================================
312
-
313
- // Get notification config
314
- const getNotificationConfig = (id: string): NotificationConfig | undefined => {
315
- return availableNotifications.find(n => n.id === id);
316
- };
317
-
318
- // Format notification name
319
- const formatNotificationName = (name: string): string => {
320
- return name.replace(/Notification$/, '').replace(/([A-Z])/g, ' $1').trim();
321
- };
322
-
323
- // Render a single generic preference field
324
- const renderPreferenceField = (format: PreferenceFormat) => {
325
- const value = genericPreferences[format.id];
326
-
327
- switch (format.type) {
328
- case 'boolean':
329
- return (
330
- <Card key={format.id} sx={{ mb: 2 }}>
331
- <CardContent sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
332
- <Box>
333
- <Typography variant="subtitle1">{format.label}</Typography>
334
- {format.description && (
335
- <Typography variant="caption" sx={{
336
- color: "text.secondary"
337
- }}>
338
- {format.description}
339
- </Typography>
340
- )}
341
- </Box>
342
- <Switch
343
- checked={!!value}
344
- onChange={(e) => handleGenericPreferenceChange(format.id, e.target.checked)}
345
- disabled={saving || !format.editable}
346
- />
347
- </CardContent>
348
- </Card>
349
- );
350
-
351
- case 'integer':
352
- return (
353
- <Card key={format.id} sx={{ mb: 2 }}>
354
- <CardContent>
355
- <Typography variant="subtitle1" gutterBottom>{format.label}</Typography>
356
- {format.description && (
357
- <Typography
358
- variant="caption"
359
- sx={{
360
- color: "text.secondary",
361
- display: "block",
362
- mb: 2
363
- }}>
364
- {format.description}
365
- </Typography>
366
- )}
367
- <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
368
- <Slider
369
- value={value ?? format.default_value ?? 0}
370
- onChange={(_, newValue) => handleGenericPreferenceChange(format.id, newValue)}
371
- min={format.min ?? 0}
372
- max={format.max ?? 100}
373
- disabled={saving || !format.editable}
374
- sx={{ flexGrow: 1 }}
375
- valueLabelDisplay="auto"
376
- />
377
- <TextField
378
- type="number"
379
- value={value ?? format.default_value ?? 0}
380
- onChange={(e) => handleGenericPreferenceChange(format.id, parseInt(e.target.value, 10))}
381
- disabled={saving || !format.editable}
382
- sx={{ width: 80 }}
383
- size="small"
384
- slotProps={{
385
- htmlInput: {
386
- min: format.min ?? 0,
387
- max: format.max ?? 100,
388
- }
389
- }}
390
- />
391
- </Box>
392
- </CardContent>
393
- </Card>
394
- );
395
-
396
- case 'string':
397
- return (
398
- <Card key={format.id} sx={{ mb: 2 }}>
399
- <CardContent>
400
- <Typography variant="subtitle1" gutterBottom>{format.label}</Typography>
401
- {format.description && (
402
- <Typography
403
- variant="caption"
404
- sx={{
405
- color: "text.secondary",
406
- display: "block",
407
- mb: 2
408
- }}>
409
- {format.description}
410
- </Typography>
411
- )}
412
- <TextField
413
- fullWidth
414
- value={value ?? ''}
415
- onChange={(e) => handleGenericPreferenceChange(format.id, e.target.value)}
416
- disabled={saving || !format.editable}
417
- slotProps={{
418
- input: format.maxLength ? {
419
- endAdornment: (
420
- <InputAdornment position="end">
421
- {(value?.length || 0)}/{format.maxLength}
422
- </InputAdornment>
423
- ),
424
- } : undefined,
425
-
426
- htmlInput: { maxLength: format.maxLength }
427
- }} />
428
- </CardContent>
429
- </Card>
430
- );
431
-
432
- case 'textarea':
433
- return (
434
- <Card key={format.id} sx={{ mb: 2 }}>
435
- <CardContent>
436
- <Typography variant="subtitle1" gutterBottom>{format.label}</Typography>
437
- {format.description && (
438
- <Typography
439
- variant="caption"
440
- sx={{
441
- color: "text.secondary",
442
- display: "block",
443
- mb: 2
444
- }}>
445
- {format.description}
446
- </Typography>
447
- )}
448
- <TextField
449
- fullWidth
450
- multiline
451
- rows={format.rows ?? 3}
452
- value={value ?? ''}
453
- onChange={(e) => handleGenericPreferenceChange(format.id, e.target.value)}
454
- disabled={saving || !format.editable}
455
- helperText={format.maxLength ? `${(value?.length || 0)}/${format.maxLength} characters` : undefined}
456
- slotProps={{
457
- htmlInput: { maxLength: format.maxLength }
458
- }}
459
- />
460
- </CardContent>
461
- </Card>
462
- );
463
-
464
- default:
465
- return null;
466
- }
467
- };
468
-
469
- // Render notification preferences (custom component)
470
- const renderNotificationPreferences = () => {
471
- if (availableNotifications.length === 0) {
472
- return (
473
- <Alert severity="info">
474
- No notification types available.
475
- </Alert>
476
- );
477
- }
478
-
479
- return (
480
- <>
481
- {notificationPreferences.map((pref) => {
482
- const config = getNotificationConfig(pref.id);
483
-
484
- return (
485
- <Card key={pref.id} sx={{ mb: 2 }}>
486
- <CardContent sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
487
- <Box>
488
- <Typography variant="subtitle1">
489
- {formatNotificationName(pref.name)}
490
- </Typography>
491
- <Typography variant="caption" sx={{
492
- color: "text.secondary"
493
- }}>
494
- {pref.name}
495
- </Typography>
496
- </Box>
497
-
498
- <Box sx={{ display: 'flex', gap: 2 }}>
499
- {config?.hasEmail && (
500
- <FormControlLabel
501
- control={
502
- <Switch
503
- checked={pref.email}
504
- onChange={(e) => handleNotificationToggle(pref.id, 'email', e.target.checked)}
505
- color="primary"
506
- disabled={saving}
507
- />
508
- }
509
- label="Email"
510
- />
511
- )}
512
-
513
- {config?.hasPush && (
514
- <FormControlLabel
515
- control={
516
- <Switch
517
- checked={pref.push}
518
- onChange={(e) => handleNotificationToggle(pref.id, 'push', e.target.checked)}
519
- color="primary"
520
- disabled={saving}
521
- />
522
- }
523
- label="Push"
524
- />
525
- )}
526
-
527
- {!config?.hasEmail && !config?.hasPush && (
528
- <Typography variant="caption" sx={{
529
- color: "text.secondary"
530
- }}>
531
- (No configurable channels)
532
- </Typography>
533
- )}
534
- </Box>
535
- </CardContent>
536
- </Card>
537
- );
538
- })}
539
- </>
540
- );
541
- };
542
-
543
- // Render group content
544
- const renderGroupContent = (groupKey: string) => {
545
- const groupPreferences = getPreferencesForGroup(groupKey);
546
- const groupConfig = groups[groupKey];
547
-
548
- return (
549
- <Box sx={{ pt: 2 }}>
550
- {groupConfig?.description && (
551
- <Typography
552
- variant="body2"
553
- sx={{
554
- color: "text.secondary",
555
- mb: 3
556
- }}>
557
- {groupConfig.description}
558
- </Typography>
559
- )}
560
-
561
- {groupPreferences.map(format => {
562
- if (format.type === 'custom' && format.component === 'NotificationPreferences') {
563
- return (
564
- <Box key={format.id}>
565
- {renderNotificationPreferences()}
566
- </Box>
567
- );
568
- }
569
- return renderPreferenceField(format);
570
- })}
571
-
572
- {groupPreferences.length === 0 && (
573
- <Alert severity="info">
574
- No preferences available in this group.
575
- </Alert>
576
- )}
577
- </Box>
578
- );
579
- };
580
-
581
- // ========================================================================
582
- // RENDER
583
- // ========================================================================
584
-
585
- if (loading) {
586
- return (
587
- <Box sx={{ display: 'flex', justifyContent: 'center', p: 4 }}>
588
- <CircularProgress />
589
- </Box>
590
- );
591
- }
592
-
593
- return (
594
- <Box sx={{ p: 2 }}>
595
- {/* Header */}
596
- <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 2 }}>
597
- <Typography variant="h5">User Preferences</Typography>
598
-
599
- </Box>
600
-
601
- {isDirty && (
602
- <Alert severity="info" sx={{ mb: 2 }}>
603
- You have unsaved changes. Click "Save Preferences" to apply them.
604
- </Alert>
605
- )}
606
-
607
- {/* Tabs for groups */}
608
- {sortedGroups.length > 1 && (
609
- <Tabs
610
- value={activeTab}
611
- onChange={handleTabChange}
612
- sx={{ borderBottom: 1, borderColor: 'divider', mb: 2 }}
613
- >
614
- {sortedGroups.map((group, index) => (
615
- <Tab
616
- key={group.key}
617
- label={group.label}
618
- icon={getGroupIcon(group.icon)}
619
- iconPosition="start"
620
- id={`preference-tab-${index}`}
621
- aria-controls={`preference-tabpanel-${index}`}
622
- />
623
- ))}
624
- </Tabs>
625
- )}
626
-
627
- {/* Tab content */}
628
- {sortedGroups.map((group, index) => (
629
- <Box
630
- key={group.key}
631
- role="tabpanel"
632
- hidden={activeTab !== index}
633
- id={`preference-tabpanel-${index}`}
634
- aria-labelledby={`preference-tab-${index}`}
635
- >
636
- {activeTab === index && renderGroupContent(group.key)}
637
- </Box>
638
- ))}
639
-
640
- {/* Single group - no tabs */}
641
- {sortedGroups.length === 1 && renderGroupContent(sortedGroups[0].key)}
642
-
643
- {/* No groups */}
644
- {sortedGroups.length === 0 && (
645
- <Alert severity="warning">
646
- No preference groups configured.
647
- </Alert>
648
- )}
649
-
650
- {/* Snackbar */}
651
- <Snackbar
652
- open={snackbar.open}
653
- autoHideDuration={4000}
654
- onClose={handleCloseSnackbar}
655
- anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}
656
- >
657
- <Alert onClose={handleCloseSnackbar} severity={snackbar.severity} sx={{ width: '100%' }}>
658
- {snackbar.message}
659
- </Alert>
660
- </Snackbar>
661
-
662
- <Button
663
- variant="contained"
664
- fullWidth
665
- color="primary"
666
- startIcon={saving ? <CircularProgress size={16} color="inherit" /> : <SaveIcon />}
667
- onClick={handleSave}
668
- disabled={saving || !isDirty}
669
- >
670
- {saving ? 'Saving...' : 'Save Preferences'}
671
- </Button>
672
-
673
- </Box>
674
- );
675
- };
676
-
677
- export default UserPreferences;