@jmruthers/pace-core 0.5.45 → 0.5.46
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-PWLLTSP7.js → DataTable-CBZ4FWLB.js} +5 -5
- package/dist/{chunk-GIISFLMP.js → chunk-QGIMHNFE.js} +3 -3
- package/dist/{chunk-D4X7PPGX.js → chunk-RZZ4U2VB.js} +3 -3
- package/dist/{chunk-3PNBACK3.js → chunk-TCPMEL3C.js} +2 -2
- package/dist/{chunk-FZ7EBWOT.js → chunk-UK5BMO5B.js} +3 -3
- package/dist/{chunk-OQ6DTLZ6.js → chunk-VW4YRTVX.js} +33 -9
- package/dist/{chunk-OQ6DTLZ6.js.map → chunk-VW4YRTVX.js.map} +1 -1
- package/dist/{chunk-6AQ7X3EE.js → chunk-WUCWNFHS.js} +5 -5
- package/dist/{chunk-3FAB54BI.js → chunk-YAACZXDE.js} +4 -4
- package/dist/{chunk-2T6QEWMI.js → chunk-YJ7MYXN4.js} +2 -2
- package/dist/{chunk-NYF3CUNC.js → chunk-YOMT5BFG.js} +2 -2
- package/dist/{chunk-VCHXOYD5.js → chunk-ZK26ZQ3P.js} +3 -3
- package/dist/components.js +7 -7
- package/dist/hooks.js +4 -4
- package/dist/index.js +10 -10
- package/dist/providers.js +3 -3
- package/dist/rbac/index.js +5 -5
- package/dist/utils.js +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/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/ButtonProps.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/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/EventContextType.md +1 -1
- package/docs/api/interfaces/EventLogoProps.md +1 -1
- package/docs/api/interfaces/EventProviderProps.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +1 -1
- package/docs/api/interfaces/FooterProps.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/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/RBACContextType.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACProviderProps.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.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/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/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/UsePublicEventLogoOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.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 +3 -3
- package/package.json +1 -1
- package/src/providers/OrganisationProvider.tsx +44 -9
- /package/dist/{DataTable-PWLLTSP7.js.map → DataTable-CBZ4FWLB.js.map} +0 -0
- /package/dist/{chunk-GIISFLMP.js.map → chunk-QGIMHNFE.js.map} +0 -0
- /package/dist/{chunk-D4X7PPGX.js.map → chunk-RZZ4U2VB.js.map} +0 -0
- /package/dist/{chunk-3PNBACK3.js.map → chunk-TCPMEL3C.js.map} +0 -0
- /package/dist/{chunk-FZ7EBWOT.js.map → chunk-UK5BMO5B.js.map} +0 -0
- /package/dist/{chunk-6AQ7X3EE.js.map → chunk-WUCWNFHS.js.map} +0 -0
- /package/dist/{chunk-3FAB54BI.js.map → chunk-YAACZXDE.js.map} +0 -0
- /package/dist/{chunk-2T6QEWMI.js.map → chunk-YJ7MYXN4.js.map} +0 -0
- /package/dist/{chunk-NYF3CUNC.js.map → chunk-YOMT5BFG.js.map} +0 -0
- /package/dist/{chunk-VCHXOYD5.js.map → chunk-ZK26ZQ3P.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.46](README.md) / Exports
|
|
2
2
|
|
|
3
|
-
# @jmruthers/pace-core - v0.5.
|
|
3
|
+
# @jmruthers/pace-core - v0.5.46
|
|
4
4
|
|
|
5
5
|
**`File`**
|
|
6
6
|
|
|
@@ -4086,7 +4086,7 @@ If used outside OrganisationProvider
|
|
|
4086
4086
|
|
|
4087
4087
|
#### Defined in
|
|
4088
4088
|
|
|
4089
|
-
[packages/core/src/providers/OrganisationProvider.tsx:
|
|
4089
|
+
[packages/core/src/providers/OrganisationProvider.tsx:678](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/providers/OrganisationProvider.tsx#L678)
|
|
4090
4090
|
|
|
4091
4091
|
___
|
|
4092
4092
|
|
package/package.json
CHANGED
|
@@ -108,6 +108,7 @@ export function OrganisationProvider({ children }: OrganisationProviderProps) {
|
|
|
108
108
|
const [isLoading, setIsLoading] = useState(true);
|
|
109
109
|
const [error, setError] = useState<Error | null>(null);
|
|
110
110
|
const [isContextReady, setIsContextReady] = useState(false);
|
|
111
|
+
const [retryCount, setRetryCount] = useState(0);
|
|
111
112
|
|
|
112
113
|
const { user, session, supabase, signOut } = useUnifiedAuth();
|
|
113
114
|
|
|
@@ -120,6 +121,19 @@ export function OrganisationProvider({ children }: OrganisationProviderProps) {
|
|
|
120
121
|
navigate = null;
|
|
121
122
|
}
|
|
122
123
|
|
|
124
|
+
// FIXED: Function to clear all cached data
|
|
125
|
+
const clearAllCachedData = useCallback(() => {
|
|
126
|
+
localStorage.removeItem(STORAGE_KEYS.SELECTED_ORGANISATION);
|
|
127
|
+
localStorage.removeItem(STORAGE_KEYS.ORGANISATION_CONTEXT);
|
|
128
|
+
setSelectedOrganisation(null);
|
|
129
|
+
setOrganisations([]);
|
|
130
|
+
setUserMemberships([]);
|
|
131
|
+
setRoleMapState(new Map());
|
|
132
|
+
setError(null);
|
|
133
|
+
setRetryCount(0);
|
|
134
|
+
setIsContextReady(false);
|
|
135
|
+
}, []);
|
|
136
|
+
|
|
123
137
|
// Set organisation context in database session
|
|
124
138
|
const setDatabaseOrganisationContext = useCallback(async (organisation: Organisation): Promise<void> => {
|
|
125
139
|
if (!supabase || !session) {
|
|
@@ -257,10 +271,20 @@ export function OrganisationProvider({ children }: OrganisationProviderProps) {
|
|
|
257
271
|
|
|
258
272
|
DebugLogger.log("OrganisationProvider", "Valid organisation IDs:", organisationIds);
|
|
259
273
|
|
|
274
|
+
// FIXED: Additional validation to ensure no empty strings in the array
|
|
275
|
+
const cleanOrganisationIds = organisationIds.filter(id => id && id.trim() !== '');
|
|
276
|
+
|
|
277
|
+
if (cleanOrganisationIds.length === 0) {
|
|
278
|
+
console.warn("[OrganisationProvider] No clean organisation IDs after filtering:", organisationIds);
|
|
279
|
+
throw new Error('No valid organisation IDs found after cleaning') as OrganisationSecurityError;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
DebugLogger.log("OrganisationProvider", "Clean organisation IDs for query:", cleanOrganisationIds);
|
|
283
|
+
|
|
260
284
|
const { data: organisations, error: orgError } = await supabase
|
|
261
285
|
.from('organisations')
|
|
262
286
|
.select('id, name, display_name, subscription_tier, settings, is_active, parent_id, created_at, updated_at')
|
|
263
|
-
.in('id',
|
|
287
|
+
.in('id', cleanOrganisationIds);
|
|
264
288
|
|
|
265
289
|
if (orgError) {
|
|
266
290
|
console.error("[OrganisationProvider] Error loading organisations:", orgError);
|
|
@@ -352,25 +376,35 @@ export function OrganisationProvider({ children }: OrganisationProviderProps) {
|
|
|
352
376
|
userRole: roleMap.get(initialOrg.id)
|
|
353
377
|
});
|
|
354
378
|
|
|
379
|
+
// FIXED: Reset retry count on success
|
|
380
|
+
setRetryCount(0);
|
|
381
|
+
|
|
355
382
|
} catch (err) {
|
|
356
383
|
console.error("[OrganisationProvider] Failed to load organisations:", err);
|
|
357
384
|
setError(err as Error);
|
|
358
|
-
//
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
localStorage.removeItem(STORAGE_KEYS.SELECTED_ORGANISATION);
|
|
385
|
+
// FIXED: Increment retry count on error
|
|
386
|
+
setRetryCount(prev => prev + 1);
|
|
387
|
+
// FIXED: Clear all cached data on error to prevent corruption
|
|
388
|
+
clearAllCachedData();
|
|
363
389
|
} finally {
|
|
364
390
|
setIsLoading(false);
|
|
365
391
|
}
|
|
366
|
-
}, [user, session, supabase]);
|
|
392
|
+
}, [user, session, supabase, clearAllCachedData]);
|
|
367
393
|
|
|
368
394
|
// FIXED: Load organisations only when authentication is complete and stable
|
|
369
395
|
useEffect(() => {
|
|
370
396
|
// Only load organizations if we have a valid user and session
|
|
371
397
|
// and we're not in the middle of authentication loading
|
|
372
398
|
if (user && session && supabase && !isLoading) {
|
|
373
|
-
|
|
399
|
+
// FIXED: Prevent infinite retry loops
|
|
400
|
+
if (retryCount >= 3) {
|
|
401
|
+
console.error("[OrganisationProvider] Max retry count reached, stopping organisation loading");
|
|
402
|
+
setError(new Error('Failed to load organisations after multiple attempts'));
|
|
403
|
+
setIsLoading(false);
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
DebugLogger.log("OrganisationProvider", "Authentication stable, loading organizations... (retry:", retryCount, ")");
|
|
374
408
|
loadUserOrganisations();
|
|
375
409
|
} else if (!user && !session) {
|
|
376
410
|
// Clear state if no authentication
|
|
@@ -381,11 +415,12 @@ export function OrganisationProvider({ children }: OrganisationProviderProps) {
|
|
|
381
415
|
setRoleMapState(new Map());
|
|
382
416
|
setIsLoading(false);
|
|
383
417
|
setError(null);
|
|
418
|
+
setRetryCount(0); // Reset retry count
|
|
384
419
|
// FIXED: Clear localStorage when no authentication to prevent stale data
|
|
385
420
|
localStorage.removeItem(STORAGE_KEYS.SELECTED_ORGANISATION);
|
|
386
421
|
localStorage.removeItem(STORAGE_KEYS.ORGANISATION_CONTEXT);
|
|
387
422
|
}
|
|
388
|
-
}, [user, session, supabase, isLoading, loadUserOrganisations]);
|
|
423
|
+
}, [user, session, supabase, isLoading, loadUserOrganisations, retryCount]);
|
|
389
424
|
|
|
390
425
|
// Handle logout and redirect to login
|
|
391
426
|
const handleLogoutAndRedirect = useCallback(async () => {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|