@jmruthers/pace-core 0.5.152 → 0.5.155
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-UHNMAVK4.js → chunk-4MBPFXR4.js} +56 -4
- package/dist/chunk-4MBPFXR4.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 +62 -3
- package/dist/chunk-UHNMAVK4.js.map +0 -1
package/docs/api/modules.md
CHANGED
package/package.json
CHANGED
|
@@ -503,29 +503,58 @@ export const NavigationMenu = React.forwardRef<
|
|
|
503
503
|
const effectiveScope = React.useMemo(() => {
|
|
504
504
|
if (!scopeLoading && resolvedScope?.organisationId) {
|
|
505
505
|
// Use resolved scope if available (includes appId)
|
|
506
|
+
logger.warn('NavigationMenu', 'Using resolvedScope', {
|
|
507
|
+
organisationId: resolvedScope.organisationId,
|
|
508
|
+
eventId: resolvedScope.eventId,
|
|
509
|
+
appId: resolvedScope.appId
|
|
510
|
+
});
|
|
506
511
|
return resolvedScope;
|
|
507
512
|
} else if (!scopeLoading && selectedOrganisation?.id) {
|
|
508
513
|
// Fall back to building scope from context if resolvedScope is null but context is ready
|
|
509
514
|
// Use resolvedAppId if we've resolved it, otherwise undefined (usePermissions will try to resolve)
|
|
510
|
-
|
|
515
|
+
const fallbackScope = {
|
|
511
516
|
organisationId: selectedOrganisation.id,
|
|
512
517
|
eventId: selectedEvent?.event_id || undefined,
|
|
513
518
|
appId: resolvedAppId
|
|
514
519
|
};
|
|
520
|
+
logger.warn('NavigationMenu', 'Using fallback scope', {
|
|
521
|
+
organisationId: fallbackScope.organisationId,
|
|
522
|
+
eventId: fallbackScope.eventId,
|
|
523
|
+
appId: fallbackScope.appId,
|
|
524
|
+
resolvedAppId,
|
|
525
|
+
hasResolvedScope: !!resolvedScope,
|
|
526
|
+
scopeLoading
|
|
527
|
+
});
|
|
528
|
+
return fallbackScope;
|
|
515
529
|
}
|
|
530
|
+
logger.warn('NavigationMenu', 'effectiveScope is null', {
|
|
531
|
+
scopeLoading,
|
|
532
|
+
hasResolvedScope: !!resolvedScope,
|
|
533
|
+
hasSelectedOrganisation: !!selectedOrganisation?.id
|
|
534
|
+
});
|
|
516
535
|
return null;
|
|
517
536
|
}, [scopeLoading, resolvedScope, selectedOrganisation?.id, selectedEvent?.event_id, resolvedAppId]);
|
|
518
537
|
|
|
519
538
|
// Create a stable scope object that changes when effectiveScope changes
|
|
520
539
|
// This ensures usePermissions detects scope changes and re-runs
|
|
521
540
|
// We memoize it to prevent unnecessary re-renders while still triggering usePermissions when scope changes
|
|
541
|
+
// IMPORTANT: Depend on effectiveScope itself (not just properties) to catch when appId changes
|
|
522
542
|
const stableScope = React.useMemo(() => {
|
|
523
543
|
if (effectiveScope?.organisationId) {
|
|
524
|
-
|
|
544
|
+
const scope = {
|
|
525
545
|
organisationId: effectiveScope.organisationId,
|
|
526
546
|
eventId: effectiveScope.eventId,
|
|
527
547
|
appId: effectiveScope.appId
|
|
528
548
|
};
|
|
549
|
+
// Debug logging to verify appId is preserved
|
|
550
|
+
logger.warn('NavigationMenu', 'stableScope created from effectiveScope', {
|
|
551
|
+
effectiveScopeAppId: effectiveScope.appId,
|
|
552
|
+
stableScopeAppId: scope.appId,
|
|
553
|
+
hasAppId: !!scope.appId,
|
|
554
|
+
organisationId: scope.organisationId,
|
|
555
|
+
eventId: scope.eventId
|
|
556
|
+
});
|
|
557
|
+
return scope;
|
|
529
558
|
}
|
|
530
559
|
// Return empty scope object (not null) so usePermissions can handle it
|
|
531
560
|
return {
|
|
@@ -533,14 +562,44 @@ export const NavigationMenu = React.forwardRef<
|
|
|
533
562
|
eventId: undefined,
|
|
534
563
|
appId: undefined
|
|
535
564
|
};
|
|
536
|
-
}, [effectiveScope
|
|
565
|
+
}, [effectiveScope]);
|
|
537
566
|
|
|
538
567
|
// Get permissions map for synchronous permission checks
|
|
539
568
|
const userId = authContext?.user?.id || '';
|
|
569
|
+
|
|
570
|
+
// Debug logging to understand why usePermissions returns empty map
|
|
571
|
+
React.useEffect(() => {
|
|
572
|
+
if (filterByPermissions && stableScope.organisationId) {
|
|
573
|
+
logger.warn('NavigationMenu', 'usePermissions scope', {
|
|
574
|
+
userId,
|
|
575
|
+
scope: stableScope,
|
|
576
|
+
hasOrganisationId: !!stableScope.organisationId,
|
|
577
|
+
hasEventId: !!stableScope.eventId,
|
|
578
|
+
hasAppId: !!stableScope.appId,
|
|
579
|
+
organisationId: stableScope.organisationId,
|
|
580
|
+
eventId: stableScope.eventId,
|
|
581
|
+
appId: stableScope.appId
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
}, [filterByPermissions, stableScope.organisationId, stableScope.eventId, stableScope.appId, userId]);
|
|
585
|
+
|
|
540
586
|
const { permissions: permissionMap, hasAnyPermission, isLoading: permissionsLoading, error: permissionsError } = usePermissions(
|
|
541
587
|
userId as any,
|
|
542
588
|
stableScope as any
|
|
543
589
|
);
|
|
590
|
+
|
|
591
|
+
// Debug logging for permission map state
|
|
592
|
+
React.useEffect(() => {
|
|
593
|
+
if (filterByPermissions) {
|
|
594
|
+
logger.warn('NavigationMenu', 'usePermissions result', {
|
|
595
|
+
permissionMapSize: permissionMap ? Object.keys(permissionMap).length : 0,
|
|
596
|
+
isLoading: permissionsLoading,
|
|
597
|
+
error: permissionsError?.message,
|
|
598
|
+
hasError: !!permissionsError,
|
|
599
|
+
scope: stableScope
|
|
600
|
+
});
|
|
601
|
+
}
|
|
602
|
+
}, [filterByPermissions, permissionMap, permissionsLoading, permissionsError, stableScope]);
|
|
544
603
|
|
|
545
604
|
// NEW: Phase 2 - Enhanced Security Features
|
|
546
605
|
// Filter navigation items based on permissions using RBAC hooks
|