@jmruthers/pace-core 0.5.33 → 0.5.35
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-XPPSWRXE.js → DataTable-7H63EFYM.js} +3 -2
- package/dist/{chunk-TBJVKUYR.js → chunk-BRWHKGV2.js} +58 -5
- package/dist/chunk-BRWHKGV2.js.map +1 -0
- package/dist/{chunk-OYDYXNAY.js → chunk-MC5E4ILK.js} +2 -2
- package/dist/components.js +3 -2
- package/dist/components.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/utils.js +4 -4
- 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 +2 -2
- package/package.json +1 -1
- package/src/components/DataTable/components/DataTableCore.tsx +67 -4
- package/dist/chunk-TBJVKUYR.js.map +0 -1
- /package/dist/{DataTable-XPPSWRXE.js.map → DataTable-7H63EFYM.js.map} +0 -0
- /package/dist/{chunk-OYDYXNAY.js.map → chunk-MC5E4ILK.js.map} +0 -0
package/docs/api/modules.md
CHANGED
package/package.json
CHANGED
|
@@ -50,6 +50,7 @@ import { AccessDeniedPage } from './AccessDeniedPage';
|
|
|
50
50
|
import { useCan } from '../../../rbac/hooks';
|
|
51
51
|
import { useUnifiedAuth } from '../../../providers/UnifiedAuthProvider';
|
|
52
52
|
import { Scope } from '../../../rbac/types';
|
|
53
|
+
import { getCurrentAppName } from '../../../utils/appNameResolver';
|
|
53
54
|
|
|
54
55
|
import type {
|
|
55
56
|
DataRecord,
|
|
@@ -377,12 +378,56 @@ function DataTableInternal<TData extends DataRecord>({
|
|
|
377
378
|
|
|
378
379
|
useEffect(() => {
|
|
379
380
|
const resolveScope = async () => {
|
|
381
|
+
// Get app ID from package.json or environment (SAME AS PagePermissionGuard)
|
|
382
|
+
let appId: string | undefined = undefined;
|
|
383
|
+
|
|
384
|
+
// Try to resolve from database
|
|
385
|
+
if (supabase) {
|
|
386
|
+
const appName = getCurrentAppName();
|
|
387
|
+
if (appName) {
|
|
388
|
+
try {
|
|
389
|
+
console.log('[DataTable] Resolving app name to ID:', appName);
|
|
390
|
+
const { data: app, error } = await supabase
|
|
391
|
+
.from('rbac_apps')
|
|
392
|
+
.select('id, name, is_active')
|
|
393
|
+
.eq('name', appName)
|
|
394
|
+
.eq('is_active', true)
|
|
395
|
+
.single() as { data: { id: string; name: string; is_active: boolean } | null; error: any };
|
|
396
|
+
|
|
397
|
+
if (error) {
|
|
398
|
+
console.error('[DataTable] Database error resolving app ID:', error);
|
|
399
|
+
// Check if app exists but is inactive
|
|
400
|
+
const { data: inactiveApp } = await supabase
|
|
401
|
+
.from('rbac_apps')
|
|
402
|
+
.select('id, name, is_active')
|
|
403
|
+
.eq('name', appName)
|
|
404
|
+
.single() as { data: { id: string; name: string; is_active: boolean } | null };
|
|
405
|
+
|
|
406
|
+
if (inactiveApp) {
|
|
407
|
+
console.error(`[DataTable] App "${appName}" exists but is inactive (is_active: ${inactiveApp.is_active})`);
|
|
408
|
+
} else {
|
|
409
|
+
console.error(`[DataTable] App "${appName}" not found in rbac_apps table`);
|
|
410
|
+
}
|
|
411
|
+
} else if (app) {
|
|
412
|
+
appId = app.id;
|
|
413
|
+
console.log('[DataTable] Successfully resolved app ID:', app.id);
|
|
414
|
+
} else {
|
|
415
|
+
console.error('[DataTable] No app data returned for:', appName);
|
|
416
|
+
}
|
|
417
|
+
} catch (error) {
|
|
418
|
+
console.error('[DataTable] Unexpected error resolving app ID:', error);
|
|
419
|
+
}
|
|
420
|
+
} else {
|
|
421
|
+
console.warn('[DataTable] No app name available for resolution');
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
380
425
|
// If we have both organisation and event, use them directly
|
|
381
426
|
if (selectedOrganisationId && selectedEventId) {
|
|
382
427
|
setResolvedScope({
|
|
383
428
|
organisationId: selectedOrganisationId,
|
|
384
429
|
eventId: selectedEventId,
|
|
385
|
-
appId:
|
|
430
|
+
appId: appId
|
|
386
431
|
});
|
|
387
432
|
return;
|
|
388
433
|
}
|
|
@@ -392,7 +437,7 @@ function DataTableInternal<TData extends DataRecord>({
|
|
|
392
437
|
setResolvedScope({
|
|
393
438
|
organisationId: selectedOrganisationId,
|
|
394
439
|
eventId: selectedEventId || undefined,
|
|
395
|
-
appId:
|
|
440
|
+
appId: appId
|
|
396
441
|
});
|
|
397
442
|
return;
|
|
398
443
|
}
|
|
@@ -407,7 +452,11 @@ function DataTableInternal<TData extends DataRecord>({
|
|
|
407
452
|
setResolvedScope(null);
|
|
408
453
|
return;
|
|
409
454
|
}
|
|
410
|
-
|
|
455
|
+
// Preserve the resolved app ID
|
|
456
|
+
setResolvedScope({
|
|
457
|
+
...eventScope,
|
|
458
|
+
appId: appId || eventScope.appId
|
|
459
|
+
});
|
|
411
460
|
} catch (error) {
|
|
412
461
|
console.error('[DataTable] Error resolving scope from event:', error);
|
|
413
462
|
setResolvedScope(null);
|
|
@@ -445,7 +494,17 @@ function DataTableInternal<TData extends DataRecord>({
|
|
|
445
494
|
const fallbackScope = { organisationId: '', eventId: undefined, appId: undefined };
|
|
446
495
|
const effectiveScope = stableScope && stableScope.organisationId ? stableScope : fallbackScope;
|
|
447
496
|
|
|
448
|
-
|
|
497
|
+
// TEMPORARY TEST: Bypass useCan to see if the issue is with the hook itself
|
|
498
|
+
const testBypass = false; // Set to true to test bypassing useCan
|
|
499
|
+
|
|
500
|
+
const permissions = testBypass ? {
|
|
501
|
+
canRead: { can: true, isLoading: false, error: null, refetch: async () => {} },
|
|
502
|
+
canCreate: { can: true, isLoading: false, error: null, refetch: async () => {} },
|
|
503
|
+
canUpdate: { can: true, isLoading: false, error: null, refetch: async () => {} },
|
|
504
|
+
canDelete: { can: true, isLoading: false, error: null, refetch: async () => {} },
|
|
505
|
+
canExport: { can: true, isLoading: false, error: null, refetch: async () => {} },
|
|
506
|
+
canImport: { can: true, isLoading: false, error: null, refetch: async () => {} },
|
|
507
|
+
} : {
|
|
449
508
|
canRead: useCan(user?.id || '', effectiveScope, `read:page.${effectivePageId}` as any, effectivePageId, true),
|
|
450
509
|
canCreate: useCan(user?.id || '', effectiveScope, `create:page.${effectivePageId}` as any, effectivePageId, true),
|
|
451
510
|
canUpdate: useCan(user?.id || '', effectiveScope, `update:page.${effectivePageId}` as any, effectivePageId, true),
|
|
@@ -453,6 +512,10 @@ function DataTableInternal<TData extends DataRecord>({
|
|
|
453
512
|
canExport: useCan(user?.id || '', effectiveScope, `manage:page.${effectivePageId}` as any, effectivePageId, true), // Using manage for export/import
|
|
454
513
|
canImport: useCan(user?.id || '', effectiveScope, `manage:page.${effectivePageId}` as any, effectivePageId, true), // Using manage for export/import
|
|
455
514
|
};
|
|
515
|
+
|
|
516
|
+
if (testBypass) {
|
|
517
|
+
console.log('[DataTable] TEST BYPASS: Using hardcoded can: true for all permissions');
|
|
518
|
+
}
|
|
456
519
|
|
|
457
520
|
// ============================================================================
|
|
458
521
|
// CONFIGURATION RESOLUTION - ALWAYS call these hooks
|