@jmruthers/pace-core 0.5.123 → 0.5.125

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.
Files changed (117) hide show
  1. package/dist/{DataTable-WTS4IRF2.js → DataTable-IHD4JP4W.js} +2 -2
  2. package/dist/{chunk-ZPJMYGEP.js → chunk-HC7AOIC2.js} +2 -2
  3. package/dist/{chunk-DHMFMXFV.js → chunk-JJVLYIEO.js} +75 -17
  4. package/dist/chunk-JJVLYIEO.js.map +1 -0
  5. package/dist/components.js +2 -2
  6. package/dist/index.js +2 -2
  7. package/dist/utils.js +1 -1
  8. package/docs/api/classes/ColumnFactory.md +1 -1
  9. package/docs/api/classes/ErrorBoundary.md +1 -1
  10. package/docs/api/classes/InvalidScopeError.md +1 -1
  11. package/docs/api/classes/MissingUserContextError.md +1 -1
  12. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  13. package/docs/api/classes/PermissionDeniedError.md +1 -1
  14. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  15. package/docs/api/classes/RBACAuditManager.md +1 -1
  16. package/docs/api/classes/RBACCache.md +1 -1
  17. package/docs/api/classes/RBACEngine.md +1 -1
  18. package/docs/api/classes/RBACError.md +1 -1
  19. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  20. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  21. package/docs/api/classes/StorageUtils.md +1 -1
  22. package/docs/api/enums/FileCategory.md +1 -1
  23. package/docs/api/interfaces/AggregateConfig.md +1 -1
  24. package/docs/api/interfaces/ButtonProps.md +1 -1
  25. package/docs/api/interfaces/CardProps.md +1 -1
  26. package/docs/api/interfaces/ColorPalette.md +1 -1
  27. package/docs/api/interfaces/ColorShade.md +1 -1
  28. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  29. package/docs/api/interfaces/DataRecord.md +1 -1
  30. package/docs/api/interfaces/DataTableAction.md +1 -1
  31. package/docs/api/interfaces/DataTableColumn.md +1 -1
  32. package/docs/api/interfaces/DataTableProps.md +1 -1
  33. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  34. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  35. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  36. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  37. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  38. package/docs/api/interfaces/FileMetadata.md +1 -1
  39. package/docs/api/interfaces/FileReference.md +1 -1
  40. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  41. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  42. package/docs/api/interfaces/FileUploadProps.md +1 -1
  43. package/docs/api/interfaces/FooterProps.md +1 -1
  44. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  45. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  46. package/docs/api/interfaces/InputProps.md +1 -1
  47. package/docs/api/interfaces/LabelProps.md +1 -1
  48. package/docs/api/interfaces/LoginFormProps.md +1 -1
  49. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  50. package/docs/api/interfaces/NavigationContextType.md +1 -1
  51. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  52. package/docs/api/interfaces/NavigationItem.md +1 -1
  53. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  54. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  55. package/docs/api/interfaces/Organisation.md +1 -1
  56. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  57. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  58. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  59. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  60. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  61. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  62. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  63. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  64. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  65. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  66. package/docs/api/interfaces/PaletteData.md +1 -1
  67. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  68. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  69. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  70. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  71. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  72. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  73. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  74. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  75. package/docs/api/interfaces/RBACConfig.md +1 -1
  76. package/docs/api/interfaces/RBACLogger.md +1 -1
  77. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  78. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  79. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  80. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  81. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  82. package/docs/api/interfaces/RouteConfig.md +1 -1
  83. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  84. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  85. package/docs/api/interfaces/StorageConfig.md +1 -1
  86. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  87. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  88. package/docs/api/interfaces/StorageListOptions.md +1 -1
  89. package/docs/api/interfaces/StorageListResult.md +1 -1
  90. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  91. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  92. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  93. package/docs/api/interfaces/StyleImport.md +1 -1
  94. package/docs/api/interfaces/SwitchProps.md +1 -1
  95. package/docs/api/interfaces/ToastActionElement.md +1 -1
  96. package/docs/api/interfaces/ToastProps.md +1 -1
  97. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  98. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  99. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  100. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  101. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  102. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  103. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
  104. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  105. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  106. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  107. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  108. package/docs/api/interfaces/UserEventAccess.md +1 -1
  109. package/docs/api/interfaces/UserMenuProps.md +1 -1
  110. package/docs/api/interfaces/UserProfile.md +1 -1
  111. package/docs/api/modules.md +2 -2
  112. package/package.json +1 -1
  113. package/src/components/DataTable/components/DataTableCore.tsx +62 -11
  114. package/src/components/DataTable/components/UnifiedTableBody.tsx +27 -5
  115. package/dist/chunk-DHMFMXFV.js.map +0 -1
  116. /package/dist/{DataTable-WTS4IRF2.js.map → DataTable-IHD4JP4W.js.map} +0 -0
  117. /package/dist/{chunk-ZPJMYGEP.js.map → chunk-HC7AOIC2.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / SecureDataProviderProps
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / SecureDataProviderProps
2
2
 
3
3
  # Interface: SecureDataProviderProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / StorageConfig
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / StorageConfig
2
2
 
3
3
  # Interface: StorageConfig
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / StorageFileInfo
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / StorageFileInfo
2
2
 
3
3
  # Interface: StorageFileInfo
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / StorageFileMetadata
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / StorageFileMetadata
2
2
 
3
3
  # Interface: StorageFileMetadata
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / StorageListOptions
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / StorageListOptions
2
2
 
3
3
  # Interface: StorageListOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / StorageListResult
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / StorageListResult
2
2
 
3
3
  # Interface: StorageListResult
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / StorageUploadOptions
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / StorageUploadOptions
2
2
 
3
3
  # Interface: StorageUploadOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / StorageUploadResult
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / StorageUploadResult
2
2
 
3
3
  # Interface: StorageUploadResult
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / StorageUrlOptions
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / StorageUrlOptions
2
2
 
3
3
  # Interface: StorageUrlOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / StyleImport
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / StyleImport
2
2
 
3
3
  # Interface: StyleImport
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / SwitchProps
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / SwitchProps
2
2
 
3
3
  # Interface: SwitchProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / ToastActionElement
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / ToastActionElement
2
2
 
3
3
  # Interface: ToastActionElement
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / ToastProps
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / ToastProps
2
2
 
3
3
  # Interface: ToastProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UnifiedAuthContextType
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UnifiedAuthContextType
2
2
 
3
3
  # Interface: UnifiedAuthContextType
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UnifiedAuthProviderProps
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UnifiedAuthProviderProps
2
2
 
3
3
  # Interface: UnifiedAuthProviderProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UseInactivityTrackerOptions
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UseInactivityTrackerOptions
2
2
 
3
3
  # Interface: UseInactivityTrackerOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UseInactivityTrackerReturn
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UseInactivityTrackerReturn
2
2
 
3
3
  # Interface: UseInactivityTrackerReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UsePublicEventOptions
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UsePublicEventOptions
2
2
 
3
3
  # Interface: UsePublicEventOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UsePublicEventReturn
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UsePublicEventReturn
2
2
 
3
3
  # Interface: UsePublicEventReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UsePublicFileDisplayOptions
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UsePublicFileDisplayOptions
2
2
 
3
3
  # Interface: UsePublicFileDisplayOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UsePublicFileDisplayReturn
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UsePublicFileDisplayReturn
2
2
 
3
3
  # Interface: UsePublicFileDisplayReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UsePublicRouteParamsReturn
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UsePublicRouteParamsReturn
2
2
 
3
3
  # Interface: UsePublicRouteParamsReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UseResolvedScopeOptions
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UseResolvedScopeOptions
2
2
 
3
3
  # Interface: UseResolvedScopeOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UseResolvedScopeReturn
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UseResolvedScopeReturn
2
2
 
3
3
  # Interface: UseResolvedScopeReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UserEventAccess
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UserEventAccess
2
2
 
3
3
  # Interface: UserEventAccess
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UserMenuProps
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UserMenuProps
2
2
 
3
3
  # Interface: UserMenuProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.123](../README.md) / [Exports](../modules.md) / UserProfile
1
+ [@jmruthers/pace-core - v0.5.125](../README.md) / [Exports](../modules.md) / UserProfile
2
2
 
3
3
  # Interface: UserProfile
4
4
 
@@ -1,6 +1,6 @@
1
- [@jmruthers/pace-core - v0.5.123](README.md) / Exports
1
+ [@jmruthers/pace-core - v0.5.125](README.md) / Exports
2
2
 
3
- # @jmruthers/pace-core - v0.5.123
3
+ # @jmruthers/pace-core - v0.5.125
4
4
 
5
5
  **`File`**
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jmruthers/pace-core",
3
- "version": "0.5.123",
3
+ "version": "0.5.125",
4
4
  "description": "Clean, modern React component library with Tailwind v4 styling and native utilities",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -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
- onEditRow: permissions.canUpdate.can ? onEditRow : undefined,
645
- onDeleteRow: permissions.canDelete.can ? onDeleteRow : undefined,
646
- onCreateRow: permissions.canCreate.can ? onCreateRow : undefined,
647
- onImport: permissions.canImport.can ? onImport : undefined,
648
- onExport: permissions.canExport.can ? onExport : undefined,
649
- onDeleteSelected: permissions.canDelete.can ? onDeleteSelected : undefined,
650
- }), [permissions.canUpdate.can, permissions.canDelete.can, permissions.canCreate.can, permissions.canImport.can, permissions.canExport.can, onEditRow, onDeleteRow, onCreateRow, onImport, onExport, onDeleteSelected]);
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
 
@@ -148,7 +148,13 @@ function SelectEditField<TData extends DataRecord>({
148
148
 
149
149
  // Monitor search input value via DOM events to detect when user types
150
150
  React.useEffect(() => {
151
- if (!isOpen || !isSearchable || !isCreatable) return;
151
+ if (!isOpen || !isSearchable || !isCreatable || !columnDef.onCreateNew) {
152
+ // Reset showCreateOption when conditions aren't met
153
+ if (!isOpen || !isCreatable || !columnDef.onCreateNew) {
154
+ setShowCreateOption(false);
155
+ }
156
+ return;
157
+ }
152
158
 
153
159
  // Function to find and attach listener to search input
154
160
  const findAndAttachSearchInput = (): (() => void) | null => {
@@ -206,7 +212,22 @@ function SelectEditField<TData extends DataRecord>({
206
212
  };
207
213
 
208
214
  const hasMatch = (columnDef.fieldOptions || []).some(checkMatch);
209
- setShowCreateOption(!hasMatch);
215
+ const shouldShow = !hasMatch && isCreatable && !!columnDef.onCreateNew;
216
+
217
+ // Debug logging for creatable select
218
+ if (import.meta.env.MODE === 'development' && isCreatable) {
219
+ logger.debug('[SelectEditField] Creatable select check:', {
220
+ searchTerm: currentSearch,
221
+ searchLower,
222
+ hasMatch,
223
+ isCreatable,
224
+ hasOnCreateNew: !!columnDef.onCreateNew,
225
+ shouldShow,
226
+ fieldOptionsCount: columnDef.fieldOptions?.length || 0
227
+ });
228
+ }
229
+
230
+ setShowCreateOption(shouldShow);
210
231
  } else {
211
232
  setShowCreateOption(false);
212
233
  }
@@ -238,7 +259,8 @@ function SelectEditField<TData extends DataRecord>({
238
259
  };
239
260
 
240
261
  const hasMatch = (columnDef.fieldOptions || []).some(checkMatch);
241
- setShowCreateOption(!hasMatch);
262
+ const shouldShow = !hasMatch && isCreatable && !!columnDef.onCreateNew;
263
+ setShowCreateOption(shouldShow);
242
264
  } else {
243
265
  setShowCreateOption(false);
244
266
  }
@@ -268,7 +290,7 @@ function SelectEditField<TData extends DataRecord>({
268
290
  }
269
291
 
270
292
  return cleanup;
271
- }, [isOpen, isSearchable, isCreatable, columnDef.fieldOptions]);
293
+ }, [isOpen, isSearchable, isCreatable, columnDef.fieldOptions, columnDef.onCreateNew]);
272
294
 
273
295
  const handleCreateNew = React.useCallback(async () => {
274
296
  if (!isCreatable || !columnDef.onCreateNew || !searchTerm.trim()) return;
@@ -344,7 +366,7 @@ function SelectEditField<TData extends DataRecord>({
344
366
 
345
367
  return null;
346
368
  })}
347
- {showCreateOption && isCreatable && searchTerm.trim() && (
369
+ {showCreateOption && isCreatable && searchTerm.trim() && columnDef.onCreateNew && (
348
370
  <SelectItem
349
371
  key="__create_new__"
350
372
  value={`__create_new__${searchTerm}`}