@jmruthers/pace-core 0.5.5 → 0.5.7

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 (123) hide show
  1. package/dist/{DataTable-ltTFXHS3.d.ts → DataTable-32L3DDeG.d.ts} +1 -1
  2. package/dist/{DataTable-3SSI644S.js → DataTable-MZKEENPY.js} +2 -2
  3. package/dist/{chunk-2BJFM2JC.js → chunk-2VSQSO5Z.js} +26 -25
  4. package/dist/chunk-2VSQSO5Z.js.map +1 -0
  5. package/dist/{chunk-RTCA5ZNK.js → chunk-Y2LJQ7QE.js} +2 -2
  6. package/dist/components.d.ts +2 -2
  7. package/dist/components.js +2 -2
  8. package/dist/hooks.d.ts +1 -1
  9. package/dist/index.d.ts +2 -2
  10. package/dist/index.js +2 -2
  11. package/dist/{types-BRDU7N6w.d.ts → types-CczCVCDt.d.ts} +11 -4
  12. package/dist/utils.d.ts +2 -2
  13. package/dist/utils.js +1 -1
  14. package/docs/api/classes/ErrorBoundary.md +1 -1
  15. package/docs/api/classes/InvalidScopeError.md +1 -1
  16. package/docs/api/classes/MissingUserContextError.md +1 -1
  17. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  18. package/docs/api/classes/PermissionDeniedError.md +1 -1
  19. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  20. package/docs/api/classes/RBACAuditManager.md +1 -1
  21. package/docs/api/classes/RBACCache.md +1 -1
  22. package/docs/api/classes/RBACEngine.md +1 -1
  23. package/docs/api/classes/RBACError.md +1 -1
  24. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  25. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  26. package/docs/api/interfaces/AggregateConfig.md +1 -1
  27. package/docs/api/interfaces/ButtonProps.md +1 -1
  28. package/docs/api/interfaces/CardProps.md +1 -1
  29. package/docs/api/interfaces/ColorPalette.md +1 -1
  30. package/docs/api/interfaces/ColorShade.md +1 -1
  31. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  32. package/docs/api/interfaces/DataTableAction.md +1 -1
  33. package/docs/api/interfaces/DataTableColumn.md +1 -1
  34. package/docs/api/interfaces/DataTableProps.md +34 -34
  35. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  36. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  37. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  38. package/docs/api/interfaces/EventContextType.md +1 -1
  39. package/docs/api/interfaces/EventLogoProps.md +1 -1
  40. package/docs/api/interfaces/EventProviderProps.md +1 -1
  41. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  42. package/docs/api/interfaces/FileUploadProps.md +1 -1
  43. package/docs/api/interfaces/FooterProps.md +1 -1
  44. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  45. package/docs/api/interfaces/InputProps.md +1 -1
  46. package/docs/api/interfaces/LabelProps.md +1 -1
  47. package/docs/api/interfaces/LoginFormProps.md +1 -1
  48. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  49. package/docs/api/interfaces/NavigationContextType.md +1 -1
  50. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  51. package/docs/api/interfaces/NavigationItem.md +1 -1
  52. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  53. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  54. package/docs/api/interfaces/Organisation.md +1 -1
  55. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  56. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  57. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  58. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  59. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  60. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  61. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  62. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  63. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  64. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  65. package/docs/api/interfaces/PaletteData.md +1 -1
  66. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  67. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  68. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  69. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  70. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  71. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  72. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  73. package/docs/api/interfaces/RBACConfig.md +1 -1
  74. package/docs/api/interfaces/RBACContextType.md +1 -1
  75. package/docs/api/interfaces/RBACLogger.md +1 -1
  76. package/docs/api/interfaces/RBACProviderProps.md +1 -1
  77. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  78. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  79. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  80. package/docs/api/interfaces/RouteConfig.md +1 -1
  81. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  82. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  83. package/docs/api/interfaces/StorageConfig.md +1 -1
  84. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  85. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  86. package/docs/api/interfaces/StorageListOptions.md +1 -1
  87. package/docs/api/interfaces/StorageListResult.md +1 -1
  88. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  89. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  90. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  91. package/docs/api/interfaces/StyleImport.md +1 -1
  92. package/docs/api/interfaces/ToastActionElement.md +1 -1
  93. package/docs/api/interfaces/ToastProps.md +1 -1
  94. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  95. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  96. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  97. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  98. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  99. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  100. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  101. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  102. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  103. package/docs/api/interfaces/UserEventAccess.md +1 -1
  104. package/docs/api/interfaces/UserMenuProps.md +1 -1
  105. package/docs/api/interfaces/UserProfile.md +1 -1
  106. package/docs/api/modules.md +3 -3
  107. package/docs/implementation-guides/datatable-rbac-usage.md +286 -0
  108. package/package.json +1 -1
  109. package/src/components/DataTable/DataTable.tsx +0 -5
  110. package/src/components/DataTable/__tests__/DataTable.hooks.test.tsx +0 -1
  111. package/src/components/DataTable/components/ActionButtons.tsx +1 -2
  112. package/src/components/DataTable/components/DataTableCore.tsx +38 -33
  113. package/src/components/DataTable/components/UnifiedTableBody.tsx +2 -4
  114. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +1 -1
  115. package/src/components/DataTable/examples/HierarchicalExample.tsx +3 -3
  116. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +3 -3
  117. package/src/components/DataTable/examples/PerformanceExample.tsx +3 -3
  118. package/src/components/DataTable/types.ts +12 -7
  119. package/src/rbac/hooks/useRBAC.test.ts +0 -8
  120. package/dist/chunk-2BJFM2JC.js.map +0 -1
  121. package/src/components/DataTable/__tests__/DataTable.hooks.test 2.tsx +0 -191
  122. /package/dist/{DataTable-3SSI644S.js.map → DataTable-MZKEENPY.js.map} +0 -0
  123. /package/dist/{chunk-RTCA5ZNK.js.map → chunk-Y2LJQ7QE.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import React__default from 'react';
3
- import { D as DataRecord, a as DataTableColumn, b as DataTableRBACConfig, c as DataTableFeatureConfig, H as HierarchicalConfig, P as PerformanceConfig, S as ServerSideConfig, d as PaginationMode, C as ChunkingConfig, e as SearchIndexConfig, G as GetRowId, E as EmptyStateConfig, A as AggregateConfig, f as DataTableAction } from './types-BRDU7N6w.js';
3
+ import { D as DataRecord, a as DataTableColumn, b as DataTableRBACConfig, c as DataTableFeatureConfig, H as HierarchicalConfig, P as PerformanceConfig, S as ServerSideConfig, d as PaginationMode, C as ChunkingConfig, e as SearchIndexConfig, G as GetRowId, E as EmptyStateConfig, A as AggregateConfig, f as DataTableAction } from './types-CczCVCDt.js';
4
4
 
5
5
  /**
6
6
  * Configuration interface for customizing ImportModal text content
@@ -32,7 +32,7 @@ import {
32
32
  useDataTableContext,
33
33
  usePluginRegistry,
34
34
  useStateManager
35
- } from "./chunk-2BJFM2JC.js";
35
+ } from "./chunk-2VSQSO5Z.js";
36
36
  import "./chunk-QVYBYGT2.js";
37
37
  import "./chunk-GWSBHC4J.js";
38
38
  import "./chunk-7BNPOCLL.js";
@@ -96,4 +96,4 @@ export {
96
96
  usePluginRegistry,
97
97
  useStateManager
98
98
  };
99
- //# sourceMappingURL=DataTable-3SSI644S.js.map
99
+ //# sourceMappingURL=DataTable-MZKEENPY.js.map
@@ -3347,38 +3347,39 @@ function DataTableInternal({
3347
3347
  defaultOrder: columns.map((col) => col.id || col.accessorKey || ""),
3348
3348
  enablePersistence: features.columnReordering
3349
3349
  });
3350
+ const pageId = rbac.pageId;
3350
3351
  const permissions = {
3351
3352
  canRead: useCan(user?.id || "", {
3352
3353
  organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
3353
3354
  eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
3354
3355
  appId: user?.user_metadata?.appId || user?.app_metadata?.appId
3355
- }, `read:${rbac.resource}`, rbac.pageId),
3356
+ }, `read:page.${pageId}`, pageId),
3356
3357
  canCreate: useCan(user?.id || "", {
3357
3358
  organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
3358
3359
  eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
3359
3360
  appId: user?.user_metadata?.appId || user?.app_metadata?.appId
3360
- }, `create:${rbac.resource}`, rbac.pageId),
3361
+ }, `create:page.${pageId}`, pageId),
3361
3362
  canUpdate: useCan(user?.id || "", {
3362
3363
  organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
3363
3364
  eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
3364
3365
  appId: user?.user_metadata?.appId || user?.app_metadata?.appId
3365
- }, `update:${rbac.resource}`, rbac.pageId),
3366
+ }, `update:page.${pageId}`, pageId),
3366
3367
  canDelete: useCan(user?.id || "", {
3367
3368
  organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
3368
3369
  eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
3369
3370
  appId: user?.user_metadata?.appId || user?.app_metadata?.appId
3370
- }, `delete:${rbac.resource}`, rbac.pageId),
3371
+ }, `delete:page.${pageId}`, pageId),
3371
3372
  canExport: useCan(user?.id || "", {
3372
3373
  organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
3373
3374
  eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
3374
3375
  appId: user?.user_metadata?.appId || user?.app_metadata?.appId
3375
- }, `manage:${rbac.resource}`, rbac.pageId),
3376
+ }, `manage:page.${pageId}`, pageId),
3376
3377
  // Using manage for export/import
3377
3378
  canImport: useCan(user?.id || "", {
3378
3379
  organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
3379
3380
  eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
3380
3381
  appId: user?.user_metadata?.appId || user?.app_metadata?.appId
3381
- }, `manage:${rbac.resource}`, rbac.pageId)
3382
+ }, `manage:page.${pageId}`, pageId)
3382
3383
  // Using manage for export/import
3383
3384
  };
3384
3385
  const finalPaginationMode = paginationMode || detectedMode;
@@ -3490,21 +3491,7 @@ function DataTableInternal({
3490
3491
  }
3491
3492
  };
3492
3493
  }, [cleanup]);
3493
- if (!user) {
3494
- throw new Error("DataTable requires authenticated user for RBAC");
3495
- }
3496
- if (!rbac?.resource) {
3497
- throw new Error("DataTable requires rbac.resource for permission checking");
3498
- }
3499
- const scope = {
3500
- organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
3501
- eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
3502
- appId: user?.user_metadata?.appId || user?.app_metadata?.appId
3503
- };
3504
- if (!permissions.canRead.can) {
3505
- return /* @__PURE__ */ jsx20(AccessDeniedPage, { resource: rbac?.resource || "test-resource", operation: "read" });
3506
- }
3507
- const secureFeatures = {
3494
+ const secureFeatures = useMemo6(() => ({
3508
3495
  ...features,
3509
3496
  creation: features.creation && permissions.canCreate.can,
3510
3497
  editing: features.editing && permissions.canUpdate.can,
@@ -3512,15 +3499,15 @@ function DataTableInternal({
3512
3499
  deleteSelected: features.deleteSelected && permissions.canDelete.can,
3513
3500
  export: features.export && permissions.canExport.can,
3514
3501
  import: features.import && permissions.canImport.can
3515
- };
3516
- const secureHandlers = {
3502
+ }), [features, permissions.canCreate.can, permissions.canUpdate.can, permissions.canDelete.can, permissions.canExport.can, permissions.canImport.can]);
3503
+ const secureHandlers = useMemo6(() => ({
3517
3504
  onEditRow: permissions.canUpdate.can ? onEditRow : void 0,
3518
3505
  onDeleteRow: permissions.canDelete.can ? onDeleteRow : void 0,
3519
3506
  onCreateRow: permissions.canCreate.can ? onCreateRow : void 0,
3520
3507
  onImport: permissions.canImport.can ? onImport : void 0,
3521
3508
  onExport: permissions.canExport.can ? onExport : void 0,
3522
3509
  onDeleteSelected: permissions.canDelete.can ? onDeleteSelected : void 0
3523
- };
3510
+ }), [permissions.canUpdate.can, permissions.canDelete.can, permissions.canCreate.can, permissions.canImport.can, permissions.canExport.can, onEditRow, onDeleteRow, onCreateRow, onImport, onExport, onDeleteSelected]);
3524
3511
  const effectiveActions = useMemo6(() => {
3525
3512
  const result = [...actions];
3526
3513
  if (secureFeatures.editing && secureHandlers.onEditRow && !result.some((a) => a.label === "Edit")) {
@@ -3699,6 +3686,20 @@ function DataTableInternal({
3699
3686
  pagination.pageSize
3700
3687
  ]);
3701
3688
  const table = useReactTable(tableConfig);
3689
+ if (!user) {
3690
+ throw new Error("DataTable requires authenticated user for RBAC");
3691
+ }
3692
+ if (!rbac?.pageId) {
3693
+ throw new Error("DataTable requires rbac.pageId for permission checking");
3694
+ }
3695
+ const scope = {
3696
+ organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
3697
+ eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
3698
+ appId: user?.user_metadata?.appId || user?.app_metadata?.appId
3699
+ };
3700
+ if (!permissions.canRead.can) {
3701
+ return /* @__PURE__ */ jsx20(AccessDeniedPage, { resource: rbac?.pageId || "unknown-page", operation: "read" });
3702
+ }
3702
3703
  if (isLoading) {
3703
3704
  return /* @__PURE__ */ jsx20(LoadingComponent, {});
3704
3705
  }
@@ -5462,4 +5463,4 @@ export {
5462
5463
  GroupHeader,
5463
5464
  EditableRow
5464
5465
  };
5465
- //# sourceMappingURL=chunk-2BJFM2JC.js.map
5466
+ //# sourceMappingURL=chunk-2VSQSO5Z.js.map