@dashadmin/dash-admin 1.3.17 → 1.3.19

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 (268) hide show
  1. package/dist/AppAsyncWrapper.js +1 -0
  2. package/dist/AppWrapper.js +1 -0
  3. package/dist/DASHAdmin.js +1 -0
  4. package/dist/DASHAdmin.tsx.old +456 -0
  5. package/dist/RoutingWrapper.js +1 -0
  6. package/dist/classes/DASHStorageClass.js +1 -0
  7. package/dist/components/Input/RichTextField.js +1 -0
  8. package/dist/components/Redirect.js +1 -0
  9. package/dist/components/avatar/Avatar.js +1 -0
  10. package/dist/components/avatar/SingleImageUploader.js +1 -0
  11. package/dist/components/currency/Format.js +1 -0
  12. package/dist/components/custom/Redirect.js +1 -0
  13. package/dist/components/error/Error.js +1 -0
  14. package/dist/components/geocoding/GeocodingField.js +1 -0
  15. package/dist/components/i18n/BridgedLocalesMenuButton.js +1 -0
  16. package/dist/components/i18n/LangSwitcher.js +1 -0
  17. package/dist/components/loader/GlobalLoader.js +1 -0
  18. package/dist/components/logs/LogFile.js +1 -0
  19. package/dist/components/logs/LogFileById.js +1 -0
  20. package/dist/components/logs/LogViewer.js +1 -0
  21. package/dist/components/menu/AppMenu.js +1 -0
  22. package/dist/components/menu/CustomMenuItemLink.js +1 -0
  23. package/dist/components/menu/DarkToggleMode.js +1 -0
  24. package/dist/components/menu/LanguageToggleMode.js +1 -0
  25. package/dist/components/misc/CustomImageInput.js +1 -0
  26. package/dist/components/misc/DASHGlobalErrorHandler.js +1 -0
  27. package/dist/components/misc/DarkModeSwitcher.js +1 -0
  28. package/dist/components/misc/LanguageSwitcher.js +1 -0
  29. package/dist/components/misc/MUIHtmlToolTip.js +1 -0
  30. package/dist/components/misc/MuiSimpleJsonTable.js +1 -0
  31. package/dist/components/misc/MultiLevelTable.js +1 -0
  32. package/dist/components/misc/NoResults.js +1 -0
  33. package/dist/components/misc/PDFViewer.js +1 -0
  34. package/dist/components/navigation/Breadcrumbs.js +1 -0
  35. package/dist/components/navigation/BreadcrumbsManager.js +1 -0
  36. package/dist/components/navigation/index.js +1 -0
  37. package/dist/components/panel/Error.js +1 -0
  38. package/dist/components/permission/AvailablePermissionsContext.js +1 -0
  39. package/dist/components/permission/PermissionsSelector.js +1 -0
  40. package/dist/components/permission/PermissionsSelectorList.js +1 -0
  41. package/dist/components/permission/tsx +0 -0
  42. package/dist/components/racustombuttons/CustomRAButton.js +1 -0
  43. package/dist/components/racustombuttons/QuickButton.js +1 -0
  44. package/dist/components/racustombuttons/QuickEditButton.js +1 -0
  45. package/dist/components/racustombuttons/QuickIconButton.js +1 -0
  46. package/dist/components/scrollbar/Scrollbar.js +1 -0
  47. package/dist/components/selects/MultiSelect.js +1 -0
  48. package/dist/components/selects/RASearchableSelect.js +1 -0
  49. package/dist/components/selects/RASearchableSelectChips.js +1 -0
  50. package/dist/components/selects/SearchableSelect.js +1 -0
  51. package/dist/components/subscription/BillingCycleSelectInput.js +1 -0
  52. package/dist/components/subscription/PlanAddonsSettings.js +1 -0
  53. package/dist/components/subscription/PlanAuditLog.js +1 -0
  54. package/dist/components/subscription/PlanFeaturesSettings.js +1 -0
  55. package/dist/components/subscription/PlanLimitsSettings.js +1 -0
  56. package/dist/components/subscription/PlanMetadataSettings.js +1 -0
  57. package/dist/components/subscription/PlanPricesSettings.js +1 -0
  58. package/dist/components/subscription/index.js +1 -0
  59. package/dist/components/svgelements/SvgLoading.js +1 -0
  60. package/dist/components/svgelements/SvgLogo.js +1 -0
  61. package/dist/components/svgelements/SvgLogoMin.js +1 -0
  62. package/dist/components/svgelements/SvgShipping.js +1 -0
  63. package/dist/components/tenant/AvailablePermissionsContext.js +0 -0
  64. package/dist/components/tenant/TenantAttributes.js +1 -0
  65. package/dist/components/tenant/TenantAttributesContext.js +1 -0
  66. package/dist/components/tenant/TenantSelector.js +1 -0
  67. package/dist/components/tenant/TenantSettings.js +1 -0
  68. package/dist/components/tenant/TenantSettingsContext.js +1 -0
  69. package/dist/components/tenant/TenantTheme.js +1 -0
  70. package/dist/components/user/AvatarComponent.js +1 -0
  71. package/dist/components/user/TenantAvatarComponent.js +1 -0
  72. package/dist/components/user/UserPreferences.js +1 -0
  73. package/dist/config/ACTIONS.js +1 -0
  74. package/dist/config/ConstantsService.js +1 -0
  75. package/dist/config/DASHAdminSystemConstants.js +1 -0
  76. package/dist/config/PARSERS.js +1 -0
  77. package/dist/contexts/DashQueryClientContext.js +1 -0
  78. package/dist/contexts/DashResourceContext.js +1 -0
  79. package/dist/contexts/I18nBridgeContext.js +1 -0
  80. package/dist/contexts/I18nBridgeSetter.js +1 -0
  81. package/dist/contexts/I18nReduxSync.js +1 -0
  82. package/dist/contexts/SubscriptionPlanFormatsProvider.js +1 -0
  83. package/dist/contexts/SystemRequestsCache.js +1 -0
  84. package/dist/contexts/auth/AuthContext.js +1 -0
  85. package/dist/contexts/auth/AuthContextLocalStorage.js +1 -0
  86. package/dist/contexts/auth/DASHAuthenticationService.js +1 -0
  87. package/dist/contexts/auth/WindowContext.js +1 -0
  88. package/dist/contexts/auth/index.js +1 -0
  89. package/dist/contexts/com/FCMContext.js +1 -0
  90. package/dist/contexts/com/LaravelEchoContext.js +1 -0
  91. package/dist/contexts/com/LaravelEchoMgr.js +1 -0
  92. package/dist/contexts/com/components/DefaultNotificationComponent.js +1 -0
  93. package/dist/contexts/com/components/NotificationAttributesTable.js +1 -0
  94. package/dist/contexts/com/components/NotificationRenderer.js +1 -0
  95. package/dist/contexts/com/components/NotificationsWidget.js +1 -0
  96. package/dist/contexts/com/components/notificationFormats.js +1 -0
  97. package/dist/contexts/com/useLaravelEcho.js +1 -0
  98. package/dist/contexts/dictionary/DictionaryContext.js +1 -0
  99. package/dist/declarations.d.ts +17 -0
  100. package/dist/default-theme/DASHAppProviders.js +1 -0
  101. package/dist/default-theme/DashThemeContext.js +1 -0
  102. package/dist/default-theme/DashThemeContext.tsx.fast +143 -0
  103. package/dist/default-theme/DashThemeContext.tsx.old +306 -0
  104. package/dist/default-theme/DashThemeHelperProvider.js +1 -0
  105. package/dist/default-theme/DomainAppLayout.js +1 -0
  106. package/dist/default-theme/DomainHeader.js +1 -0
  107. package/dist/default-theme/DomainTheme.js +1 -0
  108. package/dist/default-theme/FullLayoutMarkup.js +1 -0
  109. package/dist/default-theme/StaticLayout.js +1 -0
  110. package/dist/default-theme/index.js +1 -0
  111. package/dist/default-theme/menu/AppMaterialMenu.js +1 -0
  112. package/dist/default-theme/menu/AppMenuComponents/SubmenuPortal.js +1 -0
  113. package/dist/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItem.js +1 -0
  114. package/dist/default-theme/menu/AppMenuComponents/collapsed/CollapsedSidebarItems.js +1 -0
  115. package/dist/default-theme/menu/AppMenuComponents/expanded/CollapsableSidebarMenu.js +1 -0
  116. package/dist/default-theme/menu/AppMenuComponents/expanded/SidebarItem.js +1 -0
  117. package/dist/default-theme/menu/AppMenuComponents/getItem.js +1 -0
  118. package/dist/default-theme/menu/AppMenuComponents/interfaces.js +0 -0
  119. package/dist/default-theme/menu/AppMenuComponents/submenuConstants.js +1 -0
  120. package/dist/default-theme/menu/AppSidebarMaterial.js +1 -0
  121. package/dist/default-theme/menu/SidebarActions.js +1 -0
  122. package/dist/default-theme/updateDomCssVariables.js +1 -0
  123. package/dist/helpers/checkRole.js +1 -0
  124. package/dist/helpers/parseAxiosError.js +2 -0
  125. package/dist/hooks/audio/useAudio.js +1 -0
  126. package/dist/hooks/axios.js +1 -0
  127. package/dist/hooks/data/useDashboardStats.js +1 -0
  128. package/dist/hooks/data/usePackageByClientsStats.js +1 -0
  129. package/dist/hooks/data/usePackageByCommunesStats.js +1 -0
  130. package/dist/hooks/data/usePackageStats.js +1 -0
  131. package/dist/hooks/data/usePackageWithdrawDetails.js +1 -0
  132. package/dist/hooks/data/useStats.js +1 -0
  133. package/dist/hooks/isCurrentPath.js +1 -0
  134. package/dist/hooks/notifications/WSMessagesManager.js +1 -0
  135. package/dist/hooks/notifications/WSPusherManager.js +1 -0
  136. package/dist/hooks/useBreadcrumbs.js +1 -0
  137. package/dist/hooks/useClickOutside.js +1 -0
  138. package/dist/hooks/useFormPersistance.js +1 -0
  139. package/dist/hooks/useGlobalErrorMediator.js +1 -0
  140. package/dist/hooks/useGlobalLoaderMgr.js +1 -0
  141. package/dist/hooks/useHash.js +1 -0
  142. package/dist/hooks/useLocalStorage.js +1 -0
  143. package/dist/hooks/usePolyglotTranslation.js +1 -0
  144. package/dist/hooks/usePrevious.js +1 -0
  145. package/dist/hooks/usePrintSelected.js +1 -0
  146. package/dist/hooks/useVirtualHash.js +1 -0
  147. package/dist/hooks/window/useWindowSize.js +1 -0
  148. package/dist/interfaces/IAppResourceConfig.js +0 -0
  149. package/dist/interfaces/Log.js +0 -0
  150. package/dist/interfaces/Tenant.js +0 -0
  151. package/dist/interfaces/communication/IActions.js +0 -0
  152. package/dist/interfaces/communication/INotification.js +0 -0
  153. package/dist/interfaces/communication/IPayload.js +0 -0
  154. package/dist/interfaces/communication/IRequestAction.js +0 -0
  155. package/dist/interfaces/communication/IRequestPayload.js +0 -0
  156. package/dist/interfaces/communication/IResponseAction.js +0 -0
  157. package/dist/interfaces/misc/IAny.js +0 -0
  158. package/dist/interfaces/misc/IFlashMessage.js +0 -0
  159. package/dist/interfaces/navigation/IAppMenu.js +0 -0
  160. package/dist/interfaces/navigation/ICollapsableSidebarMenu.js +0 -0
  161. package/dist/interfaces/navigation/IMenuItem.js +0 -0
  162. package/dist/interfaces/notifications/IModel.js +0 -0
  163. package/dist/interfaces/notifications/IModelField.js +0 -0
  164. package/dist/interfaces/notifications/IUserNotification.js +0 -0
  165. package/dist/interfaces/notifications/IUserNotificationData.js +0 -0
  166. package/dist/interfaces/notifications/IUserNotificationPayload.js +0 -0
  167. package/dist/interfaces/user/IGetAuth.js +0 -0
  168. package/dist/interfaces/user/ITenantSettings.js +0 -0
  169. package/dist/interfaces/user/IUser.js +0 -0
  170. package/dist/interfaces/user/IUserSettings.js +0 -0
  171. package/dist/interfaces.js +1 -0
  172. package/dist/layout/AppLayout.js +1 -0
  173. package/dist/layout/ApplicationLayout.js +1 -0
  174. package/dist/layout/MotionWrapper.js +1 -0
  175. package/dist/layout/MotionWrapper.original.js +1 -0
  176. package/dist/layout/ResourceMenu.js +1 -0
  177. package/dist/layout/ResoureLayout.js +1 -0
  178. package/dist/layout/TransitionWrapper.js +24 -0
  179. package/dist/pages/ChangePassword.js +1 -0
  180. package/dist/pages/DASHLanding.js +1 -0
  181. package/dist/pages/DASHLightWeightLogin.js +1 -0
  182. package/dist/pages/DASHSimpleLogin.js +1 -0
  183. package/dist/pages/Login.js +1 -0
  184. package/dist/pages/Profile.js +1 -0
  185. package/dist/pages/RecoverPassword.js +1 -0
  186. package/dist/pages/SingleImageUploader.js +1 -0
  187. package/dist/pages/VerifyAccount.js +1 -0
  188. package/dist/providers/authProvider.js +1 -0
  189. package/dist/providers/dataProvider.js +1 -0
  190. package/dist/providers/i18n/en.js +1 -0
  191. package/dist/providers/i18n/es.js +1 -0
  192. package/dist/providers/i18n/languages.js +1 -0
  193. package/dist/providers/i18nProvider.js +1 -0
  194. package/dist/react-admin-dash/RADashComponent.js +1 -0
  195. package/dist/react-admin-dash/Resource.js +1 -0
  196. package/dist/resources/Brand/BrandResource.js +1 -0
  197. package/dist/resources/DASHResourceLoader.js +1 -0
  198. package/dist/resources/Log/LogResource.js +1 -0
  199. package/dist/resources/Tenant/ImpersonateTenantResource.js +1 -0
  200. package/dist/resources/Trash/TrashTemplate.js +1 -0
  201. package/dist/resources.js +1 -0
  202. package/dist/schemas/log.js +1 -0
  203. package/dist/schemas/notification.js +1 -0
  204. package/dist/schemas/permissions.js +1 -0
  205. package/dist/schemas/roles.js +1 -0
  206. package/dist/schemas/rolesDataGrid.js +1 -0
  207. package/dist/schemas/subscription/components/SubscriptionActions.js +1 -0
  208. package/dist/schemas/subscription/components/SubscriptionPaymentHistory.js +1 -0
  209. package/dist/schemas/subscription/components/SubscriptionPlanFeatures.js +1 -0
  210. package/dist/schemas/subscription/components/SubscriptionPlanPreview.js +1 -0
  211. package/dist/schemas/subscription/components/SubscriptionPlanStats.js +1 -0
  212. package/dist/schemas/subscription/components/SubscriptionStatusIndicator.js +1 -0
  213. package/dist/schemas/subscription/subscriptionPlanSchema.js +1 -0
  214. package/dist/schemas/subscription/subscriptionSchema.js +1 -0
  215. package/dist/schemas/subscriptionPlan.js +1 -0
  216. package/dist/schemas/tenant.js +1 -0
  217. package/dist/schemas/tenantUser.js +1 -0
  218. package/dist/schemas/tenant_superadmin.js +1 -0
  219. package/dist/schemas/user.js +1 -0
  220. package/dist/systemResources.js +1 -0
  221. package/dist/systemResources.old.js +1 -0
  222. package/dist/templates/ResourceTemplate.js +1 -0
  223. package/dist/templates/ResourceTemplate.tsx.memoized_experiment +350 -0
  224. package/dist/templates/ResourceTemplate.tsx.original +396 -0
  225. package/dist/templates/ResourceTemplateCreate.js +1 -0
  226. package/dist/templates/ResourceTemplateEdit.js +1 -0
  227. package/dist/templates/ResourceTemplateFull.js +1 -0
  228. package/dist/templates/ResourceTemplateList.js +1 -0
  229. package/dist/templates/ResourceTemplateOld.tsx.bkup +567 -0
  230. package/dist/templates/ResourceTemplateShow.js +1 -0
  231. package/dist/templates/TrashTemplate.js +1 -0
  232. package/dist/tenantResources.js +1 -0
  233. package/dist/test_portal_bubbles.js +1 -0
  234. package/dist/theme/AppHeader.js +1 -0
  235. package/dist/theme/AppLayoutSetting.js +1 -0
  236. package/dist/theme/AppLogo.js +1 -0
  237. package/dist/theme/AppSidebar.js +1 -0
  238. package/dist/theme/AppSidebarContent.js +1 -0
  239. package/dist/theme/AppSidebarLogo.js +1 -0
  240. package/dist/theme/components/PageTitle.js +1 -0
  241. package/dist/utils/cache/CacheInvalidatorContext.js +1 -0
  242. package/dist/utils/cache/CacheInvalidatorListenerComponent.js +1 -0
  243. package/dist/utils/cache/useCacheInvalidatorListener.js +1 -0
  244. package/dist/utils/convertFileToBase64.js +1 -0
  245. package/dist/utils/convertToFile.js +1 -0
  246. package/dist/utils/cookies.js +1 -0
  247. package/dist/utils/dashDefaultQueryClient.js +1 -0
  248. package/dist/utils/dataUrlToBlob.js +1 -0
  249. package/dist/utils/deepReplace.js +1 -0
  250. package/dist/utils/getProfileMenu.js +1 -0
  251. package/dist/utils/getTenantSettings.js +1 -0
  252. package/dist/utils/getType.js +1 -0
  253. package/dist/utils/getUserSettings.js +1 -0
  254. package/dist/utils/hasCode.js +1 -0
  255. package/dist/utils/index.js +1 -0
  256. package/dist/utils/injectTenantStyles.js +1 -0
  257. package/dist/utils/isComponent.js +1 -0
  258. package/dist/utils/navEvents.js +1 -0
  259. package/dist/utils/prototypes.js +1 -0
  260. package/dist/utils/regexp.js +1 -0
  261. package/dist/utils/resolveObjectPath.js +1 -0
  262. package/dist/utils/setNativeValue.js +1 -0
  263. package/dist/utils/slugify.js +1 -0
  264. package/dist/utils/validators/emailValidator.js +1 -0
  265. package/dist/utils/validators/requiredValidator.js +1 -0
  266. package/dist/utils/validators/rutValidator.js +1 -0
  267. package/dist/utils/validators.js +1 -0
  268. package/package.json +13 -2
@@ -0,0 +1,350 @@
1
+ /* eslint-disable no-mixed-spaces-and-tabs */
2
+ import { Resource } from 'react-admin';
3
+ import { CustomRoutes } from 'react-admin/src';
4
+ import { Route, useParams } from 'react-router-dom';
5
+ //import { Outlet } from 'react-router';
6
+ import {
7
+ IDashAutoAdminResourceConfig,
8
+ evalActionPermission,
9
+ } from 'dash-auto-admin';
10
+ import React, { PropsWithChildren, useMemo, useCallback } from 'react';
11
+ import MotionWrapper from '../layout/MotionWrapper';
12
+ import Redirect from '../components/Redirect';
13
+ import { ResourceTemplateCreate } from './ResourceTemplateCreate';
14
+ import { ResourceTemplateEdit } from './ResourceTemplateEdit';
15
+ import { ResourceTemplateList } from './ResourceTemplateList';
16
+ import { ResourceTemplateShow } from './ResourceTemplateShow';
17
+ import {DASHAdminSystemConstants} from '../config/DASHAdminSystemConstants';
18
+ import TrashTemplate from './TrashTemplate';
19
+ import { DashResourceProvider } from '../contexts/DashResourceContext';
20
+
21
+ export interface IResourceTemplate {
22
+ resourceConfig: IDashAutoAdminResourceConfig;
23
+ }
24
+
25
+ // Memoized ResourceTemplateList
26
+ const MemoizedResourceTemplateList = React.memo(({ resourceConfig }: { resourceConfig: IDashAutoAdminResourceConfig }) => (
27
+ <DashResourceProvider resourceConfig={resourceConfig}>
28
+ <ResourceTemplateList resourceConfig={resourceConfig} />
29
+ </DashResourceProvider>
30
+ ), (prevProps, nextProps) => {
31
+ return prevProps.resourceConfig === nextProps.resourceConfig;
32
+ });
33
+
34
+ // Memoized ResourceTemplateCreate
35
+ const MemoizedResourceTemplateCreate = React.memo(({ resourceConfig }: { resourceConfig: IDashAutoAdminResourceConfig }) => (
36
+ <DashResourceProvider resourceConfig={resourceConfig}>
37
+ <ResourceTemplateCreate resourceConfig={resourceConfig} />
38
+ </DashResourceProvider>
39
+ ), (prevProps, nextProps) => {
40
+ return prevProps.resourceConfig === nextProps.resourceConfig;
41
+ });
42
+
43
+ // Memoized ResourceTemplateShow
44
+ const MemoizedResourceTemplateShow = React.memo(({ resourceConfig }: { resourceConfig: IDashAutoAdminResourceConfig }) => (
45
+ <DashResourceProvider resourceConfig={resourceConfig}>
46
+ <ResourceTemplateShow resourceConfig={resourceConfig} />
47
+ </DashResourceProvider>
48
+ ), (prevProps, nextProps) => {
49
+ return prevProps.resourceConfig === nextProps.resourceConfig;
50
+ });
51
+
52
+ // Memoized ResourceTemplateEdit
53
+ const MemoizedResourceTemplateEdit = React.memo(({ resourceConfig }: { resourceConfig: IDashAutoAdminResourceConfig }) => (
54
+ <DashResourceProvider resourceConfig={resourceConfig}>
55
+ <ResourceTemplateEdit resourceConfig={resourceConfig} />
56
+ </DashResourceProvider>
57
+ ), (prevProps, nextProps) => {
58
+ return prevProps.resourceConfig === nextProps.resourceConfig;
59
+ });
60
+
61
+ // Memoized TrashTemplate
62
+ const MemoizedTrashTemplate = React.memo(({ resourceConfig }: { resourceConfig: IDashAutoAdminResourceConfig }) => (
63
+ <DashResourceProvider resourceConfig={resourceConfig}>
64
+ <TrashTemplate resourceConfig={resourceConfig} />
65
+ </DashResourceProvider>
66
+ ), (prevProps, nextProps) => {
67
+ return prevProps.resourceConfig === nextProps.resourceConfig;
68
+ });
69
+
70
+ // Memoized Redirect component
71
+ const MemoizedRedirect = React.memo(({
72
+ resourceConfig,
73
+ stateHashPattern,
74
+ method,
75
+ drawerMethod
76
+ }: {
77
+ resourceConfig: IDashAutoAdminResourceConfig;
78
+ stateHashPattern: string;
79
+ method: string;
80
+ drawerMethod: string;
81
+ }) => (
82
+ <DashResourceProvider resourceConfig={resourceConfig}>
83
+ <Redirect
84
+ stateHashPattern={stateHashPattern}
85
+ method={method}
86
+ drawerMethod={drawerMethod}
87
+ resourceConfig={resourceConfig}
88
+ />
89
+ </DashResourceProvider>
90
+ ), (prevProps, nextProps) => {
91
+ return (
92
+ prevProps.resourceConfig === nextProps.resourceConfig &&
93
+ prevProps.stateHashPattern === nextProps.stateHashPattern &&
94
+ prevProps.method === nextProps.method &&
95
+ prevProps.drawerMethod === nextProps.drawerMethod
96
+ );
97
+ });
98
+
99
+ // Cache for memoized resource templates
100
+ const resourceTemplateCache = new Map<string, React.ReactElement>();
101
+
102
+ // This is the function that gets called - it returns JSX
103
+ export const ResourceTemplate = (resourceConfig: IDashAutoAdminResourceConfig): React.ReactElement => {
104
+ const debug = false;
105
+
106
+ // Create a cache key based on the resource config
107
+ const cacheKey = `${resourceConfig.model}-${resourceConfig.create}-${resourceConfig.edit}-${resourceConfig.view}-${resourceConfig.list}-${resourceConfig.delete}-${resourceConfig.drawer}-${JSON.stringify(resourceConfig.drawerOptions)}`;
108
+
109
+ // Check if we have a cached version
110
+ if (resourceTemplateCache.has(cacheKey)) {
111
+ return resourceTemplateCache.get(cacheKey)!;
112
+ }
113
+
114
+ const _create = evalActionPermission(resourceConfig, resourceConfig?.create);
115
+ const _edit = evalActionPermission(resourceConfig, resourceConfig?.edit);
116
+ const _view = evalActionPermission(resourceConfig, resourceConfig?.view);
117
+ const _list = evalActionPermission(resourceConfig, resourceConfig?.list);
118
+ const _delete = evalActionPermission(resourceConfig, resourceConfig?.delete);
119
+
120
+ if (debug) {
121
+ console.info(`${resourceConfig.model} ResourceTemplate`, {
122
+ resourceConfig: resourceConfig,
123
+ evaluatedPermissions: {
124
+ create: _create,
125
+ edit: _edit,
126
+ view: _view,
127
+ list: _list,
128
+ delete: _delete,
129
+ },
130
+ });
131
+ }
132
+
133
+ const idParamName = resourceConfig?.idParamName || 'id';
134
+ const URL_PREFIX = DASHAdminSystemConstants.system.URL_PREFIX;
135
+
136
+ // Generate drawer routes
137
+ const drawerRoutes = [];
138
+ if (resourceConfig?.drawer === true) {
139
+ if (resourceConfig?.drawerOptions?.create !== false) {
140
+ drawerRoutes.push(
141
+ <Route
142
+ key={`${resourceConfig.model}-create`}
143
+ path={URL_PREFIX + resourceConfig.model + '/create'}
144
+ element={
145
+ <MemoizedRedirect
146
+ resourceConfig={resourceConfig}
147
+ stateHashPattern={URL_PREFIX + resourceConfig.model + '/inline/create'}
148
+ method='list'
149
+ drawerMethod='create'
150
+ />
151
+ }
152
+ />
153
+ );
154
+ }
155
+
156
+ if (resourceConfig?.drawerOptions?.edit !== false) {
157
+ drawerRoutes.push(
158
+ <Route
159
+ key={`${resourceConfig.model}-inline`}
160
+ path={URL_PREFIX + resourceConfig.model + '/inline'}
161
+ element={
162
+ <MemoizedRedirect
163
+ resourceConfig={resourceConfig}
164
+ stateHashPattern={URL_PREFIX + resourceConfig.model + '/inline'}
165
+ method='list'
166
+ drawerMethod='edit'
167
+ />
168
+ }
169
+ />
170
+ );
171
+ }
172
+
173
+ if (resourceConfig?.drawerOptions?.view !== false) {
174
+ drawerRoutes.push(
175
+ <Route
176
+ key={`${resourceConfig.model}-inline-view`}
177
+ path={URL_PREFIX + resourceConfig.model + '/inline/:' + idParamName}
178
+ element={
179
+ <MemoizedRedirect
180
+ resourceConfig={resourceConfig}
181
+ stateHashPattern={
182
+ URL_PREFIX +
183
+ resourceConfig.model +
184
+ '/inline/:' +
185
+ idParamName +
186
+ '/:method'
187
+ }
188
+ method='list'
189
+ drawerMethod='edit'
190
+ />
191
+ }
192
+ />
193
+ );
194
+ }
195
+
196
+ if (resourceConfig?.drawerOptions?.edit !== false) {
197
+ drawerRoutes.push(
198
+ <Route
199
+ key={`${resourceConfig.model}-inline-edit`}
200
+ path={URL_PREFIX + resourceConfig.model + '/inline/:' + idParamName + '/edit'}
201
+ element={
202
+ <MemoizedRedirect
203
+ resourceConfig={resourceConfig}
204
+ stateHashPattern={
205
+ URL_PREFIX +
206
+ resourceConfig.model +
207
+ '/inline/:' +
208
+ idParamName +
209
+ '/:method'
210
+ }
211
+ method='list'
212
+ drawerMethod='edit'
213
+ />
214
+ }
215
+ />
216
+ );
217
+ }
218
+
219
+ if (resourceConfig?.drawerOptions?.view !== false) {
220
+ drawerRoutes.push(
221
+ <Route
222
+ key={`${resourceConfig.model}-inline-show`}
223
+ path={URL_PREFIX + resourceConfig.model + '/inline/:' + idParamName + '/show'}
224
+ element={
225
+ <MemoizedRedirect
226
+ resourceConfig={resourceConfig}
227
+ stateHashPattern={
228
+ URL_PREFIX +
229
+ resourceConfig.model +
230
+ '/inline/:' +
231
+ idParamName +
232
+ '/:method'
233
+ }
234
+ method='list'
235
+ drawerMethod='show'
236
+ />
237
+ }
238
+ />
239
+ );
240
+ }
241
+
242
+ if (resourceConfig?.drawerOptions?.create !== false) {
243
+ drawerRoutes.push(
244
+ <Route
245
+ key={`${resourceConfig.model}-inline-create`}
246
+ path={URL_PREFIX + resourceConfig.model + '/inline/create'}
247
+ element={
248
+ <MemoizedRedirect
249
+ resourceConfig={resourceConfig}
250
+ stateHashPattern={URL_PREFIX + resourceConfig.model + '/inline/create'}
251
+ method='list'
252
+ drawerMethod='create'
253
+ />
254
+ }
255
+ />
256
+ );
257
+ }
258
+ }
259
+
260
+ // Generate resource routes
261
+ const resourceRoutes = [];
262
+
263
+ // Trash route
264
+ resourceRoutes.push(
265
+ <Route
266
+ key={`${resourceConfig.model}-trash`}
267
+ path="trash/*"
268
+ element={<MemoizedTrashTemplate resourceConfig={resourceConfig} />}
269
+ />
270
+ );
271
+
272
+ // List route
273
+ if (_list) {
274
+ resourceRoutes.push(
275
+ <Route
276
+ key={`${resourceConfig.model}-list`}
277
+ path={`/*`}
278
+ element={<MemoizedResourceTemplateList resourceConfig={resourceConfig} />}
279
+ />
280
+ );
281
+ }
282
+
283
+ // Create route
284
+ if (_create) {
285
+ resourceRoutes.push(
286
+ <Route
287
+ key={`${resourceConfig.model}-create`}
288
+ path={`create/*`}
289
+ element={<MemoizedResourceTemplateCreate resourceConfig={resourceConfig} />}
290
+ />
291
+ );
292
+ }
293
+
294
+ // Show route
295
+ if (_view) {
296
+ resourceRoutes.push(
297
+ <Route
298
+ key={`${resourceConfig.model}-show`}
299
+ path={`:id/show/*`}
300
+ element={<MemoizedResourceTemplateShow resourceConfig={resourceConfig} />}
301
+ />
302
+ );
303
+ }
304
+
305
+ // Edit route
306
+ if (_edit) {
307
+ resourceRoutes.push(
308
+ <Route
309
+ key={`${resourceConfig.model}-edit`}
310
+ path={`:id/*`}
311
+ element={<MemoizedResourceTemplateEdit resourceConfig={resourceConfig} />}
312
+ />
313
+ );
314
+ }
315
+
316
+ // Generate custom routes
317
+ const customRoutes = typeof resourceConfig.customRoutes === 'function'
318
+ ? resourceConfig.customRoutes(resourceConfig)
319
+ : <></>;
320
+
321
+ // Create the final JSX
322
+ const result = (
323
+ <React.Fragment key={`resource-template-${resourceConfig.model}`}>
324
+ <CustomRoutes>
325
+ <Route element={<MotionWrapper />}>
326
+ {customRoutes}
327
+ {drawerRoutes}
328
+ </Route>
329
+ </CustomRoutes>
330
+
331
+ <Resource
332
+ options={{ label: resourceConfig.label, group: resourceConfig.group }}
333
+ name={resourceConfig.model}
334
+ recordRepresentation={resourceConfig?.recordRepresentation || "name"}
335
+ resourceConfig={resourceConfig}
336
+ // @ts-ignore Expected mismatch types, nevertheless compatible
337
+ icon={resourceConfig?.icon || <></>}
338
+ >
339
+ {resourceRoutes}
340
+ </Resource>
341
+ </React.Fragment>
342
+ );
343
+
344
+ // Cache the result
345
+ resourceTemplateCache.set(cacheKey, result);
346
+
347
+ return result;
348
+ };
349
+
350
+ export default ResourceTemplate;