@dashadmin/dash-admin 1.3.24 → 1.3.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (511) hide show
  1. package/dist/AppAsyncWrapper.js +30 -1
  2. package/dist/AppWrapper.js +35 -1
  3. package/dist/DASHAdmin.js +312 -1
  4. package/dist/RoutingWrapper.js +76 -1
  5. package/dist/classes/DASHStorageClass.js +15 -1
  6. package/dist/components/Input/RichTextField.js +26 -1
  7. package/dist/components/Redirect.js +56 -1
  8. package/dist/components/avatar/Avatar.js +72 -1
  9. package/dist/components/avatar/SingleImageUploader.js +46 -1
  10. package/dist/components/currency/Format.js +71 -1
  11. package/dist/components/custom/Redirect.js +20 -1
  12. package/dist/components/error/Error.js +161 -1
  13. package/dist/components/geocoding/GeocodingField.js +133 -1
  14. package/dist/components/i18n/BridgedLocalesMenuButton.js +126 -1
  15. package/dist/components/i18n/LangSwitcher.js +196 -1
  16. package/dist/components/loader/GlobalLoader.js +71 -1
  17. package/dist/components/logs/LogFile.js +99 -1
  18. package/dist/components/logs/LogFileById.js +75 -1
  19. package/dist/components/logs/LogViewer.js +33 -1
  20. package/dist/components/menu/AppMenu.js +11 -1
  21. package/dist/components/menu/CustomMenuItemLink.js +77 -1
  22. package/dist/components/menu/DarkToggleMode.js +47 -1
  23. package/dist/components/menu/LanguageToggleMode.js +99 -1
  24. package/dist/components/misc/CustomImageInput.js +54 -1
  25. package/dist/components/misc/DASHGlobalErrorHandler.js +159 -1
  26. package/dist/components/misc/DarkModeSwitcher.js +40 -1
  27. package/dist/components/misc/LanguageSwitcher.js +193 -1
  28. package/dist/components/misc/MUIHtmlToolTip.js +50 -1
  29. package/dist/components/misc/MuiSimpleJsonTable.js +178 -1
  30. package/dist/components/misc/MultiLevelTable.js +124 -1
  31. package/dist/components/misc/NoResults.js +17 -1
  32. package/dist/components/misc/PDFViewer.js +86 -1
  33. package/dist/components/navigation/Breadcrumbs.js +178 -1
  34. package/dist/components/navigation/BreadcrumbsManager.js +194 -1
  35. package/dist/components/navigation/index.js +8 -1
  36. package/dist/components/panel/Error.js +161 -1
  37. package/dist/components/permission/AvailablePermissionsContext.js +157 -1
  38. package/dist/components/permission/PermissionsSelector.js +719 -1
  39. package/dist/components/permission/PermissionsSelectorList.js +400 -1
  40. package/dist/components/racustombuttons/CustomRAButton.js +94 -1
  41. package/dist/components/racustombuttons/QuickButton.js +109 -1
  42. package/dist/components/racustombuttons/QuickEditButton.js +114 -1
  43. package/dist/components/racustombuttons/QuickIconButton.js +119 -1
  44. package/dist/components/scrollbar/Scrollbar.js +52 -1
  45. package/dist/components/selects/MultiSelect.js +42 -1
  46. package/dist/components/selects/RASearchableSelect.js +207 -1
  47. package/dist/components/selects/RASearchableSelectChips.js +225 -1
  48. package/dist/components/selects/SearchableSelect.js +128 -1
  49. package/dist/components/subscription/BillingCycleSelectInput.js +50 -1
  50. package/dist/components/subscription/PlanAddonsSettings.js +396 -1
  51. package/dist/components/subscription/PlanAuditLog.js +345 -1
  52. package/dist/components/subscription/PlanFeaturesSettings.js +151 -1
  53. package/dist/components/subscription/PlanLimitsSettings.js +168 -1
  54. package/dist/components/subscription/PlanMetadataSettings.js +219 -1
  55. package/dist/components/subscription/PlanPricesSettings.js +222 -1
  56. package/dist/components/subscription/index.js +12 -1
  57. package/dist/components/svgelements/SvgLoading.js +330 -1
  58. package/dist/components/svgelements/SvgLogo.js +70 -1
  59. package/dist/components/svgelements/SvgLogoMin.js +76 -1
  60. package/dist/components/svgelements/SvgShipping.js +1001 -1
  61. package/dist/components/tenant/TenantAttributes.js +107 -1
  62. package/dist/components/tenant/TenantAttributesContext.js +150 -1
  63. package/dist/components/tenant/TenantSelector.js +160 -1
  64. package/dist/components/tenant/TenantSettings.js +107 -1
  65. package/dist/components/tenant/TenantSettingsContext.js +152 -1
  66. package/dist/components/tenant/TenantTheme.js +112 -1
  67. package/dist/components/user/AvatarComponent.js +270 -1
  68. package/dist/components/user/TenantAvatarComponent.js +83 -1
  69. package/dist/components/user/UserPreferences.js +422 -1
  70. package/dist/config/ACTIONS.js +25 -1
  71. package/dist/config/ConstantsService.js +25 -1
  72. package/dist/config/DASHAdminSystemConstants.js +137 -1
  73. package/dist/config/PARSERS.js +9 -1
  74. package/dist/contexts/DashQueryClientContext.js +78 -1
  75. package/dist/contexts/DashResourceContext.js +21 -1
  76. package/dist/contexts/I18nBridgeContext.js +123 -1
  77. package/dist/contexts/I18nBridgeSetter.js +29 -1
  78. package/dist/contexts/I18nReduxSync.js +16 -1
  79. package/dist/contexts/SubscriptionPlanFormatsProvider.js +175 -1
  80. package/dist/contexts/SystemRequestsCache.js +194 -1
  81. package/dist/contexts/auth/AuthContext.js +396 -1
  82. package/dist/contexts/auth/AuthContextLocalStorage.js +118 -1
  83. package/dist/contexts/auth/DASHAuthenticationService.js +679 -1
  84. package/dist/contexts/auth/WindowContext.js +10 -1
  85. package/dist/contexts/auth/index.js +2 -1
  86. package/dist/contexts/com/FCMContext.js +378 -1
  87. package/dist/contexts/com/LaravelEchoContext.js +45 -1
  88. package/dist/contexts/com/LaravelEchoMgr.js +121 -1
  89. package/dist/contexts/com/components/DefaultNotificationComponent.js +31 -1
  90. package/dist/contexts/com/components/NotificationAttributesTable.js +28 -1
  91. package/dist/contexts/com/components/NotificationRenderer.js +36 -1
  92. package/dist/contexts/com/components/NotificationsWidget.js +142 -1
  93. package/dist/contexts/com/components/notificationFormats.js +15 -1
  94. package/dist/contexts/com/useLaravelEcho.js +340 -1
  95. package/dist/contexts/dictionary/DictionaryContext.js +43 -1
  96. package/dist/default-theme/DASHAppProviders.js +86 -1
  97. package/dist/default-theme/DashThemeContext.js +146 -1
  98. package/dist/default-theme/DashThemeHelperProvider.js +54 -1
  99. package/dist/default-theme/DomainAppLayout.js +126 -1
  100. package/dist/default-theme/DomainHeader.js +114 -1
  101. package/dist/default-theme/DomainTheme.js +60 -1
  102. package/dist/default-theme/FullLayoutMarkup.js +55 -1
  103. package/dist/default-theme/StaticLayout.js +36 -1
  104. package/dist/default-theme/index.js +19 -1
  105. package/dist/default-theme/menu/AppMaterialMenu.js +364 -1
  106. package/dist/default-theme/menu/AppMenuComponents/SubmenuPortal.js +33 -1
  107. package/dist/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItem.js +239 -1
  108. package/dist/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItems.js +22 -1
  109. package/dist/default-theme/menu/AppMenuComponents/expanded/CollapsableSidebarMenu.js +209 -1
  110. package/dist/default-theme/menu/AppMenuComponents/expanded/SidebarItem.js +71 -1
  111. package/dist/default-theme/menu/AppMenuComponents/getItem.js +7 -1
  112. package/dist/default-theme/menu/AppMenuComponents/submenuConstants.js +78 -1
  113. package/dist/default-theme/menu/AppSidebarMaterial.js +232 -1
  114. package/dist/default-theme/menu/SidebarActions.js +75 -1
  115. package/dist/default-theme/updateDomCssVariables.js +134 -1
  116. package/dist/helpers/checkRole.js +14 -1
  117. package/dist/helpers/parseAxiosError.js +28 -2
  118. package/dist/hooks/audio/useAudio.js +24 -1
  119. package/dist/hooks/axios.js +52 -1
  120. package/dist/hooks/data/useDashboardStats.js +88 -1
  121. package/dist/hooks/data/usePackageByClientsStats.js +51 -1
  122. package/dist/hooks/data/usePackageByCommunesStats.js +51 -1
  123. package/dist/hooks/data/usePackageStats.js +88 -1
  124. package/dist/hooks/data/usePackageWithdrawDetails.js +69 -1
  125. package/dist/hooks/data/useStats.js +94 -1
  126. package/dist/hooks/isCurrentPath.js +18 -1
  127. package/dist/hooks/notifications/WSMessagesManager.js +128 -1
  128. package/dist/hooks/notifications/WSPusherManager.js +70 -1
  129. package/dist/hooks/useBreadcrumbs.js +208 -1
  130. package/dist/hooks/useClickOutside.js +18 -1
  131. package/dist/hooks/useFormPersistance.js +129 -1
  132. package/dist/hooks/useGlobalErrorMediator.js +37 -1
  133. package/dist/hooks/useGlobalLoaderMgr.js +20 -1
  134. package/dist/hooks/useHash.js +24 -1
  135. package/dist/hooks/useLocalStorage.js +68 -1
  136. package/dist/hooks/usePolyglotTranslation.js +57 -1
  137. package/dist/hooks/usePrevious.js +12 -1
  138. package/dist/hooks/usePrintSelected.js +30 -1
  139. package/dist/hooks/useVirtualHash.js +28 -1
  140. package/dist/hooks/window/useWindowSize.js +23 -1
  141. package/dist/index.js +120 -97
  142. package/dist/interfaces.js +6 -1
  143. package/dist/layout/AppLayout.js +36 -1
  144. package/dist/layout/ApplicationLayout.js +110 -1
  145. package/dist/layout/MotionWrapper.js +182 -1
  146. package/dist/layout/MotionWrapper.original.js +182 -1
  147. package/dist/layout/ResourceMenu.js +87 -1
  148. package/dist/layout/ResoureLayout.js +47 -1
  149. package/dist/layout/TransitionWrapper.js +83 -2
  150. package/dist/pages/ChangePassword.js +198 -1
  151. package/dist/pages/DASHLanding.js +9 -1
  152. package/dist/pages/DASHLightWeightLogin.js +495 -1
  153. package/dist/pages/DASHSimpleLogin.js +231 -1
  154. package/dist/pages/Login.js +113 -1
  155. package/dist/pages/Profile.js +347 -1
  156. package/dist/pages/RecoverPassword.js +175 -1
  157. package/dist/pages/SingleImageUploader.js +40 -1
  158. package/dist/pages/VerifyAccount.js +129 -1
  159. package/dist/providers/authProvider.js +186 -1
  160. package/dist/providers/dataProvider.js +468 -1
  161. package/dist/providers/i18n/en.js +514 -1
  162. package/dist/providers/i18n/es.js +520 -1
  163. package/dist/providers/i18n/languages.js +8 -1
  164. package/dist/providers/i18nProvider.js +23 -1
  165. package/dist/react-admin-dash/RADashComponent.js +210 -1
  166. package/dist/react-admin-dash/Resource.js +62 -1
  167. package/dist/resources/Brand/BrandResource.js +106 -1
  168. package/dist/resources/DASHResourceLoader.js +104 -1
  169. package/dist/resources/Log/LogResource.js +59 -1
  170. package/dist/resources/Tenant/ImpersonateTenantResource.js +113 -1
  171. package/dist/resources/Trash/TrashTemplate.js +195 -1
  172. package/dist/resources.js +259 -1
  173. package/dist/schemas/log.js +45 -1
  174. package/dist/schemas/notification.js +39 -1
  175. package/dist/schemas/permissions.js +44 -1
  176. package/dist/schemas/roles.js +48 -1
  177. package/dist/schemas/rolesDataGrid.js +48 -1
  178. package/dist/schemas/subscription/components/SubscriptionActions.js +172 -1
  179. package/dist/schemas/subscription/components/SubscriptionPaymentHistory.js +101 -1
  180. package/dist/schemas/subscription/components/SubscriptionPlanFeatures.js +115 -1
  181. package/dist/schemas/subscription/components/SubscriptionPlanPreview.js +92 -1
  182. package/dist/schemas/subscription/components/SubscriptionPlanStats.js +181 -1
  183. package/dist/schemas/subscription/components/SubscriptionStatusIndicator.js +70 -1
  184. package/dist/schemas/subscription/subscriptionPlanSchema.js +184 -1
  185. package/dist/schemas/subscription/subscriptionSchema.js +147 -1
  186. package/dist/schemas/subscriptionPlan.js +397 -1
  187. package/dist/schemas/tenant.js +122 -1
  188. package/dist/schemas/tenantUser.js +94 -1
  189. package/dist/schemas/tenant_superadmin.js +118 -1
  190. package/dist/schemas/user.js +26 -1
  191. package/dist/systemResources.js +1039 -1
  192. package/dist/systemResources.old.js +668 -1
  193. package/dist/templates/ResourceTemplate.js +196 -1
  194. package/dist/templates/ResourceTemplateCreate.js +144 -1
  195. package/dist/templates/ResourceTemplateEdit.js +147 -1
  196. package/dist/templates/ResourceTemplateFull.js +518 -1
  197. package/dist/templates/ResourceTemplateList.js +295 -1
  198. package/dist/templates/ResourceTemplateShow.js +45 -1
  199. package/dist/templates/TrashTemplate.js +175 -1
  200. package/dist/tenantResources.js +206 -1
  201. package/dist/test_portal_bubbles.js +37 -1
  202. package/dist/theme/AppHeader.js +60 -1
  203. package/dist/theme/AppLayoutSetting.js +34 -1
  204. package/dist/theme/AppLogo.js +7 -1
  205. package/dist/theme/AppSidebar.js +30 -1
  206. package/dist/theme/AppSidebarContent.js +84 -1
  207. package/dist/theme/AppSidebarLogo.js +42 -1
  208. package/dist/theme/components/PageTitle.js +61 -1
  209. package/dist/utils/cache/CacheInvalidatorContext.js +100 -1
  210. package/dist/utils/cache/CacheInvalidatorListenerComponent.js +10 -1
  211. package/dist/utils/cache/useCacheInvalidatorListener.js +17 -1
  212. package/dist/utils/convertFileToBase64.js +10 -1
  213. package/dist/utils/convertToFile.js +12 -1
  214. package/dist/utils/cookies.js +45 -1
  215. package/dist/utils/dashDefaultQueryClient.js +15 -1
  216. package/dist/utils/dataUrlToBlob.js +23 -1
  217. package/dist/utils/deepReplace.js +17 -1
  218. package/dist/utils/getProfileMenu.js +31 -1
  219. package/dist/utils/getTenantSettings.js +9 -1
  220. package/dist/utils/getType.js +10 -1
  221. package/dist/utils/getUserSettings.js +9 -1
  222. package/dist/utils/hasCode.js +14 -1
  223. package/dist/utils/index.js +19 -1
  224. package/dist/utils/injectTenantStyles.js +19 -1
  225. package/dist/utils/isComponent.js +23 -1
  226. package/dist/utils/navEvents.js +75 -1
  227. package/dist/utils/prototypes.js +5 -1
  228. package/dist/utils/regexp.js +7 -1
  229. package/dist/utils/resolveObjectPath.js +5 -1
  230. package/dist/utils/setNativeValue.js +17 -1
  231. package/dist/utils/slugify.js +7 -1
  232. package/dist/utils/validators/emailValidator.js +8 -1
  233. package/dist/utils/validators/requiredValidator.js +7 -1
  234. package/dist/utils/validators/rutValidator.js +25 -1
  235. package/dist/utils/validators.js +57 -1
  236. package/package.json +153 -69
  237. package/src/AppAsyncWrapper.tsx +42 -0
  238. package/src/AppWrapper.tsx +45 -0
  239. package/src/DASHAdmin.tsx +501 -0
  240. package/src/RoutingWrapper.tsx +139 -0
  241. package/src/classes/DASHStorageClass.tsx +8 -0
  242. package/src/components/Input/RichTextField.tsx +27 -0
  243. package/src/components/Redirect.tsx +46 -0
  244. package/src/components/avatar/Avatar.tsx +67 -0
  245. package/src/components/avatar/SingleImageUploader.tsx +53 -0
  246. package/src/components/currency/Format.tsx +77 -0
  247. package/src/components/custom/Redirect.tsx +23 -0
  248. package/src/components/error/Error.tsx +168 -0
  249. package/src/components/geocoding/GeocodingField.tsx +167 -0
  250. package/src/components/i18n/BridgedLocalesMenuButton.tsx +159 -0
  251. package/src/components/i18n/LangSwitcher.tsx +204 -0
  252. package/src/components/loader/GlobalLoader.tsx +56 -0
  253. package/src/components/logs/LogFile.tsx +88 -0
  254. package/src/components/logs/LogFileById.tsx +68 -0
  255. package/src/components/logs/LogViewer.tsx +43 -0
  256. package/src/components/menu/AppMenu.tsx +22 -0
  257. package/src/components/menu/CustomMenuItemLink.tsx +61 -0
  258. package/src/components/menu/DarkToggleMode.tsx +65 -0
  259. package/src/components/menu/LanguageToggleMode.tsx +120 -0
  260. package/src/components/misc/CustomImageInput.tsx +62 -0
  261. package/src/components/misc/DASHGlobalErrorHandler.tsx +194 -0
  262. package/src/components/misc/DarkModeSwitcher.tsx +112 -0
  263. package/src/components/misc/LanguageSwitcher.tsx +199 -0
  264. package/src/components/misc/MUIHtmlToolTip.tsx +15 -0
  265. package/src/components/misc/MuiSimpleJsonTable.tsx +279 -0
  266. package/src/components/misc/MultiLevelTable.tsx +229 -0
  267. package/src/components/misc/NoResults.tsx +25 -0
  268. package/src/components/misc/PDFViewer.tsx +85 -0
  269. package/src/components/navigation/Breadcrumbs.tsx +220 -0
  270. package/src/components/navigation/BreadcrumbsManager.tsx +310 -0
  271. package/src/components/navigation/index.tsx +5 -0
  272. package/src/components/panel/Error.tsx +168 -0
  273. package/src/components/permission/AvailablePermissionsContext.tsx +173 -0
  274. package/src/components/permission/PermissionsSelector.tsx +819 -0
  275. package/src/components/permission/PermissionsSelectorList.tsx +468 -0
  276. package/src/components/permission/tsx +0 -0
  277. package/src/components/racustombuttons/CustomRAButton.tsx +87 -0
  278. package/src/components/racustombuttons/QuickButton.tsx +117 -0
  279. package/src/components/racustombuttons/QuickEditButton.tsx +115 -0
  280. package/src/components/racustombuttons/QuickIconButton.tsx +122 -0
  281. package/src/components/scrollbar/Scrollbar.tsx +31 -0
  282. package/src/components/selects/MultiSelect.tsx +53 -0
  283. package/src/components/selects/RASearchableSelect.tsx +279 -0
  284. package/src/components/selects/RASearchableSelectChips.tsx +304 -0
  285. package/src/components/selects/SearchableSelect.tsx +135 -0
  286. package/src/components/subscription/BillingCycleSelectInput.tsx +68 -0
  287. package/src/components/subscription/PlanAddonsSettings.tsx +522 -0
  288. package/src/components/subscription/PlanAuditLog.tsx +439 -0
  289. package/src/components/subscription/PlanFeaturesSettings.tsx +223 -0
  290. package/src/components/subscription/PlanLimitsSettings.tsx +230 -0
  291. package/src/components/subscription/PlanMetadataSettings.tsx +284 -0
  292. package/src/components/subscription/PlanPricesSettings.tsx +295 -0
  293. package/src/components/subscription/index.ts +7 -0
  294. package/src/components/svgelements/SvgLoading.tsx +229 -0
  295. package/src/components/svgelements/SvgLogo.tsx +53 -0
  296. package/src/components/svgelements/SvgLogoMin.tsx +64 -0
  297. package/src/components/svgelements/SvgShipping.tsx +673 -0
  298. package/src/components/tenant/AvailablePermissionsContext.tsx +0 -0
  299. package/src/components/tenant/TenantAttributes.tsx +153 -0
  300. package/src/components/tenant/TenantAttributesContext.tsx +163 -0
  301. package/src/components/tenant/TenantSelector.tsx +139 -0
  302. package/src/components/tenant/TenantSettings.tsx +172 -0
  303. package/src/components/tenant/TenantSettingsContext.tsx +165 -0
  304. package/src/components/tenant/TenantTheme.tsx +172 -0
  305. package/src/components/user/AvatarComponent.tsx +301 -0
  306. package/src/components/user/TenantAvatarComponent.tsx +99 -0
  307. package/src/components/user/UserPreferences.tsx +642 -0
  308. package/src/config/ACTIONS.tsx +26 -0
  309. package/src/config/ConstantsService.tsx +44 -0
  310. package/src/config/DASHAdminSystemConstants.tsx +182 -0
  311. package/src/config/PARSERS.tsx +9 -0
  312. package/src/contexts/DashQueryClientContext.tsx +113 -0
  313. package/src/contexts/DashResourceContext.tsx +34 -0
  314. package/src/contexts/I18nBridgeContext.tsx +156 -0
  315. package/src/contexts/I18nBridgeSetter.tsx +39 -0
  316. package/src/contexts/I18nReduxSync.tsx +27 -0
  317. package/src/contexts/SubscriptionPlanFormatsProvider.tsx +217 -0
  318. package/src/contexts/SystemRequestsCache.tsx +215 -0
  319. package/src/contexts/auth/AuthContext.tsx +553 -0
  320. package/src/contexts/auth/AuthContextLocalStorage.tsx +140 -0
  321. package/src/contexts/auth/DASHAuthenticationService.tsx +917 -0
  322. package/src/contexts/auth/WindowContext.tsx +15 -0
  323. package/src/contexts/auth/index.tsx +3 -0
  324. package/src/contexts/com/FCMContext.tsx +415 -0
  325. package/src/contexts/com/LaravelEchoContext.tsx +41 -0
  326. package/src/contexts/com/LaravelEchoMgr.tsx +155 -0
  327. package/src/contexts/com/components/DefaultNotificationComponent.tsx +20 -0
  328. package/src/contexts/com/components/NotificationAttributesTable.tsx +54 -0
  329. package/src/contexts/com/components/NotificationRenderer.tsx +42 -0
  330. package/src/contexts/com/components/NotificationsWidget.tsx +182 -0
  331. package/src/contexts/com/components/notificationFormats.tsx +50 -0
  332. package/src/contexts/com/useLaravelEcho.tsx +432 -0
  333. package/src/contexts/dictionary/DictionaryContext.tsx +94 -0
  334. package/src/default-theme/DASHAppProviders.tsx +117 -0
  335. package/src/default-theme/DashThemeContext.tsx +218 -0
  336. package/src/default-theme/DashThemeHelperProvider.tsx +98 -0
  337. package/src/default-theme/DomainAppLayout.tsx +166 -0
  338. package/src/default-theme/DomainHeader.tsx +162 -0
  339. package/src/default-theme/DomainTheme.tsx +59 -0
  340. package/src/default-theme/FullLayoutMarkup.tsx +250 -0
  341. package/src/default-theme/StaticLayout.tsx +47 -0
  342. package/src/default-theme/index.tsx +11 -0
  343. package/src/default-theme/menu/AppMaterialMenu.tsx +545 -0
  344. package/src/default-theme/menu/AppMenuComponents/SubmenuPortal.tsx +56 -0
  345. package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItem.tsx +254 -0
  346. package/src/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItems.tsx +31 -0
  347. package/src/default-theme/menu/AppMenuComponents/expanded/CollapsableSidebarMenu.tsx +276 -0
  348. package/src/default-theme/menu/AppMenuComponents/expanded/SidebarItem.tsx +91 -0
  349. package/src/default-theme/menu/AppMenuComponents/getItem.tsx +17 -0
  350. package/src/default-theme/menu/AppMenuComponents/interfaces.tsx +41 -0
  351. package/src/default-theme/menu/AppMenuComponents/submenuConstants.ts +85 -0
  352. package/src/default-theme/menu/AppSidebarMaterial.tsx +339 -0
  353. package/src/default-theme/menu/SidebarActions.tsx +84 -0
  354. package/src/default-theme/updateDomCssVariables.tsx +176 -0
  355. package/src/helpers/checkRole.tsx +66 -0
  356. package/src/helpers/parseAxiosError.tsx +41 -0
  357. package/src/hooks/audio/useAudio.tsx +39 -0
  358. package/src/hooks/axios.tsx +62 -0
  359. package/src/hooks/data/useDashboardStats.tsx +65 -0
  360. package/src/hooks/data/usePackageByClientsStats.tsx +44 -0
  361. package/src/hooks/data/usePackageByCommunesStats.tsx +44 -0
  362. package/src/hooks/data/usePackageStats.tsx +69 -0
  363. package/src/hooks/data/usePackageWithdrawDetails.tsx +61 -0
  364. package/src/hooks/data/useStats.tsx +86 -0
  365. package/src/hooks/isCurrentPath.tsx +22 -0
  366. package/src/hooks/notifications/WSMessagesManager.tsx +152 -0
  367. package/src/hooks/notifications/WSPusherManager.tsx +92 -0
  368. package/src/hooks/useBreadcrumbs.tsx +329 -0
  369. package/src/hooks/useClickOutside.tsx +17 -0
  370. package/src/hooks/useFormPersistance.tsx +150 -0
  371. package/src/hooks/useGlobalErrorMediator.tsx +43 -0
  372. package/src/hooks/useGlobalLoaderMgr.tsx +21 -0
  373. package/src/hooks/useHash.tsx +27 -0
  374. package/src/hooks/useLocalStorage.tsx +196 -0
  375. package/src/hooks/usePolyglotTranslation.tsx +62 -0
  376. package/src/hooks/usePrevious.tsx +9 -0
  377. package/src/hooks/usePrintSelected.tsx +37 -0
  378. package/src/hooks/useVirtualHash.tsx +33 -0
  379. package/src/hooks/window/useWindowSize.tsx +36 -0
  380. package/src/index.tsx +110 -0
  381. package/src/interfaces/IAppResourceConfig.tsx +20 -0
  382. package/src/interfaces/Log.tsx +16 -0
  383. package/src/interfaces/Tenant.tsx +25 -0
  384. package/src/interfaces/communication/IActions.tsx +5 -0
  385. package/src/interfaces/communication/INotification.tsx +21 -0
  386. package/src/interfaces/communication/IPayload.tsx +3 -0
  387. package/src/interfaces/communication/IRequestAction.tsx +10 -0
  388. package/src/interfaces/communication/IRequestPayload.tsx +7 -0
  389. package/src/interfaces/communication/IResponseAction.tsx +7 -0
  390. package/src/interfaces/misc/IAny.tsx +3 -0
  391. package/src/interfaces/misc/IFlashMessage.tsx +10 -0
  392. package/src/interfaces/navigation/IAppMenu.ts +14 -0
  393. package/src/interfaces/navigation/ICollapsableSidebarMenu.ts +12 -0
  394. package/src/interfaces/navigation/IMenuItem.ts +16 -0
  395. package/src/interfaces/notifications/IModel.tsx +6 -0
  396. package/src/interfaces/notifications/IModelField.tsx +8 -0
  397. package/src/interfaces/notifications/IUserNotification.tsx +12 -0
  398. package/src/interfaces/notifications/IUserNotificationData.tsx +13 -0
  399. package/src/interfaces/notifications/IUserNotificationPayload.tsx +8 -0
  400. package/src/interfaces/user/IGetAuth.tsx +92 -0
  401. package/src/interfaces/user/ITenantSettings.tsx +3 -0
  402. package/src/interfaces/user/IUser.tsx +60 -0
  403. package/src/interfaces/user/IUserSettings.tsx +43 -0
  404. package/src/interfaces.tsx +6 -0
  405. package/src/layout/AppLayout.tsx +112 -0
  406. package/src/layout/ApplicationLayout.tsx +197 -0
  407. package/src/layout/MotionWrapper.original.tsx +236 -0
  408. package/src/layout/MotionWrapper.tsx +236 -0
  409. package/src/layout/ResourceMenu.tsx +164 -0
  410. package/src/layout/ResoureLayout.tsx +105 -0
  411. package/src/layout/TransitionWrapper.tsx +125 -0
  412. package/src/pages/ChangePassword.tsx +179 -0
  413. package/src/pages/DASHLanding.tsx +22 -0
  414. package/src/pages/DASHLightWeightLogin.tsx +610 -0
  415. package/src/pages/DASHSimpleLogin.tsx +260 -0
  416. package/src/pages/Login.tsx +111 -0
  417. package/src/pages/Profile.tsx +394 -0
  418. package/src/pages/RecoverPassword.tsx +166 -0
  419. package/src/pages/SingleImageUploader.tsx +55 -0
  420. package/src/pages/VerifyAccount.tsx +128 -0
  421. package/src/providers/authProvider.tsx +210 -0
  422. package/src/providers/dataProvider.tsx +672 -0
  423. package/src/providers/i18n/en.ts +533 -0
  424. package/src/providers/i18n/es.ts +539 -0
  425. package/src/providers/i18n/languages.tsx +5 -0
  426. package/src/providers/i18nProvider.tsx +23 -0
  427. package/src/react-admin-dash/RADashComponent.tsx +240 -0
  428. package/src/react-admin-dash/Resource.tsx +77 -0
  429. package/src/resources/Brand/BrandResource.tsx +130 -0
  430. package/src/resources/DASHResourceLoader.ts +180 -0
  431. package/src/resources/Log/LogResource.tsx +73 -0
  432. package/src/resources/Tenant/ImpersonateTenantResource.tsx +113 -0
  433. package/src/resources/Trash/TrashTemplate.tsx +180 -0
  434. package/src/resources.tsx +280 -0
  435. package/src/schemas/log.tsx +45 -0
  436. package/src/schemas/notification.tsx +42 -0
  437. package/src/schemas/permissions.tsx +44 -0
  438. package/src/schemas/roles.tsx +48 -0
  439. package/src/schemas/rolesDataGrid.tsx +48 -0
  440. package/src/schemas/subscription/components/SubscriptionActions.tsx +153 -0
  441. package/src/schemas/subscription/components/SubscriptionPaymentHistory.tsx +120 -0
  442. package/src/schemas/subscription/components/SubscriptionPlanFeatures.tsx +155 -0
  443. package/src/schemas/subscription/components/SubscriptionPlanPreview.tsx +128 -0
  444. package/src/schemas/subscription/components/SubscriptionPlanStats.tsx +268 -0
  445. package/src/schemas/subscription/components/SubscriptionStatusIndicator.tsx +72 -0
  446. package/src/schemas/subscription/subscriptionPlanSchema.tsx +185 -0
  447. package/src/schemas/subscription/subscriptionSchema.tsx +152 -0
  448. package/src/schemas/subscriptionPlan.ts +422 -0
  449. package/src/schemas/tenant.tsx +129 -0
  450. package/src/schemas/tenantUser.tsx +96 -0
  451. package/src/schemas/tenant_superadmin.tsx +119 -0
  452. package/src/schemas/user.tsx +26 -0
  453. package/src/systemResources.old.tsx +928 -0
  454. package/src/systemResources.tsx +1135 -0
  455. package/src/templates/ResourceTemplate.tsx +240 -0
  456. package/src/templates/ResourceTemplateCreate.tsx +167 -0
  457. package/src/templates/ResourceTemplateEdit.tsx +176 -0
  458. package/src/templates/ResourceTemplateFull.tsx +581 -0
  459. package/src/templates/ResourceTemplateList.tsx +340 -0
  460. package/src/templates/ResourceTemplateShow.tsx +88 -0
  461. package/src/templates/TrashTemplate.tsx +179 -0
  462. package/src/tenantResources.tsx +223 -0
  463. package/src/test_portal_bubbles.tsx +40 -0
  464. package/src/theme/AppHeader.tsx +52 -0
  465. package/src/theme/AppLayoutSetting.tsx +33 -0
  466. package/src/theme/AppLogo.tsx +13 -0
  467. package/src/theme/AppSidebar.tsx +12 -0
  468. package/src/theme/AppSidebarContent.tsx +105 -0
  469. package/src/theme/AppSidebarLogo.tsx +48 -0
  470. package/src/theme/components/PageTitle.tsx +37 -0
  471. package/src/utils/cache/CacheInvalidatorContext.tsx +125 -0
  472. package/src/utils/cache/CacheInvalidatorListenerComponent.tsx +10 -0
  473. package/src/utils/cache/useCacheInvalidatorListener.tsx +27 -0
  474. package/src/utils/convertFileToBase64.tsx +9 -0
  475. package/src/utils/convertToFile.tsx +14 -0
  476. package/src/utils/cookies.tsx +33 -0
  477. package/src/utils/dashDefaultQueryClient.tsx +34 -0
  478. package/src/utils/dataUrlToBlob.tsx +30 -0
  479. package/src/utils/deepReplace.tsx +19 -0
  480. package/src/utils/getProfileMenu.tsx +41 -0
  481. package/src/utils/getTenantSettings.tsx +9 -0
  482. package/src/utils/getType.tsx +8 -0
  483. package/src/utils/getUserSettings.tsx +8 -0
  484. package/src/utils/hasCode.tsx +14 -0
  485. package/src/utils/index.ts +19 -0
  486. package/src/utils/injectTenantStyles.ts +28 -0
  487. package/src/utils/isComponent.tsx +45 -0
  488. package/src/utils/navEvents.tsx +91 -0
  489. package/src/utils/prototypes.tsx +5 -0
  490. package/src/utils/regexp.tsx +4 -0
  491. package/src/utils/resolveObjectPath.tsx +4 -0
  492. package/src/utils/setNativeValue.tsx +24 -0
  493. package/src/utils/slugify.tsx +11 -0
  494. package/src/utils/validators/emailValidator.tsx +6 -0
  495. package/src/utils/validators/requiredValidator.tsx +5 -0
  496. package/src/utils/validators/rutValidator.tsx +31 -0
  497. package/src/utils/validators.tsx +96 -0
  498. package/dist/ChangePassword-DmWAQAX_.js +0 -152
  499. package/dist/Login-t41HMhVT.js +0 -101
  500. package/dist/Profile-By-gdPUd.js +0 -294
  501. package/dist/RecoverPassword-DzPdbkg2.js +0 -149
  502. package/dist/VerifyAccount-Bofaxe5w.js +0 -99
  503. package/dist/index-gfebuoyf.js +0 -21614
  504. /package/dist/{components/permission/tsx → declarations.d.js} +0 -0
  505. /package/{dist → src}/DASHAdmin.tsx.old +0 -0
  506. /package/{dist → src}/declarations.d.ts +0 -0
  507. /package/{dist → src}/default-theme/DashThemeContext.tsx.fast +0 -0
  508. /package/{dist → src}/default-theme/DashThemeContext.tsx.old +0 -0
  509. /package/{dist → src}/templates/ResourceTemplate.tsx.memoized_experiment +0 -0
  510. /package/{dist → src}/templates/ResourceTemplate.tsx.original +0 -0
  511. /package/{dist → src}/templates/ResourceTemplateOld.tsx.bkup +0 -0
@@ -1 +1,719 @@
1
- import{Fragment as Ie,jsx as e,jsxs as r}from"react/jsx-runtime";import{useCallback as h,useEffect as I,useState as b,useMemo as me,useRef as de}from"react";import{useRecordContext as He,useRefresh as Me,useEditContext as Ve}from"react-admin";import{useController as ue,useFormContext as qe,useFormState as Ke}from"react-hook-form";import{useAxios as Ue}from"@dashadmin/dash-axios-hook";import{Grid as A,Card as pe,CardContent as he,Typography as m,Button as P,Box as d,Chip as K,Divider as ge,Stack as fe,Toolbar as Je,Paper as U,TextField as xe,InputAdornment as W,CircularProgress as E,IconButton as ye}from"@mui/material";import{SelectAll as be,DeselectOutlined as Ce,Search as J,Clear as $,FilterList as Qe}from"@mui/icons-material";import{useSystemRequestsCache as Xe}from"../../contexts/SystemRequestsCache";import{NotFound as Ye}from"@dashadmin/dash-components";const H={checkbox:{marginRight:"8px",cursor:"pointer",accentColor:"#1976d2"},checkboxLabel:{display:"flex",alignItems:"center",fontSize:"14px",cursor:"pointer",padding:"4px 0",margin:0,userSelect:"none"},selectAllLabel:{display:"flex",alignItems:"center",fontSize:"14px",fontWeight:"bold",cursor:"pointer",margin:0,userSelect:"none"}},kt=({method:u,attribute:x})=>{const p=He(),[l,i]=b([]);return I(()=>{if(p?.permissions){const y=p.permissions.reduce((v,T)=>{const w=v.find(R=>R[0]?.group===T.group);return w?w.push(T):v.push([T]),v},[]);i(y)}},[p?.permissions]),!p?.permissions||p.permissions.length===0?e(d,{sx:{p:2,textAlign:"center"},children:e(m,{variant:"body2",color:"text.secondary",children:"No permissions assigned"})}):r(d,{sx:{p:2},children:[r(m,{variant:"h6",sx:{mb:3},children:["Assigned Permissions (",p.permissions.length,")"]}),e(A,{container:!0,spacing:3,children:l?.map((y,v)=>e(A,{item:!0,xs:12,sm:6,md:4,lg:3,children:e(pe,{variant:"outlined",sx:{height:"100%",display:"flex",flexDirection:"column"},children:r(he,{sx:{flexGrow:1},children:[r(d,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",mb:2},children:[e(m,{variant:"subtitle1",sx:{fontWeight:600,fontSize:"1rem"},children:y[0]?.group.charAt(0).toUpperCase()+y[0]?.group.slice(1)}),e(K,{label:y.length,size:"small",color:"primary"})]}),e(fe,{spacing:.5,children:y.map((T,w)=>r(m,{variant:"body2",sx:{color:"text.secondary",fontSize:"0.875rem"},children:["\u2022 ",T.name.split(".").pop()]},w))})]})})},v))})]})};function Ze(u,x){if(!Array.isArray(u)||!Array.isArray(x)||u.length!==x.length)return!1;const p=u.map(i=>i.route_name).sort(),l=x.map(i=>i.route_name).sort();return p.every((i,y)=>i===l[y])}const Q=6,Se=({method:u,attribute:x,resourceConfig:p,record:l=null})=>{const[i,y]=b([]),[v,T]=b([]),[w,R]=b({}),[X,ke]=b(!1),[G,M]=b(""),[L,V]=b(""),[C,Y]=b(""),[g,Z]=b(""),F=de(null),_=de(null),nt=Ue(),rt=Me(),st=qe(),it=Ke(),ee=ue({name:"permission_objects"}),te=ue({name:"permissions"}),[a,S]=b([]),{formats:B,loading:D}=Xe(),oe=h(t=>t.reduce((o,n)=>{const s=o.find(c=>c[0]?.group===n.group);return s?s.push(n):o.push([n]),o},[]),[]);I(()=>(F.current&&clearTimeout(F.current),F.current=setTimeout(()=>{Y(G)},500),()=>{F.current&&clearTimeout(F.current)}),[G]),I(()=>(_.current&&clearTimeout(_.current),_.current=setTimeout(()=>{Z(L)},500),()=>{_.current&&clearTimeout(_.current)}),[L]),I(()=>{if(!X&&B){const t=Array.isArray(B.data)?B.data:Array.isArray(B)?B:[];if(t.length>0){const o=oe(t);y(o);const n=o.reduce((s,c)=>{const O=c[0]?.group||"Other";return s[O]=!1,s},{});R(n)}ke(!0)}},[B,X,oe]),I(()=>{if(!D&&l&&l.id&&i.length>0){const t=l.permission_objects||[];Ze(t,a)||S(t)}},[i,l?.permissions,l?.permission_objects,l?.id,D]),I(()=>{if(!D&&l&&l.id&&i.length>0){const t=l.permission_objects||[],o=new Set(t.map(s=>s.route_name)),n=i.flat().map(s=>({...s,checked:o.has(s.route_name)}));(a.length!==n.length||a.some((s,c)=>s.route_name!==n[c].route_name||s.checked!==n[c].checked))&&S(n)}},[i,l?.permissions,l?.permission_objects,l?.id,D]),I(()=>{a&&(ee.field.onChange(a.map(t=>({...t,checked:!0}))),te.field.onChange(a.map(t=>t.route_name)))},[a]);const Ae=h(t=>{S(o=>o.map(n=>n.route_name===t.route_name?{...n,checked:!n.checked}:n))},[]),Pe=h(t=>{S(o=>{const n=t.every(s=>o.find(c=>c.route_name===s.route_name&&c.checked));return o.map(s=>t.some(c=>c.route_name===s.route_name)?{...s,checked:!n}:s)})},[]),ve=h(()=>{console.log("Selecting all permissions",i.flat().length),S(t=>t.map(o=>({...o,checked:!0})))},[]),Te=h(()=>{S(t=>t.map(o=>({...o,checked:!1})))},[]);I(()=>{if(!a)return;const t=a.filter(o=>o.checked);ee.field.onChange(t),te.field.onChange(t.map(o=>o.route_name)),console.log("Syncing permissions to form:",{totalPermissions:a.length,checkedPermissions:t.length,selectedCount:a.filter(o=>o.checked).length,firstFew:t.slice(0,3).map(o=>o.name)})},[a]);const f=me(()=>{let t=i;if(C.trim()){const o=C.toLowerCase().trim();t=t.filter(n=>n[0]?.group.toLowerCase().includes(o))}if(g.trim()){const o=g.toLowerCase().trim();t=t.map(n=>n.filter(s=>s.name.toLowerCase().includes(o)||s.name.split(".").pop()?.toLowerCase().includes(o))).filter(n=>n.length>0)}return t},[i,C,g]),we=h(()=>{const t=new Set(f.flat().map(o=>o.route_name));console.log("Selecting all filtered permissions",t.size),S(o=>o.map(n=>t.has(n.route_name)?{...n,checked:!0}:n))},[f]),Be=h(()=>{const t=new Set(f.flat().map(o=>o.route_name));S(o=>o.map(n=>t.has(n.route_name)?{...n,checked:!1}:n))},[f]),q=i.flat().length,N=a.filter(t=>t.checked).length,ne=N===q,Fe=N===0,z=!!C.trim()||!!g.trim(),re=f.length,j=f.reduce((t,o)=>t+o.length,0),se=me(()=>{const t=new Set(f.flat().map(o=>o.route_name));return a.filter(o=>o.checked&&t.has(o.route_name)).length},[f,a]),_e=se===j,ze=se===0,Re=h(()=>M(""),[]),Ge=h(()=>V(""),[]),ie=h(()=>{M(""),V(""),Y(""),Z("")},[]),Le=h(t=>t.every(o=>a.find(n=>n.name===o.name&&n.checked)),[a]),De=h(t=>t.filter(o=>a.find(n=>n.name===o.name&&n.checked)).length,[a]),Ne=h(t=>!!a.find(n=>n.name===t.name)?.checked,[a]);return a?!i||!i.length?e(E,{}):l?r(d,{sx:{p:2},children:[e(U,{elevation:1,sx:{mb:3,borderRadius:2,overflow:"hidden"},children:r(Je,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",minHeight:"64px !important",px:3,bgcolor:"background.default"},children:[r(d,{sx:{display:"flex",alignItems:"center",gap:2},children:[e(m,{variant:"h6",sx:{fontWeight:600},children:"Permissions Selection"}),e(K,{label:`${N} / ${q} selected`,color:ne?"success":N>0?"warning":"default",variant:"outlined"})]}),r(d,{sx:{display:"flex",gap:1},children:[z&&r(Ie,{children:[r(P,{variant:"contained",startIcon:e(be,{}),onClick:we,disabled:_e,size:"small",color:"primary",sx:{textTransform:"none"},children:["Select Filtered (",j,")"]}),e(P,{variant:"contained",startIcon:e(Ce,{}),onClick:Be,disabled:ze,size:"small",color:"secondary",sx:{textTransform:"none"},children:"Deselect Filtered"}),e(ge,{orientation:"vertical",flexItem:!0,sx:{mx:1}})]}),e(P,{variant:"outlined",startIcon:e(be,{}),onClick:ve,disabled:ne,size:"small",sx:{textTransform:"none"},children:"Select All"}),e(P,{variant:"outlined",startIcon:e(Ce,{}),onClick:Te,disabled:Fe,size:"small",color:"secondary",sx:{textTransform:"none"},children:"Deselect All"})]})]})}),r(U,{elevation:1,sx:{mb:3,p:3,borderRadius:2,bgcolor:"background.paper"},children:[r(d,{sx:{display:"flex",alignItems:"center",gap:2,mb:2},children:[e(Qe,{color:"primary"}),e(m,{variant:"h6",sx:{fontWeight:600},children:"Search & Filter"}),z&&e(P,{size:"small",variant:"outlined",color:"secondary",onClick:ie,startIcon:e($,{}),sx:{textTransform:"none"},children:"Clear All Filters"})]}),r(A,{container:!0,spacing:2,children:[e(A,{item:!0,xs:12,md:6,children:e(xe,{fullWidth:!0,variant:"outlined",label:"Search by Group Name",placeholder:"e.g., user, admin, system...",value:G,onChange:t=>M(t.target.value),InputProps:{startAdornment:e(W,{position:"start",children:e(J,{color:"action"})}),endAdornment:G&&e(W,{position:"end",children:e(ye,{size:"small",onClick:Re,children:e($,{fontSize:"small"})})})}})}),e(A,{item:!0,xs:12,md:6,children:e(xe,{fullWidth:!0,variant:"outlined",label:"Search by Permission Name",placeholder:"e.g., create, edit, delete, view...",value:L,onChange:t=>V(t.target.value),InputProps:{startAdornment:e(W,{position:"start",children:e(J,{color:"action"})}),endAdornment:L&&e(W,{position:"end",children:e(ye,{size:"small",onClick:Ge,children:e($,{fontSize:"small"})})})}})})]}),z&&r(d,{sx:{mt:2,p:2,bgcolor:"action.hover",borderRadius:1},children:[r(m,{variant:"body2",color:"text.secondary",children:[e("strong",{children:"Search Results:"})," ",re," group",re!==1?"s":""," ","(",j," permission",j!==1?"s":"",")"," ","of ",i.length," total groups (",q," total permissions)"]}),C&&r(m,{variant:"caption",color:"primary",sx:{display:"block",mt:.5},children:['\u2022 Group filter: "',C,'"']}),g&&r(m,{variant:"caption",color:"primary",sx:{display:"block",mt:.5},children:['\u2022 Permission filter: "',g,'"']})]})]}),z&&f.length===0&&r(U,{sx:{p:4,textAlign:"center",bgcolor:"background.default",border:"1px dashed",borderColor:"divider"},children:[e(J,{sx:{fontSize:48,color:"text.disabled",mb:2}}),e(m,{variant:"h6",color:"text.secondary",gutterBottom:!0,children:"No permissions found"}),r(m,{variant:"body2",color:"text.disabled",sx:{mb:2},children:["No permissions match your search criteria",C&&` for group "${C}"`,g&&` for permission "${g}"`]}),e(P,{variant:"outlined",size:"small",onClick:ie,startIcon:e($,{}),children:"Clear All Filters"})]}),f.length>0&&e(A,{container:!0,spacing:3,children:f.map((t,o)=>{const n=t[0]?.group||"Other",s=n,c=w[s]||!1,O=De(t),ae=Le(t),le=t.length>Q,je=c?t:t.slice(0,Q),Oe=t.length-Q;return e(A,{item:!0,xs:12,md:4,children:e(pe,{variant:"outlined",sx:{height:"100%",display:"flex",flexDirection:"column",transition:"all 0.2s ease-in-out","&:hover":{boxShadow:3,borderColor:"primary.main"},...z&&{border:"2px solid",borderColor:"primary.light",bgcolor:"primary.50"}},children:r(he,{sx:{flexGrow:1,display:"flex",flexDirection:"column",p:2,"&:last-child":{pb:2}},children:[r(d,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",mb:2,minHeight:"32px"},children:[e(m,{variant:"subtitle1",sx:{fontWeight:600,fontSize:"1rem",lineHeight:1.2},children:n}),e(K,{label:`${O}/${t.length}`,size:"small",color:ae?"primary":O>0?"warning":"default",sx:{fontSize:"0.75rem",height:24,mr:1}})]}),r(d,{sx:{mb:2},children:[r("label",{style:H.selectAllLabel,children:[e("input",{type:"checkbox",style:H.checkbox,checked:ae,onChange:()=>Pe(t)}),"Select all ",n," permissions"]}),e(ge,{sx:{mt:1}})]}),e(d,{sx:{flexGrow:1,mb:le?2:0},children:e(fe,{spacing:.5,children:je.map((k,We)=>{const ce=k.name.split(".").pop(),Ee=Ne(k),$e=g&&(k.name.toLowerCase().includes(g.toLowerCase())||ce?.toLowerCase().includes(g.toLowerCase()));return e(d,{children:r("label",{style:H.checkboxLabel,children:[e("input",{type:"checkbox",style:H.checkbox,checked:Ee,onChange:()=>Ae(k)}),r(d,{children:[e(m,{variant:"caption",sx:{fontSize:"0.8rem",lineHeight:1.3,...$e&&{bgcolor:"warning.light",color:"warning.contrastText",px:.5,borderRadius:.5,fontWeight:600}},children:ce}),e(m,{variant:"caption",sx:{color:"text.disabled",fontSize:"0.7rem",ml:0,display:"block",maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:k.name})]})]})},We)})})}),le&&e(d,{sx:{display:"flex",justifyContent:"center",mt:"auto",pt:1,borderTop:"1px solid",borderColor:"divider"},children:e(P,{size:"small",variant:"text",onClick:()=>R(k=>({...k,[s]:!c})),sx:{fontSize:"0.75rem",minHeight:"28px",textTransform:"none"},children:c?"Show Less \u25B2":`Show ${Oe} More \u25BC`})})]})})},o)})})]}):e(E,{}):e(E,{})},et=u=>{const{record:x,resource:p,isPending:l,isLoading:i}=Ve();return l||i?e(E,{}):e(Se,{...u,record:x})},tt=u=>e(Se,{...u,record:{}}),ot=({method:u,attribute:x,resourceConfig:p})=>{switch(u){case"edit":return e(et,{attribute:x,method:u,resourceConfig:p});case"create":return e(tt,{attribute:x,method:u,resourceConfig:p});case"view":return e(Ie,{children:e(Ye,{})});default:return null}};var At=ot;export{At as default};
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
21
+ import { useCallback, useEffect, useState, useMemo, useRef } from "react";
22
+ import { useRecordContext, useRefresh, useEditContext } from "react-admin";
23
+ import { useController, useFormContext, useFormState } from "react-hook-form";
24
+ import { useAxios } from "dash-axios-hook";
25
+ import {
26
+ Grid,
27
+ Card,
28
+ CardContent,
29
+ Typography,
30
+ Button,
31
+ Box,
32
+ Chip,
33
+ Divider,
34
+ Stack,
35
+ Toolbar,
36
+ Paper,
37
+ TextField,
38
+ InputAdornment,
39
+ CircularProgress,
40
+ IconButton
41
+ } from "@mui/material";
42
+ import {
43
+ SelectAll as SelectAllIcon,
44
+ DeselectOutlined as DeselectAllIcon,
45
+ Search as SearchIcon,
46
+ Clear as ClearIcon,
47
+ FilterList as FilterIcon
48
+ } from "@mui/icons-material";
49
+ import { useSystemRequestsCache } from "../../contexts/SystemRequestsCache";
50
+ import { NotFound } from "dash-components";
51
+ const checkboxStyles = {
52
+ checkbox: {
53
+ marginRight: "8px",
54
+ cursor: "pointer",
55
+ accentColor: "#1976d2"
56
+ },
57
+ checkboxLabel: {
58
+ display: "flex",
59
+ alignItems: "center",
60
+ fontSize: "14px",
61
+ cursor: "pointer",
62
+ padding: "4px 0",
63
+ margin: 0,
64
+ userSelect: "none"
65
+ },
66
+ selectAllLabel: {
67
+ display: "flex",
68
+ alignItems: "center",
69
+ fontSize: "14px",
70
+ fontWeight: "bold",
71
+ cursor: "pointer",
72
+ margin: 0,
73
+ userSelect: "none"
74
+ }
75
+ };
76
+ const PermissionsSelectorView = ({
77
+ method,
78
+ attribute
79
+ }) => {
80
+ const record = useRecordContext();
81
+ const [permissions, setPermissions] = useState([]);
82
+ useEffect(() => {
83
+ if (record == null ? void 0 : record.permissions) {
84
+ const groupedPermissions = record.permissions.reduce((acc, permission) => {
85
+ const group = acc.find((g) => {
86
+ var _a;
87
+ return ((_a = g[0]) == null ? void 0 : _a.group) === permission.group;
88
+ });
89
+ if (group) {
90
+ group.push(permission);
91
+ } else {
92
+ acc.push([permission]);
93
+ }
94
+ return acc;
95
+ }, []);
96
+ setPermissions(groupedPermissions);
97
+ }
98
+ }, [record == null ? void 0 : record.permissions]);
99
+ if (!(record == null ? void 0 : record.permissions) || record.permissions.length === 0) {
100
+ return /* @__PURE__ */ jsx(Box, { sx: { p: 2, textAlign: "center" }, children: /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", children: "No permissions assigned" }) });
101
+ }
102
+ return /* @__PURE__ */ jsxs(Box, { sx: { p: 2 }, children: [
103
+ /* @__PURE__ */ jsxs(Typography, { variant: "h6", sx: { mb: 3 }, children: [
104
+ "Assigned Permissions (",
105
+ record.permissions.length,
106
+ ")"
107
+ ] }),
108
+ /* @__PURE__ */ jsx(Grid, { container: true, spacing: 3, children: permissions == null ? void 0 : permissions.map((tab, index) => {
109
+ var _a, _b;
110
+ return (
111
+ /* @ts-ignore */
112
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, sm: 6, md: 4, lg: 3, children: /* @__PURE__ */ jsx(
113
+ Card,
114
+ {
115
+ variant: "outlined",
116
+ sx: {
117
+ height: "100%",
118
+ display: "flex",
119
+ flexDirection: "column"
120
+ },
121
+ children: /* @__PURE__ */ jsxs(CardContent, { sx: { flexGrow: 1 }, children: [
122
+ /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", mb: 2 }, children: [
123
+ /* @__PURE__ */ jsx(Typography, { variant: "subtitle1", sx: { fontWeight: 600, fontSize: "1rem" }, children: ((_a = tab[0]) == null ? void 0 : _a.group.charAt(0).toUpperCase()) + ((_b = tab[0]) == null ? void 0 : _b.group.slice(1)) }),
124
+ /* @__PURE__ */ jsx(
125
+ Chip,
126
+ {
127
+ label: tab.length,
128
+ size: "small",
129
+ color: "primary"
130
+ }
131
+ )
132
+ ] }),
133
+ /* @__PURE__ */ jsx(Stack, { spacing: 0.5, children: tab.map((item, i) => /* @__PURE__ */ jsxs(Typography, { variant: "body2", sx: { color: "text.secondary", fontSize: "0.875rem" }, children: [
134
+ "\u2022 ",
135
+ item.name.split(".").pop()
136
+ ] }, i)) })
137
+ ] })
138
+ }
139
+ ) }, index)
140
+ );
141
+ }) })
142
+ ] });
143
+ };
144
+ function arePermissionsEqual(a, b) {
145
+ if (!Array.isArray(a) || !Array.isArray(b)) return false;
146
+ if (a.length !== b.length) return false;
147
+ const aRouteNames = a.map((p) => p.route_name).sort();
148
+ const bRouteNames = b.map((p) => p.route_name).sort();
149
+ return aRouteNames.every((routeName, idx) => routeName === bRouteNames[idx]);
150
+ }
151
+ const INITIAL_ITEMS_COUNT = 6;
152
+ const PermissionsSelectorBase = ({
153
+ method,
154
+ attribute,
155
+ resourceConfig,
156
+ record = null
157
+ }) => {
158
+ const [permissionsData, setPermissionsData] = useState([]);
159
+ const [parsedValues, setParsedValues] = useState([]);
160
+ const [expandedCards, setExpandedCards] = useState({});
161
+ const [isInitialized, setIsInitialized] = useState(false);
162
+ const [groupSearchTerm, setGroupSearchTerm] = useState("");
163
+ const [itemSearchTerm, setItemSearchTerm] = useState("");
164
+ const [debouncedGroupSearch, setDebouncedGroupSearch] = useState("");
165
+ const [debouncedItemSearch, setDebouncedItemSearch] = useState("");
166
+ const groupSearchTimeoutRef = useRef(null);
167
+ const itemSearchTimeoutRef = useRef(null);
168
+ const axios = useAxios();
169
+ const refresh = useRefresh();
170
+ const form = useFormContext();
171
+ const formState = useFormState();
172
+ const permissionObjectsController = useController({ name: "permission_objects" });
173
+ const permissionsController = useController({ name: "permissions" });
174
+ const [statePermissions, setStatePermissions] = useState([]);
175
+ const { formats: availablePermissions, loading } = useSystemRequestsCache();
176
+ const groupPermissions = useCallback((permissions) => {
177
+ return permissions.reduce((acc, permission) => {
178
+ const group = acc.find((g) => {
179
+ var _a;
180
+ return ((_a = g[0]) == null ? void 0 : _a.group) === permission.group;
181
+ });
182
+ if (group) {
183
+ group.push(permission);
184
+ } else {
185
+ acc.push([permission]);
186
+ }
187
+ return acc;
188
+ }, []);
189
+ }, []);
190
+ useEffect(() => {
191
+ if (groupSearchTimeoutRef.current) clearTimeout(groupSearchTimeoutRef.current);
192
+ groupSearchTimeoutRef.current = setTimeout(() => {
193
+ setDebouncedGroupSearch(groupSearchTerm);
194
+ }, 500);
195
+ return () => {
196
+ if (groupSearchTimeoutRef.current) clearTimeout(groupSearchTimeoutRef.current);
197
+ };
198
+ }, [groupSearchTerm]);
199
+ useEffect(() => {
200
+ if (itemSearchTimeoutRef.current) clearTimeout(itemSearchTimeoutRef.current);
201
+ itemSearchTimeoutRef.current = setTimeout(() => {
202
+ setDebouncedItemSearch(itemSearchTerm);
203
+ }, 500);
204
+ return () => {
205
+ if (itemSearchTimeoutRef.current) clearTimeout(itemSearchTimeoutRef.current);
206
+ };
207
+ }, [itemSearchTerm]);
208
+ useEffect(() => {
209
+ if (!isInitialized && availablePermissions) {
210
+ const perms = Array.isArray(availablePermissions.data) ? availablePermissions.data : Array.isArray(availablePermissions) ? availablePermissions : [];
211
+ if (perms.length > 0) {
212
+ const groupedPerms = groupPermissions(perms);
213
+ setPermissionsData(groupedPerms);
214
+ const initialExpandedState = groupedPerms.reduce((acc, group) => {
215
+ var _a;
216
+ const groupKey = ((_a = group[0]) == null ? void 0 : _a.group) || "Other";
217
+ acc[groupKey] = false;
218
+ return acc;
219
+ }, {});
220
+ setExpandedCards(initialExpandedState);
221
+ }
222
+ setIsInitialized(true);
223
+ }
224
+ }, [availablePermissions, isInitialized, groupPermissions]);
225
+ useEffect(() => {
226
+ if (!loading && record && record.id && permissionsData.length > 0) {
227
+ const initialPermissionObjects = record.permission_objects || [];
228
+ if (!arePermissionsEqual(initialPermissionObjects, statePermissions)) {
229
+ setStatePermissions(initialPermissionObjects);
230
+ }
231
+ }
232
+ }, [permissionsData, record == null ? void 0 : record.permissions, record == null ? void 0 : record.permission_objects, record == null ? void 0 : record.id, loading]);
233
+ useEffect(() => {
234
+ if (!loading && record && record.id && permissionsData.length > 0) {
235
+ const initialPermissionObjects = record.permission_objects || [];
236
+ const checkedRouteNames = new Set(initialPermissionObjects.map((obj) => obj.route_name));
237
+ const initialChecked = permissionsData.flat().map((p) => __spreadProps(__spreadValues({}, p), {
238
+ checked: checkedRouteNames.has(p.route_name)
239
+ }));
240
+ if (statePermissions.length !== initialChecked.length || statePermissions.some((p, i) => p.route_name !== initialChecked[i].route_name || p.checked !== initialChecked[i].checked)) {
241
+ setStatePermissions(initialChecked);
242
+ }
243
+ }
244
+ }, [permissionsData, record == null ? void 0 : record.permissions, record == null ? void 0 : record.permission_objects, record == null ? void 0 : record.id, loading]);
245
+ useEffect(() => {
246
+ if (!statePermissions) return;
247
+ permissionObjectsController.field.onChange(statePermissions.map((p) => __spreadProps(__spreadValues({}, p), { checked: true })));
248
+ permissionsController.field.onChange(statePermissions.map((p) => p.route_name));
249
+ }, [statePermissions]);
250
+ const handleTogglePermission = useCallback((permission) => {
251
+ setStatePermissions((prev) => prev.map(
252
+ (p) => p.route_name === permission.route_name ? __spreadProps(__spreadValues({}, p), { checked: !p.checked }) : p
253
+ ));
254
+ }, []);
255
+ const handleToggleGroup = useCallback((groupPermissions2) => {
256
+ setStatePermissions((prev) => {
257
+ const allSelected = groupPermissions2.every((p) => prev.find((sel) => sel.route_name === p.route_name && sel.checked));
258
+ return prev.map(
259
+ (p) => groupPermissions2.some((gp) => gp.route_name === p.route_name) ? __spreadProps(__spreadValues({}, p), { checked: !allSelected }) : p
260
+ );
261
+ });
262
+ }, []);
263
+ const handleSelectAll = useCallback(() => {
264
+ console.log("Selecting all permissions", permissionsData.flat().length);
265
+ setStatePermissions(
266
+ (prev) => prev.map((p) => __spreadProps(__spreadValues({}, p), { checked: true }))
267
+ );
268
+ }, []);
269
+ const handleDeselectAll = useCallback(() => {
270
+ setStatePermissions((prev) => prev.map((p) => __spreadProps(__spreadValues({}, p), { checked: false })));
271
+ }, []);
272
+ useEffect(() => {
273
+ if (!statePermissions) return;
274
+ const checkedPermissions = statePermissions.filter((p) => p.checked);
275
+ permissionObjectsController.field.onChange(checkedPermissions);
276
+ permissionsController.field.onChange(
277
+ checkedPermissions.map((p) => p.route_name)
278
+ );
279
+ console.log("Syncing permissions to form:", {
280
+ totalPermissions: statePermissions.length,
281
+ checkedPermissions: checkedPermissions.length,
282
+ selectedCount: statePermissions.filter((p) => p.checked).length,
283
+ firstFew: checkedPermissions.slice(0, 3).map((p) => p.name)
284
+ });
285
+ }, [statePermissions]);
286
+ const filteredPermissions = useMemo(() => {
287
+ let filtered = permissionsData;
288
+ if (debouncedGroupSearch.trim()) {
289
+ const groupSearchLower = debouncedGroupSearch.toLowerCase().trim();
290
+ filtered = filtered.filter((tab) => {
291
+ var _a;
292
+ return (_a = tab[0]) == null ? void 0 : _a.group.toLowerCase().includes(groupSearchLower);
293
+ });
294
+ }
295
+ if (debouncedItemSearch.trim()) {
296
+ const itemSearchLower = debouncedItemSearch.toLowerCase().trim();
297
+ filtered = filtered.map((tab) => tab.filter(
298
+ (item) => {
299
+ var _a;
300
+ return item.name.toLowerCase().includes(itemSearchLower) || ((_a = item.name.split(".").pop()) == null ? void 0 : _a.toLowerCase().includes(itemSearchLower));
301
+ }
302
+ )).filter((tab) => tab.length > 0);
303
+ }
304
+ return filtered;
305
+ }, [permissionsData, debouncedGroupSearch, debouncedItemSearch]);
306
+ const handleSelectAllFiltered = useCallback(() => {
307
+ const filteredRouteNames = new Set(filteredPermissions.flat().map((p) => p.route_name));
308
+ console.log("Selecting all filtered permissions", filteredRouteNames.size);
309
+ setStatePermissions(
310
+ (prev) => prev.map((p) => filteredRouteNames.has(p.route_name) ? __spreadProps(__spreadValues({}, p), { checked: true }) : p)
311
+ );
312
+ }, [filteredPermissions]);
313
+ const handleDeselectAllFiltered = useCallback(() => {
314
+ const filteredRouteNames = new Set(filteredPermissions.flat().map((p) => p.route_name));
315
+ setStatePermissions(
316
+ (prev) => prev.map((p) => filteredRouteNames.has(p.route_name) ? __spreadProps(__spreadValues({}, p), { checked: false }) : p)
317
+ );
318
+ }, [filteredPermissions]);
319
+ const totalPermissions = permissionsData.flat().length;
320
+ const selectedPermissions = statePermissions.filter((p) => p.checked).length;
321
+ const isAllSelected = selectedPermissions === totalPermissions;
322
+ const isNoneSelected = selectedPermissions === 0;
323
+ const hasActiveSearch = !!debouncedGroupSearch.trim() || !!debouncedItemSearch.trim();
324
+ const filteredGroupsCount = filteredPermissions.length;
325
+ const totalFilteredItems = filteredPermissions.reduce((sum, group) => sum + group.length, 0);
326
+ const filteredSelectedCount = useMemo(() => {
327
+ const filteredRouteNames = new Set(filteredPermissions.flat().map((p) => p.route_name));
328
+ return statePermissions.filter((p) => p.checked && filteredRouteNames.has(p.route_name)).length;
329
+ }, [filteredPermissions, statePermissions]);
330
+ const isAllFilteredSelected = filteredSelectedCount === totalFilteredItems;
331
+ const isNoneFilteredSelected = filteredSelectedCount === 0;
332
+ const handleClearGroupSearch = useCallback(() => setGroupSearchTerm(""), []);
333
+ const handleClearItemSearch = useCallback(() => setItemSearchTerm(""), []);
334
+ const handleClearAllSearches = useCallback(() => {
335
+ setGroupSearchTerm("");
336
+ setItemSearchTerm("");
337
+ setDebouncedGroupSearch("");
338
+ setDebouncedItemSearch("");
339
+ }, []);
340
+ const isGroupSelected = useCallback((groupPermissions2) => {
341
+ return groupPermissions2.every(
342
+ (p) => statePermissions.find((sel) => sel.name === p.name && sel.checked)
343
+ );
344
+ }, [statePermissions]);
345
+ const getSelectedCount = useCallback((groupPermissions2) => {
346
+ return groupPermissions2.filter(
347
+ (p) => statePermissions.find((sel) => sel.name === p.name && sel.checked)
348
+ ).length;
349
+ }, [statePermissions]);
350
+ const isPermissionSelected = useCallback((permission) => {
351
+ const found = statePermissions.find((p) => p.name === permission.name);
352
+ return !!(found == null ? void 0 : found.checked);
353
+ }, [statePermissions]);
354
+ if (!statePermissions) return /* @__PURE__ */ jsx(CircularProgress, {});
355
+ if (!permissionsData || !permissionsData.length) return /* @__PURE__ */ jsx(CircularProgress, {});
356
+ if (!record) return /* @__PURE__ */ jsx(CircularProgress, {});
357
+ return /* @__PURE__ */ jsxs(Box, { sx: { p: 2 }, children: [
358
+ /* @__PURE__ */ jsx(Paper, { elevation: 1, sx: { mb: 3, borderRadius: 2, overflow: "hidden" }, children: /* @__PURE__ */ jsxs(Toolbar, { sx: {
359
+ display: "flex",
360
+ justifyContent: "space-between",
361
+ alignItems: "center",
362
+ minHeight: "64px !important",
363
+ px: 3,
364
+ bgcolor: "background.default"
365
+ }, children: [
366
+ /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", gap: 2 }, children: [
367
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", sx: { fontWeight: 600 }, children: "Permissions Selection" }),
368
+ /* @__PURE__ */ jsx(
369
+ Chip,
370
+ {
371
+ label: `${selectedPermissions} / ${totalPermissions} selected`,
372
+ color: isAllSelected ? "success" : selectedPermissions > 0 ? "warning" : "default",
373
+ variant: "outlined"
374
+ }
375
+ )
376
+ ] }),
377
+ /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", gap: 1 }, children: [
378
+ hasActiveSearch && /* @__PURE__ */ jsxs(Fragment, { children: [
379
+ /* @__PURE__ */ jsxs(
380
+ Button,
381
+ {
382
+ variant: "contained",
383
+ startIcon: /* @__PURE__ */ jsx(SelectAllIcon, {}),
384
+ onClick: handleSelectAllFiltered,
385
+ disabled: isAllFilteredSelected,
386
+ size: "small",
387
+ color: "primary",
388
+ sx: { textTransform: "none" },
389
+ children: [
390
+ "Select Filtered (",
391
+ totalFilteredItems,
392
+ ")"
393
+ ]
394
+ }
395
+ ),
396
+ /* @__PURE__ */ jsx(
397
+ Button,
398
+ {
399
+ variant: "contained",
400
+ startIcon: /* @__PURE__ */ jsx(DeselectAllIcon, {}),
401
+ onClick: handleDeselectAllFiltered,
402
+ disabled: isNoneFilteredSelected,
403
+ size: "small",
404
+ color: "secondary",
405
+ sx: { textTransform: "none" },
406
+ children: "Deselect Filtered"
407
+ }
408
+ ),
409
+ /* @__PURE__ */ jsx(Divider, { orientation: "vertical", flexItem: true, sx: { mx: 1 } })
410
+ ] }),
411
+ /* @__PURE__ */ jsx(
412
+ Button,
413
+ {
414
+ variant: "outlined",
415
+ startIcon: /* @__PURE__ */ jsx(SelectAllIcon, {}),
416
+ onClick: handleSelectAll,
417
+ disabled: isAllSelected,
418
+ size: "small",
419
+ sx: { textTransform: "none" },
420
+ children: "Select All"
421
+ }
422
+ ),
423
+ /* @__PURE__ */ jsx(
424
+ Button,
425
+ {
426
+ variant: "outlined",
427
+ startIcon: /* @__PURE__ */ jsx(DeselectAllIcon, {}),
428
+ onClick: handleDeselectAll,
429
+ disabled: isNoneSelected,
430
+ size: "small",
431
+ color: "secondary",
432
+ sx: { textTransform: "none" },
433
+ children: "Deselect All"
434
+ }
435
+ )
436
+ ] })
437
+ ] }) }),
438
+ /* @__PURE__ */ jsxs(Paper, { elevation: 1, sx: { mb: 3, p: 3, borderRadius: 2, bgcolor: "background.paper" }, children: [
439
+ /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", gap: 2, mb: 2 }, children: [
440
+ /* @__PURE__ */ jsx(FilterIcon, { color: "primary" }),
441
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", sx: { fontWeight: 600 }, children: "Search & Filter" }),
442
+ hasActiveSearch && /* @__PURE__ */ jsx(
443
+ Button,
444
+ {
445
+ size: "small",
446
+ variant: "outlined",
447
+ color: "secondary",
448
+ onClick: handleClearAllSearches,
449
+ startIcon: /* @__PURE__ */ jsx(ClearIcon, {}),
450
+ sx: { textTransform: "none" },
451
+ children: "Clear All Filters"
452
+ }
453
+ )
454
+ ] }),
455
+ /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 2, children: [
456
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 6, children: /* @__PURE__ */ jsx(
457
+ TextField,
458
+ {
459
+ fullWidth: true,
460
+ variant: "outlined",
461
+ label: "Search by Group Name",
462
+ placeholder: "e.g., user, admin, system...",
463
+ value: groupSearchTerm,
464
+ onChange: (e) => setGroupSearchTerm(e.target.value),
465
+ InputProps: {
466
+ startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx(SearchIcon, { color: "action" }) }),
467
+ endAdornment: groupSearchTerm && /* @__PURE__ */ jsx(InputAdornment, { position: "end", children: /* @__PURE__ */ jsx(IconButton, { size: "small", onClick: handleClearGroupSearch, children: /* @__PURE__ */ jsx(ClearIcon, { fontSize: "small" }) }) })
468
+ }
469
+ }
470
+ ) }),
471
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 6, children: /* @__PURE__ */ jsx(
472
+ TextField,
473
+ {
474
+ fullWidth: true,
475
+ variant: "outlined",
476
+ label: "Search by Permission Name",
477
+ placeholder: "e.g., create, edit, delete, view...",
478
+ value: itemSearchTerm,
479
+ onChange: (e) => setItemSearchTerm(e.target.value),
480
+ InputProps: {
481
+ startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx(SearchIcon, { color: "action" }) }),
482
+ endAdornment: itemSearchTerm && /* @__PURE__ */ jsx(InputAdornment, { position: "end", children: /* @__PURE__ */ jsx(IconButton, { size: "small", onClick: handleClearItemSearch, children: /* @__PURE__ */ jsx(ClearIcon, { fontSize: "small" }) }) })
483
+ }
484
+ }
485
+ ) })
486
+ ] }),
487
+ hasActiveSearch && /* @__PURE__ */ jsxs(Box, { sx: { mt: 2, p: 2, bgcolor: "action.hover", borderRadius: 1 }, children: [
488
+ /* @__PURE__ */ jsxs(Typography, { variant: "body2", color: "text.secondary", children: [
489
+ /* @__PURE__ */ jsx("strong", { children: "Search Results:" }),
490
+ " ",
491
+ filteredGroupsCount,
492
+ " group",
493
+ filteredGroupsCount !== 1 ? "s" : "",
494
+ " ",
495
+ "(",
496
+ totalFilteredItems,
497
+ " permission",
498
+ totalFilteredItems !== 1 ? "s" : "",
499
+ ")",
500
+ " ",
501
+ "of ",
502
+ permissionsData.length,
503
+ " total groups (",
504
+ totalPermissions,
505
+ " total permissions)"
506
+ ] }),
507
+ debouncedGroupSearch && /* @__PURE__ */ jsxs(Typography, { variant: "caption", color: "primary", sx: { display: "block", mt: 0.5 }, children: [
508
+ '\u2022 Group filter: "',
509
+ debouncedGroupSearch,
510
+ '"'
511
+ ] }),
512
+ debouncedItemSearch && /* @__PURE__ */ jsxs(Typography, { variant: "caption", color: "primary", sx: { display: "block", mt: 0.5 }, children: [
513
+ '\u2022 Permission filter: "',
514
+ debouncedItemSearch,
515
+ '"'
516
+ ] })
517
+ ] })
518
+ ] }),
519
+ hasActiveSearch && filteredPermissions.length === 0 && /* @__PURE__ */ jsxs(Paper, { sx: {
520
+ p: 4,
521
+ textAlign: "center",
522
+ bgcolor: "background.default",
523
+ border: "1px dashed",
524
+ borderColor: "divider"
525
+ }, children: [
526
+ /* @__PURE__ */ jsx(SearchIcon, { sx: { fontSize: 48, color: "text.disabled", mb: 2 } }),
527
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", color: "text.secondary", gutterBottom: true, children: "No permissions found" }),
528
+ /* @__PURE__ */ jsxs(Typography, { variant: "body2", color: "text.disabled", sx: { mb: 2 }, children: [
529
+ "No permissions match your search criteria",
530
+ debouncedGroupSearch && ` for group "${debouncedGroupSearch}"`,
531
+ debouncedItemSearch && ` for permission "${debouncedItemSearch}"`
532
+ ] }),
533
+ /* @__PURE__ */ jsx(
534
+ Button,
535
+ {
536
+ variant: "outlined",
537
+ size: "small",
538
+ onClick: handleClearAllSearches,
539
+ startIcon: /* @__PURE__ */ jsx(ClearIcon, {}),
540
+ children: "Clear All Filters"
541
+ }
542
+ )
543
+ ] }),
544
+ filteredPermissions.length > 0 && /* @__PURE__ */ jsx(Grid, { container: true, spacing: 3, children: filteredPermissions.map((group, groupIndex) => {
545
+ var _a;
546
+ const groupLabel = ((_a = group[0]) == null ? void 0 : _a.group) || "Other";
547
+ const groupKey = groupLabel;
548
+ const isExpanded = expandedCards[groupKey] || false;
549
+ const groupSelectedCount = getSelectedCount(group);
550
+ const isAllSelectedInGroup = isGroupSelected(group);
551
+ const hasMoreItems = group.length > INITIAL_ITEMS_COUNT;
552
+ const visibleItems = isExpanded ? group : group.slice(0, INITIAL_ITEMS_COUNT);
553
+ const remainingCount = group.length - INITIAL_ITEMS_COUNT;
554
+ return (
555
+ /* @ts-ignore */
556
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 4, children: /* @__PURE__ */ jsx(Card, { variant: "outlined", sx: __spreadValues({
557
+ height: "100%",
558
+ display: "flex",
559
+ flexDirection: "column",
560
+ transition: "all 0.2s ease-in-out",
561
+ "&:hover": {
562
+ boxShadow: 3,
563
+ borderColor: "primary.main"
564
+ }
565
+ }, hasActiveSearch && {
566
+ border: "2px solid",
567
+ borderColor: "primary.light",
568
+ bgcolor: "primary.50"
569
+ }), children: /* @__PURE__ */ jsxs(CardContent, { sx: {
570
+ flexGrow: 1,
571
+ display: "flex",
572
+ flexDirection: "column",
573
+ p: 2,
574
+ "&:last-child": { pb: 2 }
575
+ }, children: [
576
+ /* @__PURE__ */ jsxs(Box, { sx: {
577
+ display: "flex",
578
+ alignItems: "center",
579
+ justifyContent: "space-between",
580
+ mb: 2,
581
+ minHeight: "32px"
582
+ }, children: [
583
+ /* @__PURE__ */ jsx(Typography, { variant: "subtitle1", sx: { fontWeight: 600, fontSize: "1rem", lineHeight: 1.2 }, children: groupLabel }),
584
+ /* @__PURE__ */ jsx(
585
+ Chip,
586
+ {
587
+ label: `${groupSelectedCount}/${group.length}`,
588
+ size: "small",
589
+ color: isAllSelectedInGroup ? "primary" : groupSelectedCount > 0 ? "warning" : "default",
590
+ sx: { fontSize: "0.75rem", height: 24, mr: 1 }
591
+ }
592
+ )
593
+ ] }),
594
+ /* @__PURE__ */ jsxs(Box, { sx: { mb: 2 }, children: [
595
+ /* @__PURE__ */ jsxs("label", { style: checkboxStyles.selectAllLabel, children: [
596
+ /* @__PURE__ */ jsx(
597
+ "input",
598
+ {
599
+ type: "checkbox",
600
+ style: checkboxStyles.checkbox,
601
+ checked: isAllSelectedInGroup,
602
+ onChange: () => handleToggleGroup(group)
603
+ }
604
+ ),
605
+ "Select all ",
606
+ groupLabel,
607
+ " permissions"
608
+ ] }),
609
+ /* @__PURE__ */ jsx(Divider, { sx: { mt: 1 } })
610
+ ] }),
611
+ /* @__PURE__ */ jsx(Box, { sx: { flexGrow: 1, mb: hasMoreItems ? 2 : 0 }, children: /* @__PURE__ */ jsx(Stack, { spacing: 0.5, children: visibleItems.map((permission, permIndex) => {
612
+ const displayName = permission.name.split(".").pop();
613
+ const isChecked = isPermissionSelected(permission);
614
+ const shouldHighlight = debouncedItemSearch && (permission.name.toLowerCase().includes(debouncedItemSearch.toLowerCase()) || (displayName == null ? void 0 : displayName.toLowerCase().includes(debouncedItemSearch.toLowerCase())));
615
+ return /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs("label", { style: checkboxStyles.checkboxLabel, children: [
616
+ /* @__PURE__ */ jsx(
617
+ "input",
618
+ {
619
+ type: "checkbox",
620
+ style: checkboxStyles.checkbox,
621
+ checked: isChecked,
622
+ onChange: () => handleTogglePermission(permission)
623
+ }
624
+ ),
625
+ /* @__PURE__ */ jsxs(Box, { children: [
626
+ /* @__PURE__ */ jsx(
627
+ Typography,
628
+ {
629
+ variant: "caption",
630
+ sx: __spreadValues({
631
+ fontSize: "0.8rem",
632
+ lineHeight: 1.3
633
+ }, shouldHighlight && {
634
+ bgcolor: "warning.light",
635
+ color: "warning.contrastText",
636
+ px: 0.5,
637
+ borderRadius: 0.5,
638
+ fontWeight: 600
639
+ }),
640
+ children: displayName
641
+ }
642
+ ),
643
+ /* @__PURE__ */ jsx(
644
+ Typography,
645
+ {
646
+ variant: "caption",
647
+ sx: {
648
+ color: "text.disabled",
649
+ fontSize: "0.7rem",
650
+ ml: 0,
651
+ display: "block",
652
+ maxWidth: "100%",
653
+ overflow: "hidden",
654
+ textOverflow: "ellipsis",
655
+ whiteSpace: "nowrap"
656
+ },
657
+ children: permission.name
658
+ }
659
+ )
660
+ ] })
661
+ ] }) }, permIndex);
662
+ }) }) }),
663
+ hasMoreItems && /* @__PURE__ */ jsx(Box, { sx: {
664
+ display: "flex",
665
+ justifyContent: "center",
666
+ mt: "auto",
667
+ pt: 1,
668
+ borderTop: "1px solid",
669
+ borderColor: "divider"
670
+ }, children: /* @__PURE__ */ jsx(
671
+ Button,
672
+ {
673
+ size: "small",
674
+ variant: "text",
675
+ onClick: () => setExpandedCards((prev) => __spreadProps(__spreadValues({}, prev), {
676
+ [groupKey]: !isExpanded
677
+ })),
678
+ sx: {
679
+ fontSize: "0.75rem",
680
+ minHeight: "28px",
681
+ textTransform: "none"
682
+ },
683
+ children: isExpanded ? "Show Less \u25B2" : `Show ${remainingCount} More \u25BC`
684
+ }
685
+ ) })
686
+ ] }) }) }, groupIndex)
687
+ );
688
+ }) })
689
+ ] });
690
+ };
691
+ const PermissionsSelectorEdit = (props) => {
692
+ const { record: contextRecord, resource, isPending, isLoading } = useEditContext();
693
+ if (isPending || isLoading) return /* @__PURE__ */ jsx(CircularProgress, {});
694
+ return /* @__PURE__ */ jsx(PermissionsSelectorBase, __spreadProps(__spreadValues({}, props), { record: contextRecord }));
695
+ };
696
+ const PermissionsSelectorCreate = (props) => {
697
+ return /* @__PURE__ */ jsx(PermissionsSelectorBase, __spreadProps(__spreadValues({}, props), { record: {} }));
698
+ };
699
+ const PermissionsSelector = ({
700
+ method,
701
+ attribute,
702
+ resourceConfig
703
+ }) => {
704
+ switch (method) {
705
+ case "edit":
706
+ return /* @__PURE__ */ jsx(PermissionsSelectorEdit, { attribute, method, resourceConfig });
707
+ case "create":
708
+ return /* @__PURE__ */ jsx(PermissionsSelectorCreate, { attribute, method, resourceConfig });
709
+ case "view":
710
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(NotFound, {}) });
711
+ //<PermissionsSelectorView attribute={attribute} method={method} resourceConfig={resourceConfig} />;
712
+ default:
713
+ return null;
714
+ }
715
+ };
716
+ var PermissionsSelector_default = PermissionsSelector;
717
+ export {
718
+ PermissionsSelector_default as default
719
+ };