@jmruthers/pace-core 0.5.33 → 0.5.35

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 (106) hide show
  1. package/dist/{DataTable-XPPSWRXE.js → DataTable-7H63EFYM.js} +3 -2
  2. package/dist/{chunk-TBJVKUYR.js → chunk-BRWHKGV2.js} +58 -5
  3. package/dist/chunk-BRWHKGV2.js.map +1 -0
  4. package/dist/{chunk-OYDYXNAY.js → chunk-MC5E4ILK.js} +2 -2
  5. package/dist/components.js +3 -2
  6. package/dist/components.js.map +1 -1
  7. package/dist/index.js +3 -3
  8. package/dist/utils.js +4 -4
  9. package/docs/api/classes/ErrorBoundary.md +1 -1
  10. package/docs/api/classes/InvalidScopeError.md +1 -1
  11. package/docs/api/classes/MissingUserContextError.md +1 -1
  12. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  13. package/docs/api/classes/PermissionDeniedError.md +1 -1
  14. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  15. package/docs/api/classes/RBACAuditManager.md +1 -1
  16. package/docs/api/classes/RBACCache.md +1 -1
  17. package/docs/api/classes/RBACEngine.md +1 -1
  18. package/docs/api/classes/RBACError.md +1 -1
  19. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  20. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  21. package/docs/api/interfaces/AggregateConfig.md +1 -1
  22. package/docs/api/interfaces/ButtonProps.md +1 -1
  23. package/docs/api/interfaces/CardProps.md +1 -1
  24. package/docs/api/interfaces/ColorPalette.md +1 -1
  25. package/docs/api/interfaces/ColorShade.md +1 -1
  26. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  27. package/docs/api/interfaces/DataTableAction.md +1 -1
  28. package/docs/api/interfaces/DataTableColumn.md +1 -1
  29. package/docs/api/interfaces/DataTableProps.md +1 -1
  30. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  31. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  32. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  33. package/docs/api/interfaces/EventContextType.md +1 -1
  34. package/docs/api/interfaces/EventLogoProps.md +1 -1
  35. package/docs/api/interfaces/EventProviderProps.md +1 -1
  36. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  37. package/docs/api/interfaces/FileUploadProps.md +1 -1
  38. package/docs/api/interfaces/FooterProps.md +1 -1
  39. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  40. package/docs/api/interfaces/InputProps.md +1 -1
  41. package/docs/api/interfaces/LabelProps.md +1 -1
  42. package/docs/api/interfaces/LoginFormProps.md +1 -1
  43. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  44. package/docs/api/interfaces/NavigationContextType.md +1 -1
  45. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  46. package/docs/api/interfaces/NavigationItem.md +1 -1
  47. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  48. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  49. package/docs/api/interfaces/Organisation.md +1 -1
  50. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  51. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  52. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  53. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  54. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  55. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  56. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  57. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  58. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  59. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  60. package/docs/api/interfaces/PaletteData.md +1 -1
  61. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  62. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  63. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  64. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  65. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  66. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  67. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  68. package/docs/api/interfaces/RBACConfig.md +1 -1
  69. package/docs/api/interfaces/RBACContextType.md +1 -1
  70. package/docs/api/interfaces/RBACLogger.md +1 -1
  71. package/docs/api/interfaces/RBACProviderProps.md +1 -1
  72. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  73. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  74. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  75. package/docs/api/interfaces/RouteConfig.md +1 -1
  76. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  77. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  78. package/docs/api/interfaces/StorageConfig.md +1 -1
  79. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  80. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  81. package/docs/api/interfaces/StorageListOptions.md +1 -1
  82. package/docs/api/interfaces/StorageListResult.md +1 -1
  83. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  84. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  85. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  86. package/docs/api/interfaces/StyleImport.md +1 -1
  87. package/docs/api/interfaces/ToastActionElement.md +1 -1
  88. package/docs/api/interfaces/ToastProps.md +1 -1
  89. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  90. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  91. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  92. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  93. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  94. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  95. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  96. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  97. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  98. package/docs/api/interfaces/UserEventAccess.md +1 -1
  99. package/docs/api/interfaces/UserMenuProps.md +1 -1
  100. package/docs/api/interfaces/UserProfile.md +1 -1
  101. package/docs/api/modules.md +2 -2
  102. package/package.json +1 -1
  103. package/src/components/DataTable/components/DataTableCore.tsx +67 -4
  104. package/dist/chunk-TBJVKUYR.js.map +0 -1
  105. /package/dist/{DataTable-XPPSWRXE.js.map → DataTable-7H63EFYM.js.map} +0 -0
  106. /package/dist/{chunk-OYDYXNAY.js.map → chunk-MC5E4ILK.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / StorageUploadResult
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / StorageUploadResult
2
2
 
3
3
  # Interface: StorageUploadResult
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / StorageUrlOptions
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / StorageUrlOptions
2
2
 
3
3
  # Interface: StorageUrlOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / StyleImport
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / StyleImport
2
2
 
3
3
  # Interface: StyleImport
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / ToastActionElement
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / ToastActionElement
2
2
 
3
3
  # Interface: ToastActionElement
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / ToastProps
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / ToastProps
2
2
 
3
3
  # Interface: ToastProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / UnifiedAuthContextType
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / UnifiedAuthContextType
2
2
 
3
3
  # Interface: UnifiedAuthContextType
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / UnifiedAuthProviderProps
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / UnifiedAuthProviderProps
2
2
 
3
3
  # Interface: UnifiedAuthProviderProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / UseInactivityTrackerOptions
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / UseInactivityTrackerOptions
2
2
 
3
3
  # Interface: UseInactivityTrackerOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / UseInactivityTrackerReturn
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / UseInactivityTrackerReturn
2
2
 
3
3
  # Interface: UseInactivityTrackerReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / UsePublicEventLogoOptions
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / UsePublicEventLogoOptions
2
2
 
3
3
  # Interface: UsePublicEventLogoOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / UsePublicEventLogoReturn
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / UsePublicEventLogoReturn
2
2
 
3
3
  # Interface: UsePublicEventLogoReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / UsePublicEventOptions
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / UsePublicEventOptions
2
2
 
3
3
  # Interface: UsePublicEventOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / UsePublicEventReturn
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / UsePublicEventReturn
2
2
 
3
3
  # Interface: UsePublicEventReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / UsePublicRouteParamsReturn
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / UsePublicRouteParamsReturn
2
2
 
3
3
  # Interface: UsePublicRouteParamsReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / UserEventAccess
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / UserEventAccess
2
2
 
3
3
  # Interface: UserEventAccess
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / UserMenuProps
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / UserMenuProps
2
2
 
3
3
  # Interface: UserMenuProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.33](../README.md) / [Exports](../modules.md) / UserProfile
1
+ [@jmruthers/pace-core - v0.5.35](../README.md) / [Exports](../modules.md) / UserProfile
2
2
 
3
3
  # Interface: UserProfile
4
4
 
@@ -1,6 +1,6 @@
1
- [@jmruthers/pace-core - v0.5.33](README.md) / Exports
1
+ [@jmruthers/pace-core - v0.5.35](README.md) / Exports
2
2
 
3
- # @jmruthers/pace-core - v0.5.33
3
+ # @jmruthers/pace-core - v0.5.35
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.33",
3
+ "version": "0.5.35",
4
4
  "description": "Clean, modern React component library with Tailwind v4 styling and native utilities",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -50,6 +50,7 @@ import { AccessDeniedPage } from './AccessDeniedPage';
50
50
  import { useCan } from '../../../rbac/hooks';
51
51
  import { useUnifiedAuth } from '../../../providers/UnifiedAuthProvider';
52
52
  import { Scope } from '../../../rbac/types';
53
+ import { getCurrentAppName } from '../../../utils/appNameResolver';
53
54
 
54
55
  import type {
55
56
  DataRecord,
@@ -377,12 +378,56 @@ function DataTableInternal<TData extends DataRecord>({
377
378
 
378
379
  useEffect(() => {
379
380
  const resolveScope = async () => {
381
+ // Get app ID from package.json or environment (SAME AS PagePermissionGuard)
382
+ let appId: string | undefined = undefined;
383
+
384
+ // Try to resolve from database
385
+ if (supabase) {
386
+ const appName = getCurrentAppName();
387
+ if (appName) {
388
+ try {
389
+ console.log('[DataTable] Resolving app name to ID:', appName);
390
+ const { data: app, error } = await supabase
391
+ .from('rbac_apps')
392
+ .select('id, name, is_active')
393
+ .eq('name', appName)
394
+ .eq('is_active', true)
395
+ .single() as { data: { id: string; name: string; is_active: boolean } | null; error: any };
396
+
397
+ if (error) {
398
+ console.error('[DataTable] Database error resolving app ID:', error);
399
+ // Check if app exists but is inactive
400
+ const { data: inactiveApp } = await supabase
401
+ .from('rbac_apps')
402
+ .select('id, name, is_active')
403
+ .eq('name', appName)
404
+ .single() as { data: { id: string; name: string; is_active: boolean } | null };
405
+
406
+ if (inactiveApp) {
407
+ console.error(`[DataTable] App "${appName}" exists but is inactive (is_active: ${inactiveApp.is_active})`);
408
+ } else {
409
+ console.error(`[DataTable] App "${appName}" not found in rbac_apps table`);
410
+ }
411
+ } else if (app) {
412
+ appId = app.id;
413
+ console.log('[DataTable] Successfully resolved app ID:', app.id);
414
+ } else {
415
+ console.error('[DataTable] No app data returned for:', appName);
416
+ }
417
+ } catch (error) {
418
+ console.error('[DataTable] Unexpected error resolving app ID:', error);
419
+ }
420
+ } else {
421
+ console.warn('[DataTable] No app name available for resolution');
422
+ }
423
+ }
424
+
380
425
  // If we have both organisation and event, use them directly
381
426
  if (selectedOrganisationId && selectedEventId) {
382
427
  setResolvedScope({
383
428
  organisationId: selectedOrganisationId,
384
429
  eventId: selectedEventId,
385
- appId: undefined
430
+ appId: appId
386
431
  });
387
432
  return;
388
433
  }
@@ -392,7 +437,7 @@ function DataTableInternal<TData extends DataRecord>({
392
437
  setResolvedScope({
393
438
  organisationId: selectedOrganisationId,
394
439
  eventId: selectedEventId || undefined,
395
- appId: undefined
440
+ appId: appId
396
441
  });
397
442
  return;
398
443
  }
@@ -407,7 +452,11 @@ function DataTableInternal<TData extends DataRecord>({
407
452
  setResolvedScope(null);
408
453
  return;
409
454
  }
410
- setResolvedScope(eventScope);
455
+ // Preserve the resolved app ID
456
+ setResolvedScope({
457
+ ...eventScope,
458
+ appId: appId || eventScope.appId
459
+ });
411
460
  } catch (error) {
412
461
  console.error('[DataTable] Error resolving scope from event:', error);
413
462
  setResolvedScope(null);
@@ -445,7 +494,17 @@ function DataTableInternal<TData extends DataRecord>({
445
494
  const fallbackScope = { organisationId: '', eventId: undefined, appId: undefined };
446
495
  const effectiveScope = stableScope && stableScope.organisationId ? stableScope : fallbackScope;
447
496
 
448
- const permissions = {
497
+ // TEMPORARY TEST: Bypass useCan to see if the issue is with the hook itself
498
+ const testBypass = false; // Set to true to test bypassing useCan
499
+
500
+ const permissions = testBypass ? {
501
+ canRead: { can: true, isLoading: false, error: null, refetch: async () => {} },
502
+ canCreate: { can: true, isLoading: false, error: null, refetch: async () => {} },
503
+ canUpdate: { can: true, isLoading: false, error: null, refetch: async () => {} },
504
+ canDelete: { can: true, isLoading: false, error: null, refetch: async () => {} },
505
+ canExport: { can: true, isLoading: false, error: null, refetch: async () => {} },
506
+ canImport: { can: true, isLoading: false, error: null, refetch: async () => {} },
507
+ } : {
449
508
  canRead: useCan(user?.id || '', effectiveScope, `read:page.${effectivePageId}` as any, effectivePageId, true),
450
509
  canCreate: useCan(user?.id || '', effectiveScope, `create:page.${effectivePageId}` as any, effectivePageId, true),
451
510
  canUpdate: useCan(user?.id || '', effectiveScope, `update:page.${effectivePageId}` as any, effectivePageId, true),
@@ -453,6 +512,10 @@ function DataTableInternal<TData extends DataRecord>({
453
512
  canExport: useCan(user?.id || '', effectiveScope, `manage:page.${effectivePageId}` as any, effectivePageId, true), // Using manage for export/import
454
513
  canImport: useCan(user?.id || '', effectiveScope, `manage:page.${effectivePageId}` as any, effectivePageId, true), // Using manage for export/import
455
514
  };
515
+
516
+ if (testBypass) {
517
+ console.log('[DataTable] TEST BYPASS: Using hardcoded can: true for all permissions');
518
+ }
456
519
 
457
520
  // ============================================================================
458
521
  // CONFIGURATION RESOLUTION - ALWAYS call these hooks