@jmruthers/pace-core 0.5.97 → 0.5.98
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-FB22ES46.js → DataTable-YK5UZGRI.js} +4 -2
- package/dist/{chunk-UBPRDNPY.js → chunk-DIKQ7AB6.js} +2 -2
- package/dist/{chunk-QX5I62KP.js → chunk-UWBDIT5N.js} +83 -7
- package/dist/{chunk-QX5I62KP.js.map → chunk-UWBDIT5N.js.map} +1 -1
- 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/EventLogoProps.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/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/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/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/UseEventLogoOptions.md +1 -1
- package/docs/api/interfaces/UseEventLogoReturn.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/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 +28 -13
- package/src/components/DataTable/utils/exportUtils.ts +115 -0
- /package/dist/{DataTable-FB22ES46.js.map → DataTable-YK5UZGRI.js.map} +0 -0
- /package/dist/{chunk-UBPRDNPY.js.map → chunk-DIKQ7AB6.js.map} +0 -0
|
@@ -33,6 +33,7 @@ import {
|
|
|
33
33
|
createHierarchicalStructure,
|
|
34
34
|
defaultDataTableFeatures,
|
|
35
35
|
exportToCSV,
|
|
36
|
+
exportToCSVWithTableRows,
|
|
36
37
|
generateCSVContent,
|
|
37
38
|
getAriaSortValue,
|
|
38
39
|
getCellRenderer,
|
|
@@ -53,7 +54,7 @@ import {
|
|
|
53
54
|
sortHierarchicalDataWithSorting,
|
|
54
55
|
validateHierarchicalData,
|
|
55
56
|
validatePaginationConfig
|
|
56
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-UWBDIT5N.js";
|
|
57
58
|
import "./chunk-2KLAOD4M.js";
|
|
58
59
|
import "./chunk-S63MFSY6.js";
|
|
59
60
|
import "./chunk-Q7APDV6H.js";
|
|
@@ -130,6 +131,7 @@ export {
|
|
|
130
131
|
defaultDataTableFeatures,
|
|
131
132
|
determinePaginationMode,
|
|
132
133
|
exportToCSV,
|
|
134
|
+
exportToCSVWithTableRows,
|
|
133
135
|
generateCSVContent,
|
|
134
136
|
getAriaSortValue,
|
|
135
137
|
getCellRenderer,
|
|
@@ -155,4 +157,4 @@ export {
|
|
|
155
157
|
validateHierarchicalData,
|
|
156
158
|
validatePaginationConfig
|
|
157
159
|
};
|
|
158
|
-
//# sourceMappingURL=DataTable-
|
|
160
|
+
//# sourceMappingURL=DataTable-YK5UZGRI.js.map
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
SelectSeparator,
|
|
26
26
|
SelectTrigger,
|
|
27
27
|
SelectValue
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-UWBDIT5N.js";
|
|
29
29
|
import {
|
|
30
30
|
isPermitted,
|
|
31
31
|
isSuperAdmin
|
|
@@ -4799,4 +4799,4 @@ export {
|
|
|
4799
4799
|
EventLogoCompact,
|
|
4800
4800
|
EventLogoLarge
|
|
4801
4801
|
};
|
|
4802
|
-
//# sourceMappingURL=chunk-
|
|
4802
|
+
//# sourceMappingURL=chunk-DIKQ7AB6.js.map
|
|
@@ -10274,6 +10274,76 @@ function generateCSVContent(data, columns, options = {}) {
|
|
|
10274
10274
|
const csvContent = includeHeaders ? [headers.join(","), ...csvData].join("\n") : csvData.join("\n");
|
|
10275
10275
|
return csvContent;
|
|
10276
10276
|
}
|
|
10277
|
+
async function exportToCSVWithTableRows(tableRows, columns, columnIdToTableColumn, filename = "download.csv", options = {}) {
|
|
10278
|
+
const logger = createLogger("ExportUtils");
|
|
10279
|
+
return new Promise((resolve, reject) => {
|
|
10280
|
+
try {
|
|
10281
|
+
if (typeof window === "undefined") {
|
|
10282
|
+
throw new Error("CSV export is only available in browser environments");
|
|
10283
|
+
}
|
|
10284
|
+
if (!tableRows || tableRows.length === 0) {
|
|
10285
|
+
throw new Error("No data to export");
|
|
10286
|
+
}
|
|
10287
|
+
if (!columns || columns.length === 0) {
|
|
10288
|
+
throw new Error("No columns defined for export");
|
|
10289
|
+
}
|
|
10290
|
+
const headers = columns.map((col) => {
|
|
10291
|
+
const headerValue = col.header || col.id || "Column";
|
|
10292
|
+
return escapeCSVValue(headerValue, options.sanitizeForSecurity !== false);
|
|
10293
|
+
});
|
|
10294
|
+
const csvData = tableRows.map((tableRow) => {
|
|
10295
|
+
return columns.map((col) => {
|
|
10296
|
+
let value;
|
|
10297
|
+
if (col.isIdColumn && col.accessorKey) {
|
|
10298
|
+
value = tableRow.original[col.accessorKey];
|
|
10299
|
+
} else if (col.id && columnIdToTableColumn.has(col.id)) {
|
|
10300
|
+
try {
|
|
10301
|
+
value = tableRow.getValue(col.id);
|
|
10302
|
+
} catch (error) {
|
|
10303
|
+
if (col.accessorFn) {
|
|
10304
|
+
try {
|
|
10305
|
+
value = col.accessorFn(tableRow.original);
|
|
10306
|
+
} catch (accessorError) {
|
|
10307
|
+
console.warn("Error evaluating accessorFn for column:", col.id || col.header, accessorError);
|
|
10308
|
+
value = void 0;
|
|
10309
|
+
}
|
|
10310
|
+
} else {
|
|
10311
|
+
const key = col.accessorKey || col.id;
|
|
10312
|
+
value = key ? tableRow.original[key] : void 0;
|
|
10313
|
+
}
|
|
10314
|
+
}
|
|
10315
|
+
} else {
|
|
10316
|
+
const key = col.accessorKey || col.id;
|
|
10317
|
+
value = key ? tableRow.original[key] : void 0;
|
|
10318
|
+
}
|
|
10319
|
+
if (options.locale && (typeof value === "number" || value instanceof Date || typeof value === "boolean")) {
|
|
10320
|
+
value = formatLocaleValue(value, options.locale);
|
|
10321
|
+
}
|
|
10322
|
+
return escapeCSVValue(value, options.sanitizeForSecurity !== false);
|
|
10323
|
+
}).join(",");
|
|
10324
|
+
});
|
|
10325
|
+
const csvContent = [headers.join(","), ...csvData].join("\n");
|
|
10326
|
+
const blob = new Blob([csvContent], { type: "text/csv;charset=utf-8;" });
|
|
10327
|
+
const link = document.createElement("a");
|
|
10328
|
+
const url = URL.createObjectURL(blob);
|
|
10329
|
+
link.setAttribute("href", url);
|
|
10330
|
+
link.setAttribute("download", filename);
|
|
10331
|
+
link.style.display = "none";
|
|
10332
|
+
link.onclick = () => {
|
|
10333
|
+
setTimeout(() => {
|
|
10334
|
+
URL.revokeObjectURL(url);
|
|
10335
|
+
resolve();
|
|
10336
|
+
}, 100);
|
|
10337
|
+
};
|
|
10338
|
+
document.body.appendChild(link);
|
|
10339
|
+
link.click();
|
|
10340
|
+
document.body.removeChild(link);
|
|
10341
|
+
} catch (error) {
|
|
10342
|
+
logger.error("Failed to export data to CSV:", error);
|
|
10343
|
+
reject(error);
|
|
10344
|
+
}
|
|
10345
|
+
});
|
|
10346
|
+
}
|
|
10277
10347
|
function exportToCSV(data, columns, filename = "download.csv", options = {}) {
|
|
10278
10348
|
const logger = createLogger("ExportUtils");
|
|
10279
10349
|
return new Promise((resolve, reject) => {
|
|
@@ -11716,33 +11786,38 @@ function DataTableInternal({
|
|
|
11716
11786
|
onImportClick: () => stateActions.setImportModal(true),
|
|
11717
11787
|
onExport: secureHandlers.onExport || (async () => {
|
|
11718
11788
|
try {
|
|
11719
|
-
const
|
|
11789
|
+
const tableRows = table.getFilteredRowModel().rows;
|
|
11720
11790
|
const tableColumns = table.getAllColumns();
|
|
11721
11791
|
const visibleTableColumns = tableColumns.filter((col) => {
|
|
11722
11792
|
const isSystemColumn = col.id === "select" || col.id === "actions";
|
|
11723
11793
|
return !isSystemColumn && col.getIsVisible();
|
|
11724
11794
|
});
|
|
11725
11795
|
const visibleColumns2 = [];
|
|
11796
|
+
const columnIdToTableColumn = /* @__PURE__ */ new Map();
|
|
11726
11797
|
visibleTableColumns.forEach((tableCol) => {
|
|
11727
11798
|
const originalCol = columns.find((col) => {
|
|
11728
11799
|
const colId = col.id || col.accessorKey;
|
|
11729
11800
|
return colId && String(colId) === tableCol.id;
|
|
11730
11801
|
});
|
|
11731
11802
|
if (!originalCol) return;
|
|
11803
|
+
columnIdToTableColumn.set(tableCol.id, tableCol);
|
|
11732
11804
|
const hasAccessorFn = "accessorFn" in originalCol && originalCol.accessorFn;
|
|
11733
11805
|
const editAccessorKey = originalCol.editAccessorKey;
|
|
11806
|
+
const displayHeader = typeof originalCol.header === "string" ? originalCol.header : originalCol.accessorKey || tableCol.id || "Column";
|
|
11734
11807
|
visibleColumns2.push({
|
|
11735
11808
|
...originalCol,
|
|
11736
|
-
header:
|
|
11737
|
-
//
|
|
11738
|
-
|
|
11809
|
+
header: displayHeader,
|
|
11810
|
+
// Store table column ID for getValue() lookup
|
|
11811
|
+
id: tableCol.id,
|
|
11812
|
+
// Preserve accessorFn if present (will use getValue() if available)
|
|
11739
11813
|
accessorFn: hasAccessorFn ? originalCol.accessorFn : void 0
|
|
11740
11814
|
});
|
|
11741
11815
|
if (hasAccessorFn && editAccessorKey) {
|
|
11816
|
+
const idHeader = `${displayHeader} (ID)`;
|
|
11742
11817
|
visibleColumns2.push({
|
|
11743
11818
|
id: editAccessorKey,
|
|
11744
11819
|
accessorKey: editAccessorKey,
|
|
11745
|
-
header:
|
|
11820
|
+
header: idHeader,
|
|
11746
11821
|
isIdColumn: true,
|
|
11747
11822
|
editAccessorKey
|
|
11748
11823
|
});
|
|
@@ -11750,7 +11825,7 @@ function DataTableInternal({
|
|
|
11750
11825
|
});
|
|
11751
11826
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
11752
11827
|
const filename = title ? `${title.replace(/[^a-z0-9]/gi, "_").toLowerCase()}_${timestamp}.csv` : `data_export_${timestamp}.csv`;
|
|
11753
|
-
await
|
|
11828
|
+
await exportToCSVWithTableRows(tableRows, visibleColumns2, columnIdToTableColumn, filename);
|
|
11754
11829
|
toast({
|
|
11755
11830
|
title: "Export Successful",
|
|
11756
11831
|
description: `Data exported to ${filename}`,
|
|
@@ -12160,6 +12235,7 @@ export {
|
|
|
12160
12235
|
isHierarchicalSortableColumn,
|
|
12161
12236
|
getHierarchicalSortConfig,
|
|
12162
12237
|
generateCSVContent,
|
|
12238
|
+
exportToCSVWithTableRows,
|
|
12163
12239
|
exportToCSV,
|
|
12164
12240
|
defaultDataTableFeatures,
|
|
12165
12241
|
normalizeDataTableFeatures,
|
|
@@ -12194,4 +12270,4 @@ lodash/lodash.js:
|
|
|
12194
12270
|
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
12195
12271
|
*)
|
|
12196
12272
|
*/
|
|
12197
|
-
//# sourceMappingURL=chunk-
|
|
12273
|
+
//# sourceMappingURL=chunk-UWBDIT5N.js.map
|