@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
@@ -54,7 +54,7 @@ import {
54
54
  sortHierarchicalDataWithSorting,
55
55
  validateHierarchicalData,
56
56
  validatePaginationConfig
57
- } from "./chunk-DHMFMXFV.js";
57
+ } from "./chunk-JJVLYIEO.js";
58
58
  import "./chunk-35ZDPMBM.js";
59
59
  import "./chunk-WP5I5GLN.js";
60
60
  import "./chunk-3DBFLLLU.js";
@@ -157,4 +157,4 @@ export {
157
157
  validateHierarchicalData,
158
158
  validatePaginationConfig
159
159
  };
160
- //# sourceMappingURL=DataTable-WTS4IRF2.js.map
160
+ //# sourceMappingURL=DataTable-IHD4JP4W.js.map
@@ -25,7 +25,7 @@ import {
25
25
  SelectSeparator,
26
26
  SelectTrigger,
27
27
  SelectValue
28
- } from "./chunk-DHMFMXFV.js";
28
+ } from "./chunk-JJVLYIEO.js";
29
29
  import {
30
30
  useCan,
31
31
  usePermissions,
@@ -4566,4 +4566,4 @@ export {
4566
4566
  PublicPageDiagnostic,
4567
4567
  PublicPageContextChecker
4568
4568
  };
4569
- //# sourceMappingURL=chunk-ZPJMYGEP.js.map
4569
+ //# sourceMappingURL=chunk-HC7AOIC2.js.map
@@ -7648,7 +7648,12 @@ function SelectEditField2({
7648
7648
  const [isOpen, setIsOpen] = React10.useState(false);
7649
7649
  const [showCreateOption, setShowCreateOption] = React10.useState(false);
7650
7650
  React10.useEffect(() => {
7651
- if (!isOpen || !isSearchable || !isCreatable) return;
7651
+ if (!isOpen || !isSearchable || !isCreatable || !columnDef.onCreateNew) {
7652
+ if (!isOpen || !isCreatable || !columnDef.onCreateNew) {
7653
+ setShowCreateOption(false);
7654
+ }
7655
+ return;
7656
+ }
7652
7657
  const findAndAttachSearchInput = () => {
7653
7658
  let searchInput = null;
7654
7659
  if (selectRef.current) {
@@ -7681,7 +7686,19 @@ function SelectEditField2({
7681
7686
  return false;
7682
7687
  };
7683
7688
  const hasMatch = (columnDef.fieldOptions || []).some(checkMatch);
7684
- setShowCreateOption(!hasMatch);
7689
+ const shouldShow = !hasMatch && isCreatable && !!columnDef.onCreateNew;
7690
+ if (import.meta.env.MODE === "development" && isCreatable) {
7691
+ logger.debug("[SelectEditField] Creatable select check:", {
7692
+ searchTerm: currentSearch,
7693
+ searchLower,
7694
+ hasMatch,
7695
+ isCreatable,
7696
+ hasOnCreateNew: !!columnDef.onCreateNew,
7697
+ shouldShow,
7698
+ fieldOptionsCount: columnDef.fieldOptions?.length || 0
7699
+ });
7700
+ }
7701
+ setShowCreateOption(shouldShow);
7685
7702
  } else {
7686
7703
  setShowCreateOption(false);
7687
7704
  }
@@ -7702,7 +7719,8 @@ function SelectEditField2({
7702
7719
  return false;
7703
7720
  };
7704
7721
  const hasMatch = (columnDef.fieldOptions || []).some(checkMatch);
7705
- setShowCreateOption(!hasMatch);
7722
+ const shouldShow = !hasMatch && isCreatable && !!columnDef.onCreateNew;
7723
+ setShowCreateOption(shouldShow);
7706
7724
  } else {
7707
7725
  setShowCreateOption(false);
7708
7726
  }
@@ -7724,7 +7742,7 @@ function SelectEditField2({
7724
7742
  };
7725
7743
  }
7726
7744
  return cleanup;
7727
- }, [isOpen, isSearchable, isCreatable, columnDef.fieldOptions]);
7745
+ }, [isOpen, isSearchable, isCreatable, columnDef.fieldOptions, columnDef.onCreateNew]);
7728
7746
  const handleCreateNew = React10.useCallback(async () => {
7729
7747
  if (!isCreatable || !columnDef.onCreateNew || !searchTerm.trim()) return;
7730
7748
  try {
@@ -7782,7 +7800,7 @@ function SelectEditField2({
7782
7800
  }
7783
7801
  return null;
7784
7802
  }),
7785
- showCreateOption && isCreatable && searchTerm.trim() && /* @__PURE__ */ jsxs10(
7803
+ showCreateOption && isCreatable && searchTerm.trim() && columnDef.onCreateNew && /* @__PURE__ */ jsxs10(
7786
7804
  SelectItem,
7787
7805
  {
7788
7806
  value: `__create_new__${searchTerm}`,
@@ -11714,6 +11732,15 @@ function DataTableInternal({
11714
11732
  [incomingFeatures]
11715
11733
  );
11716
11734
  const { permissions, secureFeatures, effectivePageId } = useDataTablePermissions(rbac, requestedFeatures);
11735
+ if (import.meta.env.MODE === "development") {
11736
+ logger.debug("[DataTableCore] Creation feature check:", {
11737
+ "incomingFeatures.creation": incomingFeatures.creation,
11738
+ "requestedFeatures.creation": requestedFeatures.creation,
11739
+ "secureFeatures.creation": secureFeatures.creation,
11740
+ "permissions.canCreate.can": permissions.canCreate.can,
11741
+ "onCreateRow prop provided": !!onCreateRow
11742
+ });
11743
+ }
11717
11744
  const effectiveColumnOrder = useEffectiveColumnOrder({
11718
11745
  columns,
11719
11746
  externalColumnOrder,
@@ -11968,29 +11995,60 @@ function DataTableInternal({
11968
11995
  fetchServerData,
11969
11996
  cleanup
11970
11997
  });
11971
- const secureHandlers = useMemo14(() => ({
11972
- onEditRow: permissions.canUpdate.can ? onEditRow : void 0,
11973
- onDeleteRow: permissions.canDelete.can ? onDeleteRow : void 0,
11974
- onCreateRow: permissions.canCreate.can ? onCreateRow : void 0,
11975
- onImport: permissions.canImport.can ? onImport : void 0,
11976
- onExport: permissions.canExport.can ? onExport : void 0,
11977
- onDeleteSelected: permissions.canDelete.can ? onDeleteSelected : void 0
11978
- }), [permissions.canUpdate.can, permissions.canDelete.can, permissions.canCreate.can, permissions.canImport.can, permissions.canExport.can, onEditRow, onDeleteRow, onCreateRow, onImport, onExport, onDeleteSelected]);
11998
+ const secureHandlers = useMemo14(() => {
11999
+ const handlers = {
12000
+ onEditRow: permissions.canUpdate.can ? onEditRow : void 0,
12001
+ onDeleteRow: permissions.canDelete.can ? onDeleteRow : void 0,
12002
+ onCreateRow: permissions.canCreate.can ? onCreateRow : void 0,
12003
+ onImport: permissions.canImport.can ? onImport : void 0,
12004
+ onExport: permissions.canExport.can ? onExport : void 0,
12005
+ onDeleteSelected: permissions.canDelete.can ? onDeleteSelected : void 0
12006
+ };
12007
+ if (import.meta.env.MODE === "development") {
12008
+ logger.debug("[DataTableCore] Creation handler check:", {
12009
+ "permissions.canCreate.can": permissions.canCreate.can,
12010
+ "onCreateRow prop provided": !!onCreateRow,
12011
+ "secureHandlers.onCreateRow": !!handlers.onCreateRow,
12012
+ "secureFeatures.creation": secureFeatures.creation,
12013
+ "will pass onCreateRow to toolbar": secureFeatures.creation && !!handlers.onCreateRow
12014
+ });
12015
+ }
12016
+ return handlers;
12017
+ }, [permissions.canUpdate.can, permissions.canDelete.can, permissions.canCreate.can, permissions.canImport.can, permissions.canExport.can, onEditRow, onDeleteRow, onCreateRow, onImport, onExport, onDeleteSelected, secureFeatures.creation, logger]);
12018
+ if (import.meta.env.MODE === "development") {
12019
+ logger.debug("[DataTableCore] \u26A0\uFE0F CREATION BUTTON DIAGNOSIS:", {
12020
+ "\u2705 permissions.canCreate.can": permissions.canCreate.can,
12021
+ "\u2753 features.creation enabled": secureFeatures.creation,
12022
+ "\u2753 onCreateRow handler provided": !!onCreateRow,
12023
+ "\u2753 secureHandlers.onCreateRow": !!secureHandlers.onCreateRow,
12024
+ "\u{1F50D} WILL SHOW BUTTON": secureFeatures.creation && permissions.canCreate.can && !!onCreateRow,
12025
+ "\u{1F4A1} SOLUTION": !secureFeatures.creation ? "Enable features={{ creation: true }} in DataTable props" : !onCreateRow ? "Provide onCreateRow handler in DataTable props" : "All conditions met - button should be visible"
12026
+ });
12027
+ }
11979
12028
  const effectiveActions = useMemo14(() => {
11980
12029
  const result = [...actions];
11981
12030
  logger.debug("Action Configuration Debug:", {
11982
12031
  originalActions: actions.length,
11983
12032
  secureFeatures: {
11984
12033
  editing: secureFeatures.editing,
11985
- deletion: secureFeatures.deletion
12034
+ deletion: secureFeatures.deletion,
12035
+ creation: secureFeatures.creation,
12036
+ import: secureFeatures.import,
12037
+ export: secureFeatures.export
11986
12038
  },
11987
12039
  secureHandlers: {
11988
12040
  onEditRow: !!secureHandlers.onEditRow,
11989
- onDeleteRow: !!secureHandlers.onDeleteRow
12041
+ onDeleteRow: !!secureHandlers.onDeleteRow,
12042
+ onCreateRow: !!secureHandlers.onCreateRow,
12043
+ onImport: !!secureHandlers.onImport,
12044
+ onExport: !!secureHandlers.onExport
11990
12045
  },
11991
12046
  permissions: {
11992
12047
  canUpdate: permissions.canUpdate.can,
11993
- canDelete: permissions.canDelete.can
12048
+ canDelete: permissions.canDelete.can,
12049
+ canCreate: permissions.canCreate.can,
12050
+ canImport: permissions.canImport.can,
12051
+ canExport: permissions.canExport.can
11994
12052
  }
11995
12053
  });
11996
12054
  if (secureFeatures.editing && secureHandlers.onEditRow && !result.some((a) => a.label === "Edit")) {
@@ -12756,4 +12814,4 @@ lodash/lodash.js:
12756
12814
  * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
12757
12815
  *)
12758
12816
  */
12759
- //# sourceMappingURL=chunk-DHMFMXFV.js.map
12817
+ //# sourceMappingURL=chunk-JJVLYIEO.js.map