@jmruthers/pace-core 0.5.5 → 0.5.7
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-ltTFXHS3.d.ts → DataTable-32L3DDeG.d.ts} +1 -1
- package/dist/{DataTable-3SSI644S.js → DataTable-MZKEENPY.js} +2 -2
- package/dist/{chunk-2BJFM2JC.js → chunk-2VSQSO5Z.js} +26 -25
- package/dist/chunk-2VSQSO5Z.js.map +1 -0
- package/dist/{chunk-RTCA5ZNK.js → chunk-Y2LJQ7QE.js} +2 -2
- package/dist/components.d.ts +2 -2
- package/dist/components.js +2 -2
- package/dist/hooks.d.ts +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/{types-BRDU7N6w.d.ts → types-CczCVCDt.d.ts} +11 -4
- package/dist/utils.d.ts +2 -2
- 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 +34 -34
- 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/docs/implementation-guides/datatable-rbac-usage.md +286 -0
- package/package.json +1 -1
- package/src/components/DataTable/DataTable.tsx +0 -5
- package/src/components/DataTable/__tests__/DataTable.hooks.test.tsx +0 -1
- package/src/components/DataTable/components/ActionButtons.tsx +1 -2
- package/src/components/DataTable/components/DataTableCore.tsx +38 -33
- package/src/components/DataTable/components/UnifiedTableBody.tsx +2 -4
- package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +1 -1
- package/src/components/DataTable/examples/HierarchicalExample.tsx +3 -3
- package/src/components/DataTable/examples/InitialPageSizeExample.tsx +3 -3
- package/src/components/DataTable/examples/PerformanceExample.tsx +3 -3
- package/src/components/DataTable/types.ts +12 -7
- package/src/rbac/hooks/useRBAC.test.ts +0 -8
- package/dist/chunk-2BJFM2JC.js.map +0 -1
- package/src/components/DataTable/__tests__/DataTable.hooks.test 2.tsx +0 -191
- /package/dist/{DataTable-3SSI644S.js.map → DataTable-MZKEENPY.js.map} +0 -0
- /package/dist/{chunk-RTCA5ZNK.js.map → chunk-Y2LJQ7QE.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import React__default from 'react';
|
|
3
|
-
import { D as DataRecord, a as DataTableColumn, b as DataTableRBACConfig, c as DataTableFeatureConfig, H as HierarchicalConfig, P as PerformanceConfig, S as ServerSideConfig, d as PaginationMode, C as ChunkingConfig, e as SearchIndexConfig, G as GetRowId, E as EmptyStateConfig, A as AggregateConfig, f as DataTableAction } from './types-
|
|
3
|
+
import { D as DataRecord, a as DataTableColumn, b as DataTableRBACConfig, c as DataTableFeatureConfig, H as HierarchicalConfig, P as PerformanceConfig, S as ServerSideConfig, d as PaginationMode, C as ChunkingConfig, e as SearchIndexConfig, G as GetRowId, E as EmptyStateConfig, A as AggregateConfig, f as DataTableAction } from './types-CczCVCDt.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Configuration interface for customizing ImportModal text content
|
|
@@ -32,7 +32,7 @@ import {
|
|
|
32
32
|
useDataTableContext,
|
|
33
33
|
usePluginRegistry,
|
|
34
34
|
useStateManager
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-2VSQSO5Z.js";
|
|
36
36
|
import "./chunk-QVYBYGT2.js";
|
|
37
37
|
import "./chunk-GWSBHC4J.js";
|
|
38
38
|
import "./chunk-7BNPOCLL.js";
|
|
@@ -96,4 +96,4 @@ export {
|
|
|
96
96
|
usePluginRegistry,
|
|
97
97
|
useStateManager
|
|
98
98
|
};
|
|
99
|
-
//# sourceMappingURL=DataTable-
|
|
99
|
+
//# sourceMappingURL=DataTable-MZKEENPY.js.map
|
|
@@ -3347,38 +3347,39 @@ function DataTableInternal({
|
|
|
3347
3347
|
defaultOrder: columns.map((col) => col.id || col.accessorKey || ""),
|
|
3348
3348
|
enablePersistence: features.columnReordering
|
|
3349
3349
|
});
|
|
3350
|
+
const pageId = rbac.pageId;
|
|
3350
3351
|
const permissions = {
|
|
3351
3352
|
canRead: useCan(user?.id || "", {
|
|
3352
3353
|
organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
|
|
3353
3354
|
eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
|
|
3354
3355
|
appId: user?.user_metadata?.appId || user?.app_metadata?.appId
|
|
3355
|
-
}, `read
|
|
3356
|
+
}, `read:page.${pageId}`, pageId),
|
|
3356
3357
|
canCreate: useCan(user?.id || "", {
|
|
3357
3358
|
organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
|
|
3358
3359
|
eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
|
|
3359
3360
|
appId: user?.user_metadata?.appId || user?.app_metadata?.appId
|
|
3360
|
-
}, `create
|
|
3361
|
+
}, `create:page.${pageId}`, pageId),
|
|
3361
3362
|
canUpdate: useCan(user?.id || "", {
|
|
3362
3363
|
organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
|
|
3363
3364
|
eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
|
|
3364
3365
|
appId: user?.user_metadata?.appId || user?.app_metadata?.appId
|
|
3365
|
-
}, `update
|
|
3366
|
+
}, `update:page.${pageId}`, pageId),
|
|
3366
3367
|
canDelete: useCan(user?.id || "", {
|
|
3367
3368
|
organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
|
|
3368
3369
|
eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
|
|
3369
3370
|
appId: user?.user_metadata?.appId || user?.app_metadata?.appId
|
|
3370
|
-
}, `delete
|
|
3371
|
+
}, `delete:page.${pageId}`, pageId),
|
|
3371
3372
|
canExport: useCan(user?.id || "", {
|
|
3372
3373
|
organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
|
|
3373
3374
|
eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
|
|
3374
3375
|
appId: user?.user_metadata?.appId || user?.app_metadata?.appId
|
|
3375
|
-
}, `manage
|
|
3376
|
+
}, `manage:page.${pageId}`, pageId),
|
|
3376
3377
|
// Using manage for export/import
|
|
3377
3378
|
canImport: useCan(user?.id || "", {
|
|
3378
3379
|
organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
|
|
3379
3380
|
eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
|
|
3380
3381
|
appId: user?.user_metadata?.appId || user?.app_metadata?.appId
|
|
3381
|
-
}, `manage
|
|
3382
|
+
}, `manage:page.${pageId}`, pageId)
|
|
3382
3383
|
// Using manage for export/import
|
|
3383
3384
|
};
|
|
3384
3385
|
const finalPaginationMode = paginationMode || detectedMode;
|
|
@@ -3490,21 +3491,7 @@ function DataTableInternal({
|
|
|
3490
3491
|
}
|
|
3491
3492
|
};
|
|
3492
3493
|
}, [cleanup]);
|
|
3493
|
-
|
|
3494
|
-
throw new Error("DataTable requires authenticated user for RBAC");
|
|
3495
|
-
}
|
|
3496
|
-
if (!rbac?.resource) {
|
|
3497
|
-
throw new Error("DataTable requires rbac.resource for permission checking");
|
|
3498
|
-
}
|
|
3499
|
-
const scope = {
|
|
3500
|
-
organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
|
|
3501
|
-
eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
|
|
3502
|
-
appId: user?.user_metadata?.appId || user?.app_metadata?.appId
|
|
3503
|
-
};
|
|
3504
|
-
if (!permissions.canRead.can) {
|
|
3505
|
-
return /* @__PURE__ */ jsx20(AccessDeniedPage, { resource: rbac?.resource || "test-resource", operation: "read" });
|
|
3506
|
-
}
|
|
3507
|
-
const secureFeatures = {
|
|
3494
|
+
const secureFeatures = useMemo6(() => ({
|
|
3508
3495
|
...features,
|
|
3509
3496
|
creation: features.creation && permissions.canCreate.can,
|
|
3510
3497
|
editing: features.editing && permissions.canUpdate.can,
|
|
@@ -3512,15 +3499,15 @@ function DataTableInternal({
|
|
|
3512
3499
|
deleteSelected: features.deleteSelected && permissions.canDelete.can,
|
|
3513
3500
|
export: features.export && permissions.canExport.can,
|
|
3514
3501
|
import: features.import && permissions.canImport.can
|
|
3515
|
-
};
|
|
3516
|
-
const secureHandlers = {
|
|
3502
|
+
}), [features, permissions.canCreate.can, permissions.canUpdate.can, permissions.canDelete.can, permissions.canExport.can, permissions.canImport.can]);
|
|
3503
|
+
const secureHandlers = useMemo6(() => ({
|
|
3517
3504
|
onEditRow: permissions.canUpdate.can ? onEditRow : void 0,
|
|
3518
3505
|
onDeleteRow: permissions.canDelete.can ? onDeleteRow : void 0,
|
|
3519
3506
|
onCreateRow: permissions.canCreate.can ? onCreateRow : void 0,
|
|
3520
3507
|
onImport: permissions.canImport.can ? onImport : void 0,
|
|
3521
3508
|
onExport: permissions.canExport.can ? onExport : void 0,
|
|
3522
3509
|
onDeleteSelected: permissions.canDelete.can ? onDeleteSelected : void 0
|
|
3523
|
-
};
|
|
3510
|
+
}), [permissions.canUpdate.can, permissions.canDelete.can, permissions.canCreate.can, permissions.canImport.can, permissions.canExport.can, onEditRow, onDeleteRow, onCreateRow, onImport, onExport, onDeleteSelected]);
|
|
3524
3511
|
const effectiveActions = useMemo6(() => {
|
|
3525
3512
|
const result = [...actions];
|
|
3526
3513
|
if (secureFeatures.editing && secureHandlers.onEditRow && !result.some((a) => a.label === "Edit")) {
|
|
@@ -3699,6 +3686,20 @@ function DataTableInternal({
|
|
|
3699
3686
|
pagination.pageSize
|
|
3700
3687
|
]);
|
|
3701
3688
|
const table = useReactTable(tableConfig);
|
|
3689
|
+
if (!user) {
|
|
3690
|
+
throw new Error("DataTable requires authenticated user for RBAC");
|
|
3691
|
+
}
|
|
3692
|
+
if (!rbac?.pageId) {
|
|
3693
|
+
throw new Error("DataTable requires rbac.pageId for permission checking");
|
|
3694
|
+
}
|
|
3695
|
+
const scope = {
|
|
3696
|
+
organisationId: user?.user_metadata?.organisationId || user?.app_metadata?.organisationId,
|
|
3697
|
+
eventId: user?.user_metadata?.eventId || user?.app_metadata?.eventId,
|
|
3698
|
+
appId: user?.user_metadata?.appId || user?.app_metadata?.appId
|
|
3699
|
+
};
|
|
3700
|
+
if (!permissions.canRead.can) {
|
|
3701
|
+
return /* @__PURE__ */ jsx20(AccessDeniedPage, { resource: rbac?.pageId || "unknown-page", operation: "read" });
|
|
3702
|
+
}
|
|
3702
3703
|
if (isLoading) {
|
|
3703
3704
|
return /* @__PURE__ */ jsx20(LoadingComponent, {});
|
|
3704
3705
|
}
|
|
@@ -5462,4 +5463,4 @@ export {
|
|
|
5462
5463
|
GroupHeader,
|
|
5463
5464
|
EditableRow
|
|
5464
5465
|
};
|
|
5465
|
-
//# sourceMappingURL=chunk-
|
|
5466
|
+
//# sourceMappingURL=chunk-2VSQSO5Z.js.map
|