@jmruthers/pace-core 0.5.98 → 0.5.100

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-YK5UZGRI.js → DataTable-MHN7PNH3.js} +2 -2
  2. package/dist/{chunk-UWBDIT5N.js → chunk-OLZSC5EH.js} +102 -14
  3. package/dist/{chunk-UWBDIT5N.js.map → chunk-OLZSC5EH.js.map} +1 -1
  4. package/dist/{chunk-DIKQ7AB6.js → chunk-Z4HVIZSK.js} +2 -2
  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/EventLogoProps.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/InactivityWarningModalProps.md +1 -1
  45. package/docs/api/interfaces/InputProps.md +1 -1
  46. package/docs/api/interfaces/LabelProps.md +1 -1
  47. package/docs/api/interfaces/LoginFormProps.md +1 -1
  48. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  49. package/docs/api/interfaces/NavigationContextType.md +1 -1
  50. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  51. package/docs/api/interfaces/NavigationItem.md +1 -1
  52. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  53. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  54. package/docs/api/interfaces/Organisation.md +1 -1
  55. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  56. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  57. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  58. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  59. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  60. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  61. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  62. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  63. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  64. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  65. package/docs/api/interfaces/PaletteData.md +1 -1
  66. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  67. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  68. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  69. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  70. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  71. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  72. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  73. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  74. package/docs/api/interfaces/RBACConfig.md +1 -1
  75. package/docs/api/interfaces/RBACLogger.md +1 -1
  76. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  77. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  78. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  79. package/docs/api/interfaces/RouteConfig.md +1 -1
  80. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  81. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  82. package/docs/api/interfaces/StorageConfig.md +1 -1
  83. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  84. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  85. package/docs/api/interfaces/StorageListOptions.md +1 -1
  86. package/docs/api/interfaces/StorageListResult.md +1 -1
  87. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  88. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  89. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  90. package/docs/api/interfaces/StyleImport.md +1 -1
  91. package/docs/api/interfaces/SwitchProps.md +1 -1
  92. package/docs/api/interfaces/ToastActionElement.md +1 -1
  93. package/docs/api/interfaces/ToastProps.md +1 -1
  94. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  95. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  96. package/docs/api/interfaces/UseEventLogoOptions.md +1 -1
  97. package/docs/api/interfaces/UseEventLogoReturn.md +1 -1
  98. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  99. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  100. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  101. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  102. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  103. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  104. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
  105. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  106. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  107. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  108. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  109. package/docs/api/interfaces/UserEventAccess.md +1 -1
  110. package/docs/api/interfaces/UserMenuProps.md +1 -1
  111. package/docs/api/interfaces/UserProfile.md +1 -1
  112. package/docs/api/modules.md +2 -2
  113. package/package.json +1 -1
  114. package/src/components/DataTable/components/DataTableCore.tsx +32 -3
  115. package/src/components/DataTable/components/DataTableModals.tsx +92 -11
  116. /package/dist/{DataTable-YK5UZGRI.js.map → DataTable-MHN7PNH3.js.map} +0 -0
  117. /package/dist/{chunk-DIKQ7AB6.js.map → chunk-Z4HVIZSK.js.map} +0 -0
@@ -54,7 +54,7 @@ import {
54
54
  sortHierarchicalDataWithSorting,
55
55
  validateHierarchicalData,
56
56
  validatePaginationConfig
57
- } from "./chunk-UWBDIT5N.js";
57
+ } from "./chunk-OLZSC5EH.js";
58
58
  import "./chunk-2KLAOD4M.js";
59
59
  import "./chunk-S63MFSY6.js";
60
60
  import "./chunk-Q7APDV6H.js";
@@ -157,4 +157,4 @@ export {
157
157
  validateHierarchicalData,
158
158
  validatePaginationConfig
159
159
  };
160
- //# sourceMappingURL=DataTable-YK5UZGRI.js.map
160
+ //# sourceMappingURL=DataTable-MHN7PNH3.js.map
@@ -8916,31 +8916,74 @@ function ImportModal({ isOpen, onClose, onImport, config = {} }) {
8916
8916
  import { Fragment as Fragment3, jsx as jsx19 } from "react/jsx-runtime";
8917
8917
  function mapCSVToTableColumns(csvData, columns) {
8918
8918
  const columnMap = /* @__PURE__ */ new Map();
8919
+ console.log("[mapCSVToTableColumns] Building column map from", columns.length, "column definitions");
8919
8920
  columns.forEach((col) => {
8920
8921
  const fieldName = col.editAccessorKey || col.accessorKey || col.id;
8921
8922
  const header = typeof col.header === "string" ? col.header : "";
8922
8923
  if (fieldName && header) {
8923
- columnMap.set(header.toLowerCase(), fieldName);
8924
+ const headerLower = header.toLowerCase();
8925
+ columnMap.set(headerLower, fieldName);
8926
+ console.log(`[mapCSVToTableColumns] Mapped "${header}" -> "${fieldName}"`);
8924
8927
  const colId = col.id || col.accessorKey;
8925
8928
  if (colId && colId !== header && colId !== fieldName) {
8926
8929
  columnMap.set(colId.toLowerCase(), fieldName);
8930
+ console.log(`[mapCSVToTableColumns] Also mapped "${colId}" -> "${fieldName}"`);
8927
8931
  }
8928
8932
  if (col.editAccessorKey && header) {
8933
+ const editAccessorKey = col.editAccessorKey;
8929
8934
  const idColumnHeader = `${header} (ID)`;
8930
- columnMap.set(idColumnHeader.toLowerCase(), col.editAccessorKey);
8931
- columnMap.set(col.editAccessorKey.toLowerCase(), col.editAccessorKey);
8935
+ columnMap.set(idColumnHeader.toLowerCase(), editAccessorKey);
8936
+ console.log(`[mapCSVToTableColumns] Mapped ID column "${idColumnHeader}" -> "${editAccessorKey}"`);
8937
+ columnMap.set(editAccessorKey.toLowerCase(), editAccessorKey);
8938
+ console.log(`[mapCSVToTableColumns] Also mapped "${editAccessorKey}" -> "${editAccessorKey}"`);
8932
8939
  }
8940
+ } else {
8941
+ console.warn("[mapCSVToTableColumns] Skipping column with missing fieldName or header:", col);
8933
8942
  }
8934
8943
  });
8935
- return csvData.map((row) => {
8944
+ if (csvData.length === 0) {
8945
+ console.warn("[mapCSVToTableColumns] No CSV data to map");
8946
+ return [];
8947
+ }
8948
+ const csvHeaders = Object.keys(csvData[0]);
8949
+ console.log("[mapCSVToTableColumns] CSV headers found:", csvHeaders);
8950
+ console.log("[mapCSVToTableColumns] Column map size:", columnMap.size);
8951
+ const mappedData = csvData.map((row, index) => {
8936
8952
  const mappedRow = {};
8937
8953
  Object.keys(row).forEach((csvHeader) => {
8938
8954
  const csvHeaderLower = csvHeader.toLowerCase();
8939
- const fieldName = columnMap.get(csvHeaderLower) || csvHeaderLower;
8940
- mappedRow[fieldName] = row[csvHeader];
8955
+ let fieldName = columnMap.get(csvHeaderLower);
8956
+ if (!fieldName) {
8957
+ for (const [mapKey, mapValue] of columnMap.entries()) {
8958
+ const keyWithSpace = ` ${mapKey}`;
8959
+ if (csvHeaderLower === mapKey || csvHeaderLower.endsWith(keyWithSpace)) {
8960
+ fieldName = mapValue;
8961
+ if (index === 0) {
8962
+ console.log(`[mapCSVToTableColumns] Flexible match: "${csvHeader}" -> "${mapValue}" (matched "${mapKey}")`);
8963
+ }
8964
+ break;
8965
+ }
8966
+ }
8967
+ }
8968
+ if (fieldName) {
8969
+ mappedRow[fieldName] = row[csvHeader];
8970
+ if (index === 0) {
8971
+ console.log(`[mapCSVToTableColumns] Row 0: "${csvHeader}" -> "${fieldName}"`);
8972
+ }
8973
+ } else {
8974
+ mappedRow[csvHeaderLower] = row[csvHeader];
8975
+ if (index === 0) {
8976
+ console.warn(`[mapCSVToTableColumns] No mapping found for "${csvHeader}", using as-is`);
8977
+ }
8978
+ }
8941
8979
  });
8942
8980
  return mappedRow;
8943
8981
  });
8982
+ console.log("[mapCSVToTableColumns] Mapped", mappedData.length, "rows");
8983
+ if (mappedData.length > 0) {
8984
+ console.log("[mapCSVToTableColumns] First mapped row keys:", Object.keys(mappedData[0]));
8985
+ }
8986
+ return mappedData;
8944
8987
  }
8945
8988
  function DataTableModals({
8946
8989
  showImportModal,
@@ -8967,10 +9010,30 @@ function DataTableModals({
8967
9010
  isOpen: showImportModal,
8968
9011
  onClose: onCloseImportModal,
8969
9012
  onImport: async (rawData) => {
8970
- const mappedData = columns ? mapCSVToTableColumns(rawData, columns) : rawData;
8971
- const result = onImport(mappedData);
8972
- if (result && typeof result.then === "function") {
8973
- await result;
9013
+ try {
9014
+ let mappedData;
9015
+ if (columns && columns.length > 0) {
9016
+ console.log("[DataTableModals] Mapping CSV data with", columns.length, "column definitions");
9017
+ console.log("[DataTableModals] Raw CSV headers:", rawData.length > 0 ? Object.keys(rawData[0]) : []);
9018
+ mappedData = mapCSVToTableColumns(rawData, columns);
9019
+ console.log("[DataTableModals] Mapped data sample:", mappedData.length > 0 ? mappedData[0] : null);
9020
+ } else {
9021
+ console.warn("[DataTableModals] No columns provided for mapping, using raw data");
9022
+ mappedData = rawData;
9023
+ }
9024
+ if (!onImport) {
9025
+ console.error("[DataTableModals] onImport callback is not provided");
9026
+ throw new Error("Import handler is not configured. Please provide an onImport callback.");
9027
+ }
9028
+ console.log("[DataTableModals] Calling onImport with", mappedData.length, "rows");
9029
+ const result = onImport(mappedData);
9030
+ if (result && typeof result.then === "function") {
9031
+ await result;
9032
+ }
9033
+ console.log("[DataTableModals] Import completed successfully");
9034
+ } catch (error) {
9035
+ console.error("[DataTableModals] Import error:", error);
9036
+ throw error;
8974
9037
  }
8975
9038
  },
8976
9039
  config: importModalConfig
@@ -12009,10 +12072,35 @@ function DataTableInternal({
12009
12072
  onCloseImportModal: () => stateActions.setImportModal(false),
12010
12073
  onImport: async (data2) => {
12011
12074
  if (onImport) {
12012
- const result = onImport(data2);
12013
- if (result && typeof result.then === "function") {
12014
- await result;
12075
+ try {
12076
+ console.log("[DataTableCore] onImport called with", data2.length, "rows");
12077
+ const result = onImport(data2);
12078
+ if (result && typeof result.then === "function") {
12079
+ await result;
12080
+ }
12081
+ console.log("[DataTableCore] onImport completed successfully");
12082
+ toast({
12083
+ title: "Import Successful",
12084
+ description: `Successfully imported ${data2.length} ${data2.length === 1 ? "row" : "rows"}`,
12085
+ variant: "default"
12086
+ });
12087
+ } catch (error) {
12088
+ console.error("[DataTableCore] Import error:", error);
12089
+ toast({
12090
+ title: "Import Failed",
12091
+ description: error instanceof Error ? error.message : "Failed to import data",
12092
+ variant: "destructive"
12093
+ });
12094
+ return;
12015
12095
  }
12096
+ } else {
12097
+ console.error("[DataTableCore] onImport handler not provided");
12098
+ toast({
12099
+ title: "Import Not Configured",
12100
+ description: "Import functionality requires an onImport handler to be provided.",
12101
+ variant: "destructive"
12102
+ });
12103
+ return;
12016
12104
  }
12017
12105
  stateActions.setImportModal(false);
12018
12106
  },
@@ -12270,4 +12358,4 @@ lodash/lodash.js:
12270
12358
  * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
12271
12359
  *)
12272
12360
  */
12273
- //# sourceMappingURL=chunk-UWBDIT5N.js.map
12361
+ //# sourceMappingURL=chunk-OLZSC5EH.js.map