@jmruthers/pace-core 0.5.168 → 0.5.170
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/{DataTable-QJK5YOW5.js → DataTable-NHLYYPTC.js} +3 -3
- package/dist/{chunk-ZG5QL5YV.js → chunk-4X7FFPG5.js} +4 -2
- package/dist/chunk-4X7FFPG5.js.map +1 -0
- package/dist/{chunk-QRD6SWUB.js → chunk-FCQMCXCG.js} +2 -2
- package/dist/{chunk-WUGJD2PO.js → chunk-JLQBNZEG.js} +2 -2
- package/dist/{chunk-IM3N2FXP.js → chunk-KNJZCW5K.js} +28 -16
- package/dist/chunk-KNJZCW5K.js.map +1 -0
- package/dist/components.js +3 -3
- package/dist/index.js +4 -4
- package/dist/rbac/index.js +2 -2
- package/dist/utils.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 +8 -8
- package/package.json +1 -1
- package/src/components/NavigationMenu/NavigationMenu.tsx +26 -12
- package/src/rbac/hooks/usePermissions.ts +5 -2
- package/dist/chunk-IM3N2FXP.js.map +0 -1
- package/dist/chunk-ZG5QL5YV.js.map +0 -1
- /package/dist/{DataTable-QJK5YOW5.js.map → DataTable-NHLYYPTC.js.map} +0 -0
- /package/dist/{chunk-QRD6SWUB.js.map → chunk-FCQMCXCG.js.map} +0 -0
- /package/dist/{chunk-WUGJD2PO.js.map → chunk-JLQBNZEG.js.map} +0 -0
package/docs/api/modules.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
[@jmruthers/pace-core - v0.5.
|
|
1
|
+
[@jmruthers/pace-core - v0.5.170](README.md) / Exports
|
|
2
2
|
|
|
3
|
-
# @jmruthers/pace-core - v0.5.
|
|
3
|
+
# @jmruthers/pace-core - v0.5.170
|
|
4
4
|
|
|
5
5
|
**`File`**
|
|
6
6
|
|
|
@@ -6680,7 +6680,7 @@ function MyComponent() {
|
|
|
6680
6680
|
|
|
6681
6681
|
#### Defined in
|
|
6682
6682
|
|
|
6683
|
-
[packages/core/src/rbac/hooks/usePermissions.ts:
|
|
6683
|
+
[packages/core/src/rbac/hooks/usePermissions.ts:355](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/usePermissions.ts#L355)
|
|
6684
6684
|
|
|
6685
6685
|
___
|
|
6686
6686
|
|
|
@@ -6730,7 +6730,7 @@ function MyComponent() {
|
|
|
6730
6730
|
|
|
6731
6731
|
#### Defined in
|
|
6732
6732
|
|
|
6733
|
-
[packages/core/src/rbac/hooks/usePermissions.ts:
|
|
6733
|
+
[packages/core/src/rbac/hooks/usePermissions.ts:551](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/usePermissions.ts#L551)
|
|
6734
6734
|
|
|
6735
6735
|
___
|
|
6736
6736
|
|
|
@@ -6787,7 +6787,7 @@ function MyComponent() {
|
|
|
6787
6787
|
|
|
6788
6788
|
#### Defined in
|
|
6789
6789
|
|
|
6790
|
-
[packages/core/src/rbac/hooks/usePermissions.ts:
|
|
6790
|
+
[packages/core/src/rbac/hooks/usePermissions.ts:626](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/usePermissions.ts#L626)
|
|
6791
6791
|
|
|
6792
6792
|
___
|
|
6793
6793
|
|
|
@@ -6838,7 +6838,7 @@ function MyComponent() {
|
|
|
6838
6838
|
|
|
6839
6839
|
#### Defined in
|
|
6840
6840
|
|
|
6841
|
-
[packages/core/src/rbac/hooks/usePermissions.ts:
|
|
6841
|
+
[packages/core/src/rbac/hooks/usePermissions.ts:709](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/usePermissions.ts#L709)
|
|
6842
6842
|
|
|
6843
6843
|
___
|
|
6844
6844
|
|
|
@@ -6889,7 +6889,7 @@ function MyComponent() {
|
|
|
6889
6889
|
|
|
6890
6890
|
#### Defined in
|
|
6891
6891
|
|
|
6892
|
-
[packages/core/src/rbac/hooks/usePermissions.ts:
|
|
6892
|
+
[packages/core/src/rbac/hooks/usePermissions.ts:795](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/usePermissions.ts#L795)
|
|
6893
6893
|
|
|
6894
6894
|
___
|
|
6895
6895
|
|
|
@@ -6940,7 +6940,7 @@ function MyComponent() {
|
|
|
6940
6940
|
|
|
6941
6941
|
#### Defined in
|
|
6942
6942
|
|
|
6943
|
-
[packages/core/src/rbac/hooks/usePermissions.ts:
|
|
6943
|
+
[packages/core/src/rbac/hooks/usePermissions.ts:880](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/usePermissions.ts#L880)
|
|
6944
6944
|
|
|
6945
6945
|
___
|
|
6946
6946
|
|
package/package.json
CHANGED
|
@@ -627,6 +627,16 @@ export const NavigationMenu = React.forwardRef<
|
|
|
627
627
|
const previousFilteredItemsRef = React.useRef<NavigationItem[]>([]);
|
|
628
628
|
|
|
629
629
|
const filteredItems = React.useMemo(() => {
|
|
630
|
+
logger.warn('NavigationMenu', 'filteredItems useMemo running', {
|
|
631
|
+
filterByPermissions,
|
|
632
|
+
hasAuthContext: !!authContext,
|
|
633
|
+
hasRbacContext: !!rbacContext,
|
|
634
|
+
permissionsLoading,
|
|
635
|
+
permissionMapSize: permissionMap ? Object.keys(permissionMap).length : 0,
|
|
636
|
+
permissionsError: permissionsError?.message,
|
|
637
|
+
itemsCount: items?.length || 0
|
|
638
|
+
});
|
|
639
|
+
|
|
630
640
|
// Security: If filtering is enabled but we're missing required context or still loading, show NO items
|
|
631
641
|
// This prevents security risk of showing items before permissions are verified
|
|
632
642
|
if (filterByPermissions) {
|
|
@@ -793,18 +803,16 @@ export const NavigationMenu = React.forwardRef<
|
|
|
793
803
|
const finalHasPermission = isSuperAdmin || hasPagePermission;
|
|
794
804
|
|
|
795
805
|
if (!finalHasPermission) {
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
});
|
|
807
|
-
}
|
|
806
|
+
logger.warn('NavigationMenu', `Filtering out navigation item "${item.label}" - no page permission:`, {
|
|
807
|
+
itemId: item.id,
|
|
808
|
+
href: item.href,
|
|
809
|
+
pageId,
|
|
810
|
+
permission: pagePermission,
|
|
811
|
+
hasPermission: finalHasPermission,
|
|
812
|
+
isSuperAdmin,
|
|
813
|
+
permissionMapValue: permissionMap[pagePermission],
|
|
814
|
+
permissionMapKeys: Object.keys(permissionMap).slice(0, 20) // Show first 20 keys for debugging
|
|
815
|
+
});
|
|
808
816
|
return false;
|
|
809
817
|
}
|
|
810
818
|
}
|
|
@@ -847,6 +855,12 @@ export const NavigationMenu = React.forwardRef<
|
|
|
847
855
|
.map(item => filterItem(item))
|
|
848
856
|
.filter((item): item is NavigationItem => item !== null);
|
|
849
857
|
|
|
858
|
+
logger.warn('NavigationMenu', 'filteredItems result', {
|
|
859
|
+
originalItemsCount: items?.length || 0,
|
|
860
|
+
filteredItemsCount: filtered.length,
|
|
861
|
+
permissionMapSize: permissionMap ? Object.keys(permissionMap).length : 0
|
|
862
|
+
});
|
|
863
|
+
|
|
850
864
|
// Update the ref with the new filtered items so we can preserve them during refetches
|
|
851
865
|
previousFilteredItemsRef.current = filtered;
|
|
852
866
|
|
|
@@ -63,6 +63,7 @@ export function usePermissions(
|
|
|
63
63
|
const [permissions, setPermissions] = useState<PermissionMap>({} as PermissionMap);
|
|
64
64
|
const [isLoading, setIsLoading] = useState(true);
|
|
65
65
|
const [error, setError] = useState<Error | null>(null);
|
|
66
|
+
const [fetchTrigger, setFetchTrigger] = useState(0);
|
|
66
67
|
const isFetchingRef = useRef(false);
|
|
67
68
|
const logger = getRBACLogger();
|
|
68
69
|
|
|
@@ -111,7 +112,7 @@ export function usePermissions(
|
|
|
111
112
|
}
|
|
112
113
|
}, [organisationId, error]);
|
|
113
114
|
|
|
114
|
-
// CRITICAL: Detect parameter changes imperatively and fetch
|
|
115
|
+
// CRITICAL: Detect parameter changes imperatively and trigger fetch
|
|
115
116
|
// This bypasses React's useEffect dependency tracking which is failing to detect appId changes
|
|
116
117
|
const paramsChanged =
|
|
117
118
|
prevValuesRef.current.userId !== userId ||
|
|
@@ -130,6 +131,8 @@ export function usePermissions(
|
|
|
130
131
|
appIdChanged: prevValuesRef.current.appId !== appId
|
|
131
132
|
});
|
|
132
133
|
prevValuesRef.current = { userId, organisationId, eventId, appId };
|
|
134
|
+
// Increment counter to force useEffect to run
|
|
135
|
+
setFetchTrigger(prev => prev + 1);
|
|
133
136
|
}
|
|
134
137
|
|
|
135
138
|
useEffect(() => {
|
|
@@ -241,7 +244,7 @@ export function usePermissions(
|
|
|
241
244
|
};
|
|
242
245
|
|
|
243
246
|
fetchPermissions();
|
|
244
|
-
}, [userId, organisationId, eventId, appId]);
|
|
247
|
+
}, [fetchTrigger, userId, organisationId, eventId, appId]);
|
|
245
248
|
|
|
246
249
|
const hasPermission = useCallback((permission: Permission): boolean => {
|
|
247
250
|
if (permissions['*']) {
|