@jmruthers/pace-core 0.5.107 → 0.5.108

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 (120) hide show
  1. package/dist/{DataTable-H2WIR2DN.js → DataTable-WFCHVWTY.js} +2 -2
  2. package/dist/{PublicLoadingSpinner-48ewSMKK.d.ts → PublicLoadingSpinner-DgDWTFqn.d.ts} +4 -2
  3. package/dist/{chunk-EWKCROSF.js → chunk-B3QX32P5.js} +47 -8
  4. package/dist/chunk-B3QX32P5.js.map +1 -0
  5. package/dist/{chunk-5JJCXTVE.js → chunk-IMZGJ2X7.js} +105 -83
  6. package/dist/{chunk-5JJCXTVE.js.map → chunk-IMZGJ2X7.js.map} +1 -1
  7. package/dist/components.d.ts +1 -1
  8. package/dist/components.js +2 -2
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +2 -2
  11. package/dist/utils.js +1 -1
  12. package/docs/api/classes/ColumnFactory.md +1 -1
  13. package/docs/api/classes/ErrorBoundary.md +1 -1
  14. package/docs/api/classes/InvalidScopeError.md +1 -1
  15. package/docs/api/classes/MissingUserContextError.md +1 -1
  16. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  17. package/docs/api/classes/PermissionDeniedError.md +1 -1
  18. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  19. package/docs/api/classes/RBACAuditManager.md +1 -1
  20. package/docs/api/classes/RBACCache.md +1 -1
  21. package/docs/api/classes/RBACEngine.md +1 -1
  22. package/docs/api/classes/RBACError.md +1 -1
  23. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  24. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  25. package/docs/api/classes/StorageUtils.md +1 -1
  26. package/docs/api/enums/FileCategory.md +1 -1
  27. package/docs/api/interfaces/AggregateConfig.md +1 -1
  28. package/docs/api/interfaces/ButtonProps.md +1 -1
  29. package/docs/api/interfaces/CardProps.md +1 -1
  30. package/docs/api/interfaces/ColorPalette.md +1 -1
  31. package/docs/api/interfaces/ColorShade.md +1 -1
  32. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  33. package/docs/api/interfaces/DataRecord.md +1 -1
  34. package/docs/api/interfaces/DataTableAction.md +1 -1
  35. package/docs/api/interfaces/DataTableColumn.md +1 -1
  36. package/docs/api/interfaces/DataTableProps.md +1 -1
  37. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  38. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  39. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  40. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  41. package/docs/api/interfaces/FileMetadata.md +1 -1
  42. package/docs/api/interfaces/FileReference.md +1 -1
  43. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  44. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  45. package/docs/api/interfaces/FileUploadProps.md +1 -1
  46. package/docs/api/interfaces/FooterProps.md +1 -1
  47. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  48. package/docs/api/interfaces/InputProps.md +1 -1
  49. package/docs/api/interfaces/LabelProps.md +1 -1
  50. package/docs/api/interfaces/LoginFormProps.md +1 -1
  51. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  52. package/docs/api/interfaces/NavigationContextType.md +1 -1
  53. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  54. package/docs/api/interfaces/NavigationItem.md +1 -1
  55. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  56. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  57. package/docs/api/interfaces/Organisation.md +1 -1
  58. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  59. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  60. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  61. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  62. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  63. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  64. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  65. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  66. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  67. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  68. package/docs/api/interfaces/PaletteData.md +1 -1
  69. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  70. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  71. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  72. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  73. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  74. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  75. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  76. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  77. package/docs/api/interfaces/RBACConfig.md +1 -1
  78. package/docs/api/interfaces/RBACLogger.md +1 -1
  79. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  80. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  81. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  82. package/docs/api/interfaces/RouteConfig.md +1 -1
  83. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  84. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  85. package/docs/api/interfaces/StorageConfig.md +1 -1
  86. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  87. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  88. package/docs/api/interfaces/StorageListOptions.md +1 -1
  89. package/docs/api/interfaces/StorageListResult.md +1 -1
  90. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  91. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  92. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  93. package/docs/api/interfaces/StyleImport.md +1 -1
  94. package/docs/api/interfaces/SwitchProps.md +1 -1
  95. package/docs/api/interfaces/ToastActionElement.md +1 -1
  96. package/docs/api/interfaces/ToastProps.md +1 -1
  97. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  98. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  99. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  100. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  101. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  102. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  103. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
  104. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  105. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  106. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  107. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  108. package/docs/api/interfaces/UserEventAccess.md +1 -1
  109. package/docs/api/interfaces/UserMenuProps.md +1 -1
  110. package/docs/api/interfaces/UserProfile.md +1 -1
  111. package/docs/api/modules.md +7 -5
  112. package/package.json +1 -1
  113. package/src/components/DataTable/components/ColumnFilter.tsx +2 -1
  114. package/src/components/DataTable/components/EditableRow.tsx +7 -2
  115. package/src/components/DataTable/components/FilterRow.tsx +22 -11
  116. package/src/components/DataTable/components/PaginationControls.tsx +1 -1
  117. package/src/components/DataTable/components/UnifiedTableBody.tsx +39 -10
  118. package/src/components/PaceAppLayout/PaceAppLayout.tsx +79 -10
  119. package/dist/chunk-EWKCROSF.js.map +0 -1
  120. /package/dist/{DataTable-H2WIR2DN.js.map → DataTable-WFCHVWTY.js.map} +0 -0
@@ -54,7 +54,7 @@ import {
54
54
  sortHierarchicalDataWithSorting,
55
55
  validateHierarchicalData,
56
56
  validatePaginationConfig
57
- } from "./chunk-5JJCXTVE.js";
57
+ } from "./chunk-IMZGJ2X7.js";
58
58
  import "./chunk-QDDUU625.js";
59
59
  import "./chunk-S63MFSY6.js";
60
60
  import "./chunk-Q7APDV6H.js";
@@ -157,4 +157,4 @@ export {
157
157
  validateHierarchicalData,
158
158
  validatePaginationConfig
159
159
  };
160
- //# sourceMappingURL=DataTable-H2WIR2DN.js.map
160
+ //# sourceMappingURL=DataTable-WFCHVWTY.js.map
@@ -2329,7 +2329,7 @@ interface PaceAppLayoutProps {
2329
2329
  *
2330
2330
  *
2331
2331
  * @example
2332
- * Custom navigation items with permission filtering:
2332
+ * Custom navigation items with permission filtering (works independently of route enforcement):
2333
2333
  * ```tsx
2334
2334
  * import { NavigationItem } from '@jmruthers/pace-core';
2335
2335
  *
@@ -2347,13 +2347,15 @@ interface PaceAppLayoutProps {
2347
2347
  * <PaceAppLayout
2348
2348
  * appName="My Custom App"
2349
2349
  * navItems={customNavItems}
2350
- * enforcePermissions={true}
2350
+ * // Navigation filtering works independently - no need for enforcePermissions
2351
2351
  * filterNavigationByPermissions={true}
2352
2352
  * routePermissions={{
2353
2353
  * '/components': 'read',
2354
2354
  * '/styles': 'read',
2355
2355
  * '/meals': 'read'
2356
2356
  * }}
2357
+ * // Optionally enable route-level enforcement (separate from navigation filtering)
2358
+ * // enforcePermissions={true}
2357
2359
  * />
2358
2360
  * }>
2359
2361
  * <Route path="components" element={<ComponentsPage />} />
@@ -25,7 +25,7 @@ import {
25
25
  SelectSeparator,
26
26
  SelectTrigger,
27
27
  SelectValue
28
- } from "./chunk-5JJCXTVE.js";
28
+ } from "./chunk-IMZGJ2X7.js";
29
29
  import {
30
30
  usePermissions,
31
31
  useRBAC,
@@ -1378,10 +1378,17 @@ function PaceAppLayout({
1378
1378
  eventId: user.user_metadata?.eventId || user.app_metadata?.eventId,
1379
1379
  appId: user.user_metadata?.appId || user.app_metadata?.appId
1380
1380
  };
1381
- const { isSuperAdmin: isSuperAdmin2 } = await import("./api-KG4A2X7P.js");
1382
- const isSuper = await isSuperAdmin2(user.id);
1383
- if (isSuper) {
1384
- return true;
1381
+ try {
1382
+ const { isSuperAdmin: isSuperAdmin2 } = await import("./api-KG4A2X7P.js");
1383
+ const isSuper = await isSuperAdmin2(user.id);
1384
+ if (isSuper) {
1385
+ return true;
1386
+ }
1387
+ } catch (error) {
1388
+ if (error && typeof error === "object" && "code" in error && error.code === "RBAC_NOT_INITIALIZED") {
1389
+ } else {
1390
+ throw error;
1391
+ }
1385
1392
  }
1386
1393
  if (!scope.organisationId) {
1387
1394
  console.warn("No organisation context available for permission check, denying access");
@@ -1473,12 +1480,44 @@ function PaceAppLayout({
1473
1480
  }, [enforcePermissions, currentRoutePermission, currentPageId, strictMode, user?.id]);
1474
1481
  const [filteredMenuItems, setFilteredMenuItems] = useState5(baseMenuItems);
1475
1482
  useEffect3(() => {
1476
- if (!filterNavigationByPermissions || !enforcePermissions) {
1483
+ if (!filterNavigationByPermissions) {
1477
1484
  setFilteredMenuItems(baseMenuItems);
1478
1485
  return;
1479
1486
  }
1480
1487
  let isMounted = true;
1481
1488
  const filterItems = async () => {
1489
+ if (!user?.id) {
1490
+ if (isMounted) {
1491
+ setFilteredMenuItems(baseMenuItems);
1492
+ }
1493
+ return;
1494
+ }
1495
+ const scope = {
1496
+ organisationId: user.user_metadata?.organisationId || user.app_metadata?.organisationId,
1497
+ eventId: user.user_metadata?.eventId || user.app_metadata?.eventId,
1498
+ appId: user.user_metadata?.appId || user.app_metadata?.appId
1499
+ };
1500
+ try {
1501
+ const { isSuperAdmin: isSuperAdmin2 } = await import("./api-KG4A2X7P.js");
1502
+ const isSuper = await isSuperAdmin2(user.id);
1503
+ if (isSuper) {
1504
+ if (isMounted) {
1505
+ setFilteredMenuItems(baseMenuItems);
1506
+ }
1507
+ return;
1508
+ }
1509
+ } catch (error) {
1510
+ if (error && typeof error === "object" && "code" in error && error.code === "RBAC_NOT_INITIALIZED") {
1511
+ } else {
1512
+ throw error;
1513
+ }
1514
+ }
1515
+ if (!scope.organisationId) {
1516
+ if (isMounted) {
1517
+ setFilteredMenuItems(baseMenuItems);
1518
+ }
1519
+ return;
1520
+ }
1482
1521
  const filtered = await Promise.all(
1483
1522
  baseMenuItems.map(async (item) => {
1484
1523
  if (!item.href) return { item, hasAccess: true };
@@ -1500,7 +1539,7 @@ function PaceAppLayout({
1500
1539
  return () => {
1501
1540
  isMounted = false;
1502
1541
  };
1503
- }, [baseMenuItems, filterNavigationByPermissions, enforcePermissions, pageIdMapping, routePermissions, defaultPermission]);
1542
+ }, [baseMenuItems, filterNavigationByPermissions, pageIdMapping, routePermissions, defaultPermission, checkPermission, user?.id, user?.user_metadata, user?.app_metadata]);
1504
1543
  useEffect3(() => {
1505
1544
  if (!roleBasedRouting || routeConfig.length === 0) return;
1506
1545
  let isMounted = true;
@@ -4357,4 +4396,4 @@ export {
4357
4396
  PublicPageDiagnostic,
4358
4397
  PublicPageContextChecker
4359
4398
  };
4360
- //# sourceMappingURL=chunk-EWKCROSF.js.map
4399
+ //# sourceMappingURL=chunk-B3QX32P5.js.map