@jmruthers/pace-core 0.5.150 → 0.5.152
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.
- package/dist/{chunk-NRDKCKSX.js → chunk-UHNMAVK4.js} +25 -4
- package/dist/chunk-UHNMAVK4.js.map +1 -0
- package/dist/components.js +1 -1
- package/dist/index.js +1 -1
- package/docs/api/classes/ColumnFactory.md +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +1 -1
- package/docs/api/classes/MissingUserContextError.md +1 -1
- package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
- package/docs/api/classes/PermissionDeniedError.md +1 -1
- package/docs/api/classes/PublicErrorBoundary.md +1 -1
- package/docs/api/classes/RBACAuditManager.md +1 -1
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +1 -1
- package/docs/api/classes/RBACError.md +1 -1
- package/docs/api/classes/RBACNotInitializedError.md +1 -1
- package/docs/api/classes/SecureSupabaseClient.md +1 -1
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/BadgeProps.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +1 -1
- package/docs/api/interfaces/CalendarProps.md +1 -1
- package/docs/api/interfaces/CardProps.md +1 -1
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +1 -1
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +1 -1
- package/docs/api/interfaces/DataTableColumn.md +1 -1
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
- package/docs/api/interfaces/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/EventLogoProps.md +1 -1
- package/docs/api/interfaces/ExportColumn.md +1 -1
- package/docs/api/interfaces/ExportOptions.md +1 -1
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +1 -1
- package/docs/api/interfaces/FileReference.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +1 -1
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +1 -1
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
- package/docs/api/interfaces/NavigationContextType.md +1 -1
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +1 -1
- package/docs/api/interfaces/NavigationMenuProps.md +1 -1
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
- package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
- package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
- package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
- package/docs/api/interfaces/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/ResourcePermissions.md +1 -1
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RoleManagementResult.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +1 -1
- package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +1 -1
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/TabsContentProps.md +1 -1
- package/docs/api/interfaces/TabsListProps.md +1 -1
- package/docs/api/interfaces/TabsProps.md +1 -1
- package/docs/api/interfaces/TabsTriggerProps.md +1 -1
- package/docs/api/interfaces/TextareaProps.md +1 -1
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +1 -1
- package/docs/api/interfaces/UserMenuProps.md +1 -1
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +2 -2
- package/package.json +1 -1
- package/src/components/NavigationMenu/NavigationMenu.tsx +45 -4
- package/dist/chunk-NRDKCKSX.js.map +0 -1
package/docs/api/modules.md
CHANGED
package/package.json
CHANGED
|
@@ -457,23 +457,64 @@ export const NavigationMenu = React.forwardRef<
|
|
|
457
457
|
selectedEventId: filterByPermissions ? (selectedEvent?.event_id || null) : null
|
|
458
458
|
});
|
|
459
459
|
|
|
460
|
+
// Resolve appId when useResolvedScope fails but context is ready
|
|
461
|
+
// This is needed because usePermissions requires appId to fetch permissions correctly
|
|
462
|
+
const [resolvedAppId, setResolvedAppId] = React.useState<string | undefined>(undefined);
|
|
463
|
+
React.useEffect(() => {
|
|
464
|
+
// Only resolve appId if:
|
|
465
|
+
// 1. useResolvedScope errored or returned null
|
|
466
|
+
// 2. But we have organisation context ready
|
|
467
|
+
// 3. And we have appName from authContext
|
|
468
|
+
// 4. And we haven't resolved it yet
|
|
469
|
+
if (
|
|
470
|
+
!scopeLoading &&
|
|
471
|
+
!resolvedScope?.appId &&
|
|
472
|
+
selectedOrganisation?.id &&
|
|
473
|
+
authContext?.appName &&
|
|
474
|
+
authContext?.user?.id &&
|
|
475
|
+
!resolvedAppId
|
|
476
|
+
) {
|
|
477
|
+
// Resolve appId using the same method as useRBAC
|
|
478
|
+
// Double-check user exists (TypeScript narrowing) and capture values
|
|
479
|
+
if (!authContext.user || !authContext.appName) {
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
const userId = authContext.user.id;
|
|
483
|
+
const appName = authContext.appName;
|
|
484
|
+
import('../../rbac/api').then(({ resolveAppContext }) => {
|
|
485
|
+
resolveAppContext({
|
|
486
|
+
userId,
|
|
487
|
+
appName
|
|
488
|
+
}).then((result) => {
|
|
489
|
+
if (result?.appId) {
|
|
490
|
+
setResolvedAppId(result.appId);
|
|
491
|
+
}
|
|
492
|
+
}).catch((error) => {
|
|
493
|
+
// Silently fail - usePermissions will handle it
|
|
494
|
+
logger.debug('NavigationMenu', 'Failed to resolve appId', error);
|
|
495
|
+
});
|
|
496
|
+
});
|
|
497
|
+
}
|
|
498
|
+
}, [scopeLoading, resolvedScope?.appId, selectedOrganisation?.id, authContext?.appName, authContext?.user?.id, resolvedAppId]);
|
|
499
|
+
|
|
460
500
|
// Build scope from resolvedScope if available, otherwise fall back to context values
|
|
461
501
|
// This handles the case where useResolvedScope errored initially but context is now ready
|
|
502
|
+
// IMPORTANT: We need appId for usePermissions to work correctly
|
|
462
503
|
const effectiveScope = React.useMemo(() => {
|
|
463
504
|
if (!scopeLoading && resolvedScope?.organisationId) {
|
|
464
|
-
// Use resolved scope if available
|
|
505
|
+
// Use resolved scope if available (includes appId)
|
|
465
506
|
return resolvedScope;
|
|
466
507
|
} else if (!scopeLoading && selectedOrganisation?.id) {
|
|
467
508
|
// Fall back to building scope from context if resolvedScope is null but context is ready
|
|
468
|
-
//
|
|
509
|
+
// Use resolvedAppId if we've resolved it, otherwise undefined (usePermissions will try to resolve)
|
|
469
510
|
return {
|
|
470
511
|
organisationId: selectedOrganisation.id,
|
|
471
512
|
eventId: selectedEvent?.event_id || undefined,
|
|
472
|
-
appId:
|
|
513
|
+
appId: resolvedAppId
|
|
473
514
|
};
|
|
474
515
|
}
|
|
475
516
|
return null;
|
|
476
|
-
}, [scopeLoading, resolvedScope, selectedOrganisation?.id, selectedEvent?.event_id]);
|
|
517
|
+
}, [scopeLoading, resolvedScope, selectedOrganisation?.id, selectedEvent?.event_id, resolvedAppId]);
|
|
477
518
|
|
|
478
519
|
// Create a stable scope object that changes when effectiveScope changes
|
|
479
520
|
// This ensures usePermissions detects scope changes and re-runs
|