@jmruthers/pace-core 0.5.28 → 0.5.30

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 (105) hide show
  1. package/dist/{DataTable-K6ZB56JF.js → DataTable-B3QAKJN2.js} +2 -2
  2. package/dist/{chunk-FHSK2UES.js → chunk-4MGZ5E3J.js} +33 -10
  3. package/dist/chunk-4MGZ5E3J.js.map +1 -0
  4. package/dist/{chunk-M3UUEWLR.js → chunk-VLWG2SIU.js} +2 -2
  5. package/dist/components.js +2 -2
  6. package/dist/index.js +2 -2
  7. package/dist/utils.js +1 -1
  8. package/docs/api/classes/ErrorBoundary.md +1 -1
  9. package/docs/api/classes/InvalidScopeError.md +1 -1
  10. package/docs/api/classes/MissingUserContextError.md +1 -1
  11. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  12. package/docs/api/classes/PermissionDeniedError.md +1 -1
  13. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  14. package/docs/api/classes/RBACAuditManager.md +1 -1
  15. package/docs/api/classes/RBACCache.md +1 -1
  16. package/docs/api/classes/RBACEngine.md +1 -1
  17. package/docs/api/classes/RBACError.md +1 -1
  18. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  19. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  20. package/docs/api/interfaces/AggregateConfig.md +1 -1
  21. package/docs/api/interfaces/ButtonProps.md +1 -1
  22. package/docs/api/interfaces/CardProps.md +1 -1
  23. package/docs/api/interfaces/ColorPalette.md +1 -1
  24. package/docs/api/interfaces/ColorShade.md +1 -1
  25. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  26. package/docs/api/interfaces/DataTableAction.md +1 -1
  27. package/docs/api/interfaces/DataTableColumn.md +1 -1
  28. package/docs/api/interfaces/DataTableProps.md +1 -1
  29. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  30. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  31. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  32. package/docs/api/interfaces/EventContextType.md +1 -1
  33. package/docs/api/interfaces/EventLogoProps.md +1 -1
  34. package/docs/api/interfaces/EventProviderProps.md +1 -1
  35. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  36. package/docs/api/interfaces/FileUploadProps.md +1 -1
  37. package/docs/api/interfaces/FooterProps.md +1 -1
  38. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  39. package/docs/api/interfaces/InputProps.md +1 -1
  40. package/docs/api/interfaces/LabelProps.md +1 -1
  41. package/docs/api/interfaces/LoginFormProps.md +1 -1
  42. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  43. package/docs/api/interfaces/NavigationContextType.md +1 -1
  44. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  45. package/docs/api/interfaces/NavigationItem.md +1 -1
  46. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  47. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  48. package/docs/api/interfaces/Organisation.md +1 -1
  49. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  50. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  51. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  52. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  53. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  54. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  55. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  56. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  57. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  58. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  59. package/docs/api/interfaces/PaletteData.md +1 -1
  60. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  61. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  62. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  63. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  64. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  65. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  66. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  67. package/docs/api/interfaces/RBACConfig.md +1 -1
  68. package/docs/api/interfaces/RBACContextType.md +1 -1
  69. package/docs/api/interfaces/RBACLogger.md +1 -1
  70. package/docs/api/interfaces/RBACProviderProps.md +1 -1
  71. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  72. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  73. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  74. package/docs/api/interfaces/RouteConfig.md +1 -1
  75. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  76. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  77. package/docs/api/interfaces/StorageConfig.md +1 -1
  78. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  79. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  80. package/docs/api/interfaces/StorageListOptions.md +1 -1
  81. package/docs/api/interfaces/StorageListResult.md +1 -1
  82. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  83. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  84. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  85. package/docs/api/interfaces/StyleImport.md +1 -1
  86. package/docs/api/interfaces/ToastActionElement.md +1 -1
  87. package/docs/api/interfaces/ToastProps.md +1 -1
  88. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  89. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  90. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  91. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  92. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  93. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  94. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  95. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  96. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  97. package/docs/api/interfaces/UserEventAccess.md +1 -1
  98. package/docs/api/interfaces/UserMenuProps.md +1 -1
  99. package/docs/api/interfaces/UserProfile.md +1 -1
  100. package/docs/api/modules.md +2 -2
  101. package/package.json +1 -1
  102. package/src/components/DataTable/components/DataTableCore.tsx +44 -11
  103. package/dist/chunk-FHSK2UES.js.map +0 -1
  104. /package/dist/{DataTable-K6ZB56JF.js.map → DataTable-B3QAKJN2.js.map} +0 -0
  105. /package/dist/{chunk-M3UUEWLR.js.map → chunk-VLWG2SIU.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / StorageUploadOptions
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / StorageUploadOptions
2
2
 
3
3
  # Interface: StorageUploadOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / StorageUploadResult
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / StorageUploadResult
2
2
 
3
3
  # Interface: StorageUploadResult
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / StorageUrlOptions
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / StorageUrlOptions
2
2
 
3
3
  # Interface: StorageUrlOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / StyleImport
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / StyleImport
2
2
 
3
3
  # Interface: StyleImport
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / ToastActionElement
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / ToastActionElement
2
2
 
3
3
  # Interface: ToastActionElement
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / ToastProps
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / ToastProps
2
2
 
3
3
  # Interface: ToastProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / UnifiedAuthContextType
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / UnifiedAuthContextType
2
2
 
3
3
  # Interface: UnifiedAuthContextType
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / UnifiedAuthProviderProps
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / UnifiedAuthProviderProps
2
2
 
3
3
  # Interface: UnifiedAuthProviderProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / UseInactivityTrackerOptions
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / UseInactivityTrackerOptions
2
2
 
3
3
  # Interface: UseInactivityTrackerOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / UseInactivityTrackerReturn
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / UseInactivityTrackerReturn
2
2
 
3
3
  # Interface: UseInactivityTrackerReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / UsePublicEventLogoOptions
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / UsePublicEventLogoOptions
2
2
 
3
3
  # Interface: UsePublicEventLogoOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / UsePublicEventLogoReturn
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / UsePublicEventLogoReturn
2
2
 
3
3
  # Interface: UsePublicEventLogoReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / UsePublicEventOptions
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / UsePublicEventOptions
2
2
 
3
3
  # Interface: UsePublicEventOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / UsePublicEventReturn
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / UsePublicEventReturn
2
2
 
3
3
  # Interface: UsePublicEventReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / UsePublicRouteParamsReturn
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / UsePublicRouteParamsReturn
2
2
 
3
3
  # Interface: UsePublicRouteParamsReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / UserEventAccess
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / UserEventAccess
2
2
 
3
3
  # Interface: UserEventAccess
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / UserMenuProps
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / UserMenuProps
2
2
 
3
3
  # Interface: UserMenuProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.28](../README.md) / [Exports](../modules.md) / UserProfile
1
+ [@jmruthers/pace-core - v0.5.30](../README.md) / [Exports](../modules.md) / UserProfile
2
2
 
3
3
  # Interface: UserProfile
4
4
 
@@ -1,6 +1,6 @@
1
- [@jmruthers/pace-core - v0.5.28](README.md) / Exports
1
+ [@jmruthers/pace-core - v0.5.30](README.md) / Exports
2
2
 
3
- # @jmruthers/pace-core - v0.5.28
3
+ # @jmruthers/pace-core - v0.5.30
4
4
 
5
5
  **`File`**
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jmruthers/pace-core",
3
- "version": "0.5.28",
3
+ "version": "0.5.30",
4
4
  "description": "Clean, modern React component library with Tailwind v4 styling and native utilities",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -343,6 +343,38 @@ function DataTableInternal<TData extends DataRecord>({
343
343
  // Create scope the same way as PagePermissionGuard - with event-based resolution
344
344
  const [resolvedScope, setResolvedScope] = useState<Scope | null>(null);
345
345
 
346
+ // Use a ref to store the stable scope and only update it when it actually changes (SAME AS PagePermissionGuard)
347
+ const stableScopeRef = useRef<{ organisationId: string; appId: string; eventId: string | undefined }>({
348
+ organisationId: '',
349
+ appId: '',
350
+ eventId: undefined
351
+ });
352
+
353
+ // Only update the stable scope if the resolved scope has actually changed
354
+ if (resolvedScope && resolvedScope.organisationId) {
355
+ const newScope = {
356
+ organisationId: resolvedScope.organisationId,
357
+ appId: resolvedScope.appId,
358
+ eventId: resolvedScope.eventId
359
+ };
360
+
361
+ // Only update if the scope has actually changed
362
+ if (stableScopeRef.current.organisationId !== newScope.organisationId ||
363
+ stableScopeRef.current.eventId !== newScope.eventId ||
364
+ stableScopeRef.current.appId !== newScope.appId) {
365
+ stableScopeRef.current = {
366
+ organisationId: newScope.organisationId,
367
+ appId: newScope.appId || '',
368
+ eventId: newScope.eventId
369
+ };
370
+ }
371
+ } else if (!resolvedScope) {
372
+ // Reset to empty scope when no resolved scope
373
+ stableScopeRef.current = { organisationId: '', appId: '', eventId: undefined };
374
+ }
375
+
376
+ const stableScope = stableScopeRef.current;
377
+
346
378
  useEffect(() => {
347
379
  const resolveScope = async () => {
348
380
  // If we have both organisation and event, use them directly
@@ -392,12 +424,12 @@ function DataTableInternal<TData extends DataRecord>({
392
424
  }, [selectedOrganisationId, selectedEventId, supabase]);
393
425
 
394
426
  const permissions = {
395
- canRead: useCan(user?.id || '', resolvedScope || { organisationId: '', eventId: undefined, appId: undefined }, `read:page.${effectivePageId}` as any, effectivePageId),
396
- canCreate: useCan(user?.id || '', resolvedScope || { organisationId: '', eventId: undefined, appId: undefined }, `create:page.${effectivePageId}` as any, effectivePageId),
397
- canUpdate: useCan(user?.id || '', resolvedScope || { organisationId: '', eventId: undefined, appId: undefined }, `update:page.${effectivePageId}` as any, effectivePageId),
398
- canDelete: useCan(user?.id || '', resolvedScope || { organisationId: '', eventId: undefined, appId: undefined }, `delete:page.${effectivePageId}` as any, effectivePageId),
399
- canExport: useCan(user?.id || '', resolvedScope || { organisationId: '', eventId: undefined, appId: undefined }, `manage:page.${effectivePageId}` as any, effectivePageId), // Using manage for export/import
400
- canImport: useCan(user?.id || '', resolvedScope || { organisationId: '', eventId: undefined, appId: undefined }, `manage:page.${effectivePageId}` as any, effectivePageId), // Using manage for export/import
427
+ canRead: useCan(user?.id || '', stableScope, `read:page.${effectivePageId}` as any, effectivePageId),
428
+ canCreate: useCan(user?.id || '', stableScope, `create:page.${effectivePageId}` as any, effectivePageId),
429
+ canUpdate: useCan(user?.id || '', stableScope, `update:page.${effectivePageId}` as any, effectivePageId),
430
+ canDelete: useCan(user?.id || '', stableScope, `delete:page.${effectivePageId}` as any, effectivePageId),
431
+ canExport: useCan(user?.id || '', stableScope, `manage:page.${effectivePageId}` as any, effectivePageId), // Using manage for export/import
432
+ canImport: useCan(user?.id || '', stableScope, `manage:page.${effectivePageId}` as any, effectivePageId), // Using manage for export/import
401
433
  };
402
434
 
403
435
  // ============================================================================
@@ -853,11 +885,12 @@ function DataTableInternal<TData extends DataRecord>({
853
885
  console.log(' error:', permissions.canRead.error);
854
886
  console.log(' refetch type:', typeof permissions.canRead.refetch);
855
887
 
856
- console.log('[DataTable] RBAC DEBUG - Scope (FIXED):');
857
- console.log(' resolvedScope:', resolvedScope);
858
- console.log(' organisationId:', resolvedScope?.organisationId);
859
- console.log(' eventId:', resolvedScope?.eventId);
860
- console.log(' appId:', resolvedScope?.appId);
888
+ console.log('[DataTable] RBAC DEBUG - Scope (FIXED):');
889
+ console.log(' resolvedScope:', resolvedScope);
890
+ console.log(' stableScope:', stableScope);
891
+ console.log(' organisationId:', stableScope?.organisationId);
892
+ console.log(' eventId:', stableScope?.eventId);
893
+ console.log(' appId:', stableScope?.appId);
861
894
 
862
895
  if (!permissions.canRead.can) {
863
896
  console.error('[DataTable] ACCESS DENIED - DataTable RBAC failing!');