@jmruthers/pace-core 0.5.123 → 0.5.124
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-WTS4IRF2.js → DataTable-OKDYRW2S.js} +2 -2
- package/dist/{chunk-DHMFMXFV.js → chunk-GBGYYMC6.js} +64 -13
- package/dist/{chunk-DHMFMXFV.js.map → chunk-GBGYYMC6.js.map} +1 -1
- package/dist/{chunk-ZPJMYGEP.js → chunk-VPUCTHTY.js} +2 -2
- package/dist/components.js +2 -2
- package/dist/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/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/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/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/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/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/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/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 +62 -11
- package/src/components/DataTable/components/DataTableToolbar.tsx +14 -1
- /package/dist/{DataTable-WTS4IRF2.js.map → DataTable-OKDYRW2S.js.map} +0 -0
- /package/dist/{chunk-ZPJMYGEP.js.map → chunk-VPUCTHTY.js.map} +0 -0
package/docs/api/modules.md
CHANGED
package/package.json
CHANGED
|
@@ -234,6 +234,17 @@ function DataTableInternal<TData extends DataRecord>({
|
|
|
234
234
|
// MANDATORY: Get permissions and secure features
|
|
235
235
|
const { permissions, secureFeatures, effectivePageId } = useDataTablePermissions(rbac, requestedFeatures);
|
|
236
236
|
|
|
237
|
+
// Debug logging for creation feature
|
|
238
|
+
if (import.meta.env.MODE === 'development') {
|
|
239
|
+
logger.debug('[DataTableCore] Creation feature check:', {
|
|
240
|
+
'incomingFeatures.creation': incomingFeatures.creation,
|
|
241
|
+
'requestedFeatures.creation': requestedFeatures.creation,
|
|
242
|
+
'secureFeatures.creation': secureFeatures.creation,
|
|
243
|
+
'permissions.canCreate.can': permissions.canCreate.can,
|
|
244
|
+
'onCreateRow prop provided': !!onCreateRow
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
|
|
237
248
|
// ============================================================================
|
|
238
249
|
// UNIFIED STATE MANAGEMENT - Use ONLY useDataTableState for all state
|
|
239
250
|
// ============================================================================
|
|
@@ -640,14 +651,45 @@ function DataTableInternal<TData extends DataRecord>({
|
|
|
640
651
|
// ============================================================================
|
|
641
652
|
|
|
642
653
|
// MANDATORY: Handlers are automatically secured
|
|
643
|
-
const secureHandlers = useMemo(() =>
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
654
|
+
const secureHandlers = useMemo(() => {
|
|
655
|
+
const handlers = {
|
|
656
|
+
onEditRow: permissions.canUpdate.can ? onEditRow : undefined,
|
|
657
|
+
onDeleteRow: permissions.canDelete.can ? onDeleteRow : undefined,
|
|
658
|
+
onCreateRow: permissions.canCreate.can ? onCreateRow : undefined,
|
|
659
|
+
onImport: permissions.canImport.can ? onImport : undefined,
|
|
660
|
+
onExport: permissions.canExport.can ? onExport : undefined,
|
|
661
|
+
onDeleteSelected: permissions.canDelete.can ? onDeleteSelected : undefined,
|
|
662
|
+
};
|
|
663
|
+
|
|
664
|
+
// Debug logging for creation handler
|
|
665
|
+
if (import.meta.env.MODE === 'development') {
|
|
666
|
+
logger.debug('[DataTableCore] Creation handler check:', {
|
|
667
|
+
'permissions.canCreate.can': permissions.canCreate.can,
|
|
668
|
+
'onCreateRow prop provided': !!onCreateRow,
|
|
669
|
+
'secureHandlers.onCreateRow': !!handlers.onCreateRow,
|
|
670
|
+
'secureFeatures.creation': secureFeatures.creation,
|
|
671
|
+
'will pass onCreateRow to toolbar': secureFeatures.creation && !!handlers.onCreateRow
|
|
672
|
+
});
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
return handlers;
|
|
676
|
+
}, [permissions.canUpdate.can, permissions.canDelete.can, permissions.canCreate.can, permissions.canImport.can, permissions.canExport.can, onEditRow, onDeleteRow, onCreateRow, onImport, onExport, onDeleteSelected, secureFeatures.creation, logger]);
|
|
677
|
+
|
|
678
|
+
// Explicit debug log for creation button visibility (easier to spot)
|
|
679
|
+
if (import.meta.env.MODE === 'development') {
|
|
680
|
+
logger.debug('[DataTableCore] ⚠️ CREATION BUTTON DIAGNOSIS:', {
|
|
681
|
+
'✅ permissions.canCreate.can': permissions.canCreate.can,
|
|
682
|
+
'❓ features.creation enabled': secureFeatures.creation,
|
|
683
|
+
'❓ onCreateRow handler provided': !!onCreateRow,
|
|
684
|
+
'❓ secureHandlers.onCreateRow': !!secureHandlers.onCreateRow,
|
|
685
|
+
'🔍 WILL SHOW BUTTON': secureFeatures.creation && permissions.canCreate.can && !!onCreateRow,
|
|
686
|
+
'💡 SOLUTION': !secureFeatures.creation
|
|
687
|
+
? 'Enable features={{ creation: true }} in DataTable props'
|
|
688
|
+
: !onCreateRow
|
|
689
|
+
? 'Provide onCreateRow handler in DataTable props'
|
|
690
|
+
: 'All conditions met - button should be visible'
|
|
691
|
+
});
|
|
692
|
+
}
|
|
651
693
|
|
|
652
694
|
// MANDATORY: Process actions with RBAC checks
|
|
653
695
|
const effectiveActions = useMemo(() => {
|
|
@@ -659,15 +701,24 @@ function DataTableInternal<TData extends DataRecord>({
|
|
|
659
701
|
originalActions: actions.length,
|
|
660
702
|
secureFeatures: {
|
|
661
703
|
editing: secureFeatures.editing,
|
|
662
|
-
deletion: secureFeatures.deletion
|
|
704
|
+
deletion: secureFeatures.deletion,
|
|
705
|
+
creation: secureFeatures.creation,
|
|
706
|
+
import: secureFeatures.import,
|
|
707
|
+
export: secureFeatures.export
|
|
663
708
|
},
|
|
664
709
|
secureHandlers: {
|
|
665
710
|
onEditRow: !!secureHandlers.onEditRow,
|
|
666
|
-
onDeleteRow: !!secureHandlers.onDeleteRow
|
|
711
|
+
onDeleteRow: !!secureHandlers.onDeleteRow,
|
|
712
|
+
onCreateRow: !!secureHandlers.onCreateRow,
|
|
713
|
+
onImport: !!secureHandlers.onImport,
|
|
714
|
+
onExport: !!secureHandlers.onExport
|
|
667
715
|
},
|
|
668
716
|
permissions: {
|
|
669
717
|
canUpdate: permissions.canUpdate.can,
|
|
670
|
-
canDelete: permissions.canDelete.can
|
|
718
|
+
canDelete: permissions.canDelete.can,
|
|
719
|
+
canCreate: permissions.canCreate.can,
|
|
720
|
+
canImport: permissions.canImport.can,
|
|
721
|
+
canExport: permissions.canExport.can
|
|
671
722
|
}
|
|
672
723
|
});
|
|
673
724
|
|
|
@@ -212,7 +212,20 @@ export function DataTableToolbar<TData extends DataRecord>({
|
|
|
212
212
|
)}
|
|
213
213
|
|
|
214
214
|
{/* Row Creation - ONLY if user has create permission */}
|
|
215
|
-
{
|
|
215
|
+
{(() => {
|
|
216
|
+
// Debug logging for creation button visibility
|
|
217
|
+
if (import.meta.env.MODE === 'development') {
|
|
218
|
+
const logger = console;
|
|
219
|
+
logger.debug('[DataTableToolbar] Creation button check:', {
|
|
220
|
+
'features.creation': features.creation,
|
|
221
|
+
'permissions.canCreate.can': permissions.canCreate.can,
|
|
222
|
+
'onCreateRow provided': !!onCreateRow,
|
|
223
|
+
'will show button': features.creation && permissions.canCreate.can && onCreateRow
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return features.creation && permissions.canCreate.can && onCreateRow;
|
|
228
|
+
})() && (
|
|
216
229
|
<Button
|
|
217
230
|
variant="outline"
|
|
218
231
|
onClick={onCreateRow}
|
|
File without changes
|
|
File without changes
|