@jmruthers/pace-core 0.5.142 → 0.5.144

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 (125) hide show
  1. package/dist/{chunk-TUJSIWX6.js → chunk-FC46D3KC.js} +49 -20
  2. package/dist/chunk-FC46D3KC.js.map +1 -0
  3. package/dist/components.js +1 -1
  4. package/dist/index.js +1 -1
  5. package/docs/api/classes/ColumnFactory.md +1 -1
  6. package/docs/api/classes/ErrorBoundary.md +1 -1
  7. package/docs/api/classes/InvalidScopeError.md +1 -1
  8. package/docs/api/classes/MissingUserContextError.md +1 -1
  9. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  10. package/docs/api/classes/PermissionDeniedError.md +1 -1
  11. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  12. package/docs/api/classes/RBACAuditManager.md +1 -1
  13. package/docs/api/classes/RBACCache.md +1 -1
  14. package/docs/api/classes/RBACEngine.md +1 -1
  15. package/docs/api/classes/RBACError.md +1 -1
  16. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  17. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  18. package/docs/api/classes/StorageUtils.md +1 -1
  19. package/docs/api/enums/FileCategory.md +1 -1
  20. package/docs/api/interfaces/AggregateConfig.md +1 -1
  21. package/docs/api/interfaces/BadgeProps.md +1 -1
  22. package/docs/api/interfaces/ButtonProps.md +1 -1
  23. package/docs/api/interfaces/CalendarProps.md +1 -1
  24. package/docs/api/interfaces/CardProps.md +1 -1
  25. package/docs/api/interfaces/ColorPalette.md +1 -1
  26. package/docs/api/interfaces/ColorShade.md +1 -1
  27. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  28. package/docs/api/interfaces/DataRecord.md +1 -1
  29. package/docs/api/interfaces/DataTableAction.md +1 -1
  30. package/docs/api/interfaces/DataTableColumn.md +1 -1
  31. package/docs/api/interfaces/DataTableProps.md +1 -1
  32. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  33. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  34. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  35. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  36. package/docs/api/interfaces/EventLogoProps.md +1 -1
  37. package/docs/api/interfaces/ExportColumn.md +1 -1
  38. package/docs/api/interfaces/ExportOptions.md +1 -1
  39. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  40. package/docs/api/interfaces/FileMetadata.md +1 -1
  41. package/docs/api/interfaces/FileReference.md +1 -1
  42. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  43. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  44. package/docs/api/interfaces/FileUploadProps.md +1 -1
  45. package/docs/api/interfaces/FooterProps.md +1 -1
  46. package/docs/api/interfaces/GrantEventAppRoleParams.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/ResourcePermissions.md +1 -1
  80. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  81. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  82. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  83. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  84. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  85. package/docs/api/interfaces/RouteConfig.md +1 -1
  86. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  87. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  88. package/docs/api/interfaces/SessionRestorationLoaderProps.md +1 -1
  89. package/docs/api/interfaces/StorageConfig.md +1 -1
  90. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  91. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  92. package/docs/api/interfaces/StorageListOptions.md +1 -1
  93. package/docs/api/interfaces/StorageListResult.md +1 -1
  94. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  95. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  96. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  97. package/docs/api/interfaces/StyleImport.md +1 -1
  98. package/docs/api/interfaces/SwitchProps.md +1 -1
  99. package/docs/api/interfaces/TabsContentProps.md +1 -1
  100. package/docs/api/interfaces/TabsListProps.md +1 -1
  101. package/docs/api/interfaces/TabsProps.md +1 -1
  102. package/docs/api/interfaces/TabsTriggerProps.md +1 -1
  103. package/docs/api/interfaces/TextareaProps.md +1 -1
  104. package/docs/api/interfaces/ToastActionElement.md +1 -1
  105. package/docs/api/interfaces/ToastProps.md +1 -1
  106. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  107. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  108. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  109. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  110. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  111. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  112. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
  113. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  114. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  115. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  116. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  117. package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
  118. package/docs/api/interfaces/UserEventAccess.md +1 -1
  119. package/docs/api/interfaces/UserMenuProps.md +1 -1
  120. package/docs/api/interfaces/UserProfile.md +1 -1
  121. package/docs/api/modules.md +2 -2
  122. package/docs/rbac/README.md +9 -4
  123. package/package.json +1 -1
  124. package/src/components/NavigationMenu/NavigationMenu.tsx +82 -21
  125. package/dist/chunk-TUJSIWX6.js.map +0 -1
@@ -1152,23 +1152,39 @@ var NavigationMenu = React12.forwardRef(({
1152
1152
  } catch (error) {
1153
1153
  logger.warn("NavigationMenu", "useRBAC not available, permission filtering disabled");
1154
1154
  }
1155
+ const eventLoadingRaw = authContext?.eventLoading;
1156
+ const eventLoading = eventLoadingRaw ?? false;
1157
+ const selectedEvent = authContext?.selectedEvent || null;
1158
+ const orgContextReady = authContext?.isContextReady ?? (authContext?.selectedOrganisation?.id ? true : false);
1155
1159
  const { supabase } = authContext || {};
1156
1160
  const { selectedOrganisation } = authContext || {};
1157
- const selectedEvent = authContext?.selectedEvent || null;
1158
- const { resolvedScope, isLoading: scopeLoading } = useResolvedScope({
1159
- supabase: supabase || null,
1160
- selectedOrganisationId: selectedOrganisation?.id || null,
1161
- selectedEventId: selectedEvent?.event_id || null
1161
+ const { resolvedScope, isLoading: scopeLoading, error: scopeError } = useResolvedScope({
1162
+ supabase: filterByPermissions ? supabase || null : null,
1163
+ selectedOrganisationId: filterByPermissions ? selectedOrganisation?.id || null : null,
1164
+ selectedEventId: filterByPermissions ? selectedEvent?.event_id || null : null
1162
1165
  });
1163
1166
  const stableScopeRef = React12.useRef({
1164
1167
  organisationId: "",
1165
1168
  eventId: void 0,
1166
1169
  appId: void 0
1167
1170
  });
1168
- if (!scopeLoading && resolvedScope?.organisationId) {
1169
- const newOrgId = resolvedScope.organisationId;
1170
- const newEventId = resolvedScope.eventId;
1171
- const newAppId = resolvedScope.appId;
1171
+ const effectiveScope = React12.useMemo(() => {
1172
+ if (!scopeLoading && resolvedScope?.organisationId) {
1173
+ return resolvedScope;
1174
+ } else if (!scopeLoading && selectedOrganisation?.id) {
1175
+ return {
1176
+ organisationId: selectedOrganisation.id,
1177
+ eventId: selectedEvent?.event_id || void 0,
1178
+ appId: void 0
1179
+ // App ID will be resolved by usePermissions if needed
1180
+ };
1181
+ }
1182
+ return null;
1183
+ }, [scopeLoading, resolvedScope, selectedOrganisation?.id, selectedEvent?.event_id]);
1184
+ if (effectiveScope?.organisationId) {
1185
+ const newOrgId = effectiveScope.organisationId;
1186
+ const newEventId = effectiveScope.eventId;
1187
+ const newAppId = effectiveScope.appId;
1172
1188
  if (stableScopeRef.current.organisationId !== newOrgId || stableScopeRef.current.eventId !== newEventId || stableScopeRef.current.appId !== newAppId) {
1173
1189
  stableScopeRef.current = {
1174
1190
  organisationId: newOrgId,
@@ -1176,7 +1192,7 @@ var NavigationMenu = React12.forwardRef(({
1176
1192
  appId: newAppId
1177
1193
  };
1178
1194
  }
1179
- } else if (!scopeLoading && !resolvedScope) {
1195
+ } else if (!scopeLoading && !effectiveScope) {
1180
1196
  if (stableScopeRef.current.organisationId !== "") {
1181
1197
  stableScopeRef.current = {
1182
1198
  organisationId: "",
@@ -1194,7 +1210,12 @@ var NavigationMenu = React12.forwardRef(({
1194
1210
  const previousFilteredItemsRef = React12.useRef([]);
1195
1211
  const filteredItems = React12.useMemo(() => {
1196
1212
  if (filterByPermissions) {
1197
- if (!authContext || !rbacContext || scopeLoading || !resolvedScope?.organisationId) {
1213
+ const isOrgContextReady = orgContextReady && selectedOrganisation?.id;
1214
+ const isEventContextReady = eventLoadingRaw === void 0 ? true : !eventLoading;
1215
+ const hasValidContext = isOrgContextReady && isEventContextReady;
1216
+ const shouldWaitForScope = scopeLoading || !hasValidContext;
1217
+ const shouldRetryAfterError = scopeError && hasValidContext && !scopeLoading;
1218
+ if (!authContext || !rbacContext || shouldWaitForScope && !shouldRetryAfterError) {
1198
1219
  return [];
1199
1220
  }
1200
1221
  if (permissionsLoading) {
@@ -1327,24 +1348,32 @@ var NavigationMenu = React12.forwardRef(({
1327
1348
  permissionMap,
1328
1349
  hasAnyPermission,
1329
1350
  scopeLoading,
1351
+ scopeError,
1330
1352
  permissionsLoading,
1331
1353
  resolvedScope,
1332
- auditLog
1354
+ effectiveScope,
1355
+ auditLog,
1356
+ // Add event context state to dependencies so we re-check permissions when event context becomes available
1357
+ eventLoadingRaw,
1358
+ eventLoading,
1359
+ selectedEvent,
1360
+ orgContextReady,
1361
+ selectedOrganisation?.id
1333
1362
  ]);
1334
1363
  React12.useEffect(() => {
1335
1364
  if (auditLog && authContext) {
1365
+ const currentItem = items?.find((item) => item.href === currentPath || item.id === "navigation-menu");
1336
1366
  logger.debug("NavigationMenu", "Navigation access attempt:", {
1337
- itemId: "navigation-menu",
1338
- label: "Navigation Menu",
1367
+ itemId: currentItem?.id || "navigation-menu",
1368
+ label: currentItem?.label || "Navigation Menu",
1339
1369
  href: currentPath,
1340
- // RBAC properties removed - use useRBAC() hook instead
1341
- permissions: null,
1342
- roles: null,
1343
- accessLevel: null,
1370
+ permissions: currentItem?.permissions || null,
1371
+ roles: currentItem?.roles || null,
1372
+ accessLevel: currentItem?.accessLevel || null,
1344
1373
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
1345
1374
  });
1346
1375
  }
1347
- }, [auditLog, authContext, currentPath]);
1376
+ }, [auditLog, authContext, currentPath, items]);
1348
1377
  const handleHierarchicalKeyDown = (event, item) => {
1349
1378
  switch (event.key) {
1350
1379
  case "Enter":
@@ -4553,4 +4582,4 @@ export {
4553
4582
  EventLogoCompact,
4554
4583
  EventLogoLarge
4555
4584
  };
4556
- //# sourceMappingURL=chunk-TUJSIWX6.js.map
4585
+ //# sourceMappingURL=chunk-FC46D3KC.js.map