hs-uix 1.6.4 → 1.7.0
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/README.md +2 -0
- package/common-components.d.ts +152 -0
- package/dist/common-components.js +1385 -77
- package/dist/common-components.mjs +1438 -82
- package/dist/datatable.js +293 -242
- package/dist/datatable.mjs +209 -159
- package/dist/feed.js +939 -0
- package/dist/feed.mjs +927 -0
- package/dist/form.js +173 -102
- package/dist/form.mjs +173 -102
- package/dist/index.js +3588 -1071
- package/dist/index.mjs +3291 -783
- package/dist/kanban.js +286 -225
- package/dist/kanban.mjs +180 -119
- package/dist/utils.js +2906 -2
- package/dist/utils.mjs +2944 -1
- package/feed.d.ts +1 -0
- package/index.d.ts +51 -2
- package/package.json +17 -4
- package/packages/datatable/README.md +1046 -0
- package/packages/datatable/index.d.ts +246 -0
- package/packages/feed/README.md +224 -0
- package/packages/feed/index.d.ts +261 -0
- package/packages/form/README.md +1229 -0
- package/packages/form/index.d.ts +498 -0
- package/packages/kanban/README.md +707 -0
- package/packages/kanban/index.d.ts +367 -0
- package/utils.d.ts +122 -0
package/dist/datatable.js
CHANGED
|
@@ -34,9 +34,22 @@ __export(datatable_exports, {
|
|
|
34
34
|
module.exports = __toCommonJS(datatable_exports);
|
|
35
35
|
|
|
36
36
|
// packages/datatable/src/DataTable.jsx
|
|
37
|
-
var
|
|
37
|
+
var import_react2 = __toESM(require("react"));
|
|
38
|
+
|
|
39
|
+
// src/utils/query.js
|
|
38
40
|
var import_fuse = __toESM(require("fuse.js"));
|
|
39
|
-
var
|
|
41
|
+
var getEmptyFilterValue = (filter) => {
|
|
42
|
+
const type = filter.type || "select";
|
|
43
|
+
if (type === "multiselect") return [];
|
|
44
|
+
if (type === "dateRange") return { from: null, to: null };
|
|
45
|
+
return "";
|
|
46
|
+
};
|
|
47
|
+
var isFilterActive = (filter, value) => {
|
|
48
|
+
const type = filter.type || "select";
|
|
49
|
+
if (type === "multiselect") return Array.isArray(value) && value.length > 0;
|
|
50
|
+
if (type === "dateRange") return value && (value.from || value.to);
|
|
51
|
+
return !!value;
|
|
52
|
+
};
|
|
40
53
|
var formatDateChip = (dateObj) => {
|
|
41
54
|
if (!dateObj) return "";
|
|
42
55
|
const { year, month, date } = dateObj;
|
|
@@ -50,6 +63,109 @@ var dateToTimestamp = (dateObj) => {
|
|
|
50
63
|
if (!dateObj) return null;
|
|
51
64
|
return new Date(dateObj.year, dateObj.month, dateObj.date).getTime();
|
|
52
65
|
};
|
|
66
|
+
var toStableKey = (value) => {
|
|
67
|
+
try {
|
|
68
|
+
return JSON.stringify(value);
|
|
69
|
+
} catch (_error) {
|
|
70
|
+
return String(value);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
var filterRows = (rows, filters, values) => {
|
|
74
|
+
let result = rows;
|
|
75
|
+
for (const filter of filters || []) {
|
|
76
|
+
const value = values[filter.name];
|
|
77
|
+
if (!isFilterActive(filter, value)) continue;
|
|
78
|
+
const type = filter.type || "select";
|
|
79
|
+
if (filter.filterFn) {
|
|
80
|
+
result = result.filter((row) => filter.filterFn(row, value));
|
|
81
|
+
} else if (type === "multiselect") {
|
|
82
|
+
result = result.filter((row) => value.includes(row[filter.name]));
|
|
83
|
+
} else if (type === "dateRange") {
|
|
84
|
+
const fromTs = dateToTimestamp(value.from);
|
|
85
|
+
const toTs = value.to ? dateToTimestamp(value.to) + 864e5 - 1 : null;
|
|
86
|
+
result = result.filter((row) => {
|
|
87
|
+
const rowTs = new Date(row[filter.name]).getTime();
|
|
88
|
+
if (Number.isNaN(rowTs)) return false;
|
|
89
|
+
if (fromTs && rowTs < fromTs) return false;
|
|
90
|
+
if (toTs && rowTs > toTs) return false;
|
|
91
|
+
return true;
|
|
92
|
+
});
|
|
93
|
+
} else {
|
|
94
|
+
result = result.filter((row) => row[filter.name] === value);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
};
|
|
99
|
+
var searchRows = (rows, term, fields, opts = {}) => {
|
|
100
|
+
const { fuzzy = false, fuzzyOptions } = opts;
|
|
101
|
+
const t = String(term ?? "").toLowerCase();
|
|
102
|
+
if (!t || !fields || fields.length === 0) return rows;
|
|
103
|
+
if (fuzzy) {
|
|
104
|
+
const fuse = new import_fuse.default(rows, {
|
|
105
|
+
keys: fields,
|
|
106
|
+
threshold: 0.4,
|
|
107
|
+
distance: 100,
|
|
108
|
+
ignoreLocation: true,
|
|
109
|
+
...fuzzyOptions
|
|
110
|
+
});
|
|
111
|
+
return fuse.search(t).map((r) => r.item);
|
|
112
|
+
}
|
|
113
|
+
return rows.filter(
|
|
114
|
+
(row) => fields.some((field) => {
|
|
115
|
+
const val = row[field];
|
|
116
|
+
return val && String(val).toLowerCase().includes(t);
|
|
117
|
+
})
|
|
118
|
+
);
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
// src/utils/interactionHooks.js
|
|
122
|
+
var import_react = require("react");
|
|
123
|
+
var import_ui_extensions = require("@hubspot/ui-extensions");
|
|
124
|
+
var useDebouncedDispatch = (value, debounceMs, dispatch) => {
|
|
125
|
+
const debounced = (0, import_ui_extensions.useDebounce)(value, debounceMs > 0 ? debounceMs : 300);
|
|
126
|
+
const pendingRef = (0, import_react.useRef)(null);
|
|
127
|
+
(0, import_react.useEffect)(() => {
|
|
128
|
+
if (debounceMs <= 0) return;
|
|
129
|
+
if (pendingRef.current == null) return;
|
|
130
|
+
if (debounced !== pendingRef.current) return;
|
|
131
|
+
const next = pendingRef.current;
|
|
132
|
+
pendingRef.current = null;
|
|
133
|
+
dispatch(next);
|
|
134
|
+
}, [debounceMs, debounced, dispatch]);
|
|
135
|
+
return (0, import_react.useCallback)(
|
|
136
|
+
(next) => {
|
|
137
|
+
if (debounceMs > 0) {
|
|
138
|
+
pendingRef.current = next;
|
|
139
|
+
} else {
|
|
140
|
+
pendingRef.current = null;
|
|
141
|
+
dispatch(next);
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
[debounceMs, dispatch]
|
|
145
|
+
);
|
|
146
|
+
};
|
|
147
|
+
var useSelectionReset = ({ resetKey, enabled, isControlled, clearSelection }) => {
|
|
148
|
+
const ref = (0, import_react.useRef)("");
|
|
149
|
+
(0, import_react.useEffect)(() => {
|
|
150
|
+
if (!enabled || isControlled) {
|
|
151
|
+
ref.current = resetKey;
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (ref.current && ref.current !== resetKey) {
|
|
155
|
+
clearSelection();
|
|
156
|
+
}
|
|
157
|
+
ref.current = resetKey;
|
|
158
|
+
}, [resetKey, enabled, isControlled, clearSelection]);
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
// packages/datatable/src/editValidation.js
|
|
162
|
+
var editValidationError = (result) => {
|
|
163
|
+
if (result === true || result === void 0 || result === null) return null;
|
|
164
|
+
return typeof result === "string" ? result : "Invalid value";
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
// packages/datatable/src/DataTable.jsx
|
|
168
|
+
var import_ui_extensions2 = require("@hubspot/ui-extensions");
|
|
53
169
|
var NARROW_EDIT_TYPES = /* @__PURE__ */ new Set(["checkbox", "toggle"]);
|
|
54
170
|
var DATE_PATTERN = /^\d{4}[-/]\d{2}[-/]\d{2}/;
|
|
55
171
|
var BOOL_VALUES = /* @__PURE__ */ new Set(["true", "false", "yes", "no", "0", "1"]);
|
|
@@ -75,13 +191,6 @@ var serializeSortState = (sortState) => {
|
|
|
75
191
|
if (!activeField) return null;
|
|
76
192
|
return { field: activeField, direction: sortState[activeField] };
|
|
77
193
|
};
|
|
78
|
-
var toStableKey = (value) => {
|
|
79
|
-
try {
|
|
80
|
-
return JSON.stringify(value);
|
|
81
|
-
} catch (_error) {
|
|
82
|
-
return String(value);
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
194
|
var computeAutoWidths = (columns, data) => {
|
|
86
195
|
if (!data || data.length === 0) return {};
|
|
87
196
|
const sample = data.slice(0, 50);
|
|
@@ -133,12 +242,6 @@ var computeAutoWidths = (columns, data) => {
|
|
|
133
242
|
});
|
|
134
243
|
return results;
|
|
135
244
|
};
|
|
136
|
-
var getEmptyFilterValue = (filter) => {
|
|
137
|
-
const type = filter.type || "select";
|
|
138
|
-
if (type === "multiselect") return [];
|
|
139
|
-
if (type === "dateRange") return { from: null, to: null };
|
|
140
|
-
return "";
|
|
141
|
-
};
|
|
142
245
|
var BOOLEAN_SELECT_OPTIONS = [
|
|
143
246
|
{ label: "Yes", value: true },
|
|
144
247
|
{ label: "No", value: false }
|
|
@@ -149,12 +252,6 @@ var resolveEditOptions = (col, data) => {
|
|
|
149
252
|
if (sample && typeof sample[col.field] === "boolean") return BOOLEAN_SELECT_OPTIONS;
|
|
150
253
|
return [];
|
|
151
254
|
};
|
|
152
|
-
var isFilterActive = (filter, value) => {
|
|
153
|
-
const type = filter.type || "select";
|
|
154
|
-
if (type === "multiselect") return Array.isArray(value) && value.length > 0;
|
|
155
|
-
if (type === "dateRange") return value && (value.from || value.to);
|
|
156
|
-
return !!value;
|
|
157
|
-
};
|
|
158
255
|
var DataTable = ({
|
|
159
256
|
// Data
|
|
160
257
|
data,
|
|
@@ -173,8 +270,8 @@ var DataTable = ({
|
|
|
173
270
|
filters = [],
|
|
174
271
|
showFilterBadges = true,
|
|
175
272
|
// show active filter chips/badges
|
|
176
|
-
showClearFiltersButton
|
|
177
|
-
// show "Clear all"
|
|
273
|
+
showClearFiltersButton,
|
|
274
|
+
// show "Clear all" reset button; defaults to showFilterBadges when omitted
|
|
178
275
|
filterInlineLimit = 2,
|
|
179
276
|
// number of filters shown inline before overflow
|
|
180
277
|
// Pagination
|
|
@@ -187,7 +284,7 @@ var DataTable = ({
|
|
|
187
284
|
// show First/Last page buttons (default: auto when pageCount > 5)
|
|
188
285
|
// Row count
|
|
189
286
|
title,
|
|
190
|
-
// optional title shown above the table toolbar
|
|
287
|
+
// optional title shown as demibold text above the table toolbar
|
|
191
288
|
showRowCount = true,
|
|
192
289
|
// show "X records" / "X of Y records" text
|
|
193
290
|
rowCountBold = false,
|
|
@@ -308,47 +405,46 @@ var DataTable = ({
|
|
|
308
405
|
renderErrorState
|
|
309
406
|
// ({ error, title, message }) => ReactNode
|
|
310
407
|
}) => {
|
|
311
|
-
const initialSortState = (0,
|
|
408
|
+
const initialSortState = (0, import_react2.useMemo)(() => {
|
|
312
409
|
return normalizeSortState(columns, defaultSort);
|
|
313
410
|
}, [columns, defaultSort]);
|
|
314
|
-
const [internalSearchTerm, setInternalSearchTerm] = (0,
|
|
411
|
+
const [internalSearchTerm, setInternalSearchTerm] = (0, import_react2.useState)(
|
|
315
412
|
() => serverSide && searchValue != null ? searchValue : ""
|
|
316
413
|
);
|
|
317
|
-
const [internalFilterValues, setInternalFilterValues] = (0,
|
|
414
|
+
const [internalFilterValues, setInternalFilterValues] = (0, import_react2.useState)(() => {
|
|
318
415
|
const init = {};
|
|
319
416
|
filters.forEach((f) => {
|
|
320
417
|
init[f.name] = getEmptyFilterValue(f);
|
|
321
418
|
});
|
|
322
419
|
return init;
|
|
323
420
|
});
|
|
324
|
-
const [internalSortState, setInternalSortState] = (0,
|
|
325
|
-
const [currentPage, setCurrentPage] = (0,
|
|
326
|
-
const [showMoreFilters, setShowMoreFilters] = (0,
|
|
327
|
-
const lastAppliedSearchRef = (0,
|
|
421
|
+
const [internalSortState, setInternalSortState] = (0, import_react2.useState)(initialSortState);
|
|
422
|
+
const [currentPage, setCurrentPage] = (0, import_react2.useState)(1);
|
|
423
|
+
const [showMoreFilters, setShowMoreFilters] = (0, import_react2.useState)(false);
|
|
424
|
+
const lastAppliedSearchRef = (0, import_react2.useRef)(
|
|
328
425
|
serverSide && searchValue != null ? searchValue : ""
|
|
329
426
|
);
|
|
330
427
|
const searchTerm = serverSide && searchValue != null ? searchValue : internalSearchTerm;
|
|
331
|
-
(0,
|
|
428
|
+
(0, import_react2.useEffect)(() => {
|
|
332
429
|
if (!serverSide || searchValue == null) return;
|
|
333
430
|
if (searchValue === lastAppliedSearchRef.current) return;
|
|
334
431
|
lastAppliedSearchRef.current = searchValue;
|
|
335
432
|
setInternalSearchTerm(searchValue);
|
|
336
433
|
}, [serverSide, searchValue]);
|
|
337
434
|
const filterValues = serverSide && externalFilterValues != null ? externalFilterValues : internalFilterValues;
|
|
338
|
-
const externalSortState = (0,
|
|
435
|
+
const externalSortState = (0, import_react2.useMemo)(
|
|
339
436
|
() => normalizeSortState(columns, externalSort),
|
|
340
437
|
[columns, externalSort]
|
|
341
438
|
);
|
|
342
439
|
const sortState = serverSide && externalSort != null ? externalSortState : internalSortState;
|
|
343
440
|
const activePage = serverSide && externalPage != null ? externalPage : currentPage;
|
|
344
|
-
(0,
|
|
441
|
+
(0, import_react2.useEffect)(() => {
|
|
345
442
|
if (!serverSide) setCurrentPage(1);
|
|
346
443
|
}, [internalSearchTerm, internalFilterValues, internalSortState, serverSide]);
|
|
347
|
-
const
|
|
348
|
-
const fireSearchCallback = (0, import_react.useCallback)((term) => {
|
|
444
|
+
const fireSearchCallback = (0, import_react2.useCallback)((term) => {
|
|
349
445
|
if (serverSide && onSearchChange) onSearchChange(term);
|
|
350
446
|
}, [serverSide, onSearchChange]);
|
|
351
|
-
const fireParamsChange = (0,
|
|
447
|
+
const fireParamsChange = (0, import_react2.useCallback)((overrides) => {
|
|
352
448
|
if (!onParamsChange) return;
|
|
353
449
|
const nextSortState = overrides.sort != null ? normalizeSortState(columns, overrides.sort) : sortState;
|
|
354
450
|
onParamsChange({
|
|
@@ -358,38 +454,35 @@ var DataTable = ({
|
|
|
358
454
|
page: overrides.page != null ? overrides.page : activePage
|
|
359
455
|
});
|
|
360
456
|
}, [onParamsChange, columns, searchTerm, filterValues, sortState, activePage]);
|
|
361
|
-
const resetPage = (0,
|
|
457
|
+
const resetPage = (0, import_react2.useCallback)(() => {
|
|
362
458
|
if (resetPageOnChange) {
|
|
363
459
|
setCurrentPage(1);
|
|
364
460
|
if (serverSide && onPageChange) onPageChange(1);
|
|
365
461
|
}
|
|
366
462
|
}, [resetPageOnChange, serverSide, onPageChange]);
|
|
367
|
-
const
|
|
463
|
+
const dispatchSearchChange = (0, import_react2.useCallback)((term) => {
|
|
464
|
+
lastAppliedSearchRef.current = term;
|
|
465
|
+
fireSearchCallback(term);
|
|
466
|
+
fireParamsChange({ search: term, page: resetPageOnChange ? 1 : void 0 });
|
|
467
|
+
}, [fireSearchCallback, fireParamsChange, resetPageOnChange]);
|
|
468
|
+
const dispatchSearchDebounced = useDebouncedDispatch(
|
|
469
|
+
internalSearchTerm,
|
|
470
|
+
searchDebounce,
|
|
471
|
+
dispatchSearchChange
|
|
472
|
+
);
|
|
473
|
+
const handleSearchChange = (0, import_react2.useCallback)((term) => {
|
|
368
474
|
setInternalSearchTerm(term);
|
|
369
475
|
resetPage();
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
fireParamsChange({ search: term, page: resetPageOnChange ? 1 : void 0 });
|
|
374
|
-
};
|
|
375
|
-
if (searchDebounce > 0) {
|
|
376
|
-
if (debounceRef.current) clearTimeout(debounceRef.current);
|
|
377
|
-
debounceRef.current = setTimeout(dispatch, searchDebounce);
|
|
378
|
-
} else {
|
|
379
|
-
dispatch();
|
|
380
|
-
}
|
|
381
|
-
}, [searchDebounce, fireSearchCallback, fireParamsChange, resetPage, resetPageOnChange]);
|
|
382
|
-
(0, import_react.useEffect)(() => () => {
|
|
383
|
-
if (debounceRef.current) clearTimeout(debounceRef.current);
|
|
384
|
-
}, []);
|
|
385
|
-
const handleFilterChange = (0, import_react.useCallback)((name, value) => {
|
|
476
|
+
dispatchSearchDebounced(term);
|
|
477
|
+
}, [dispatchSearchDebounced, resetPage]);
|
|
478
|
+
const handleFilterChange = (0, import_react2.useCallback)((name, value) => {
|
|
386
479
|
const next = { ...filterValues, [name]: value };
|
|
387
480
|
setInternalFilterValues(next);
|
|
388
481
|
if (serverSide && onFilterChange) onFilterChange(next);
|
|
389
482
|
resetPage();
|
|
390
483
|
fireParamsChange({ filters: next, page: resetPageOnChange ? 1 : void 0 });
|
|
391
484
|
}, [filterValues, serverSide, onFilterChange, fireParamsChange, resetPage, resetPageOnChange]);
|
|
392
|
-
const handleSortChange = (0,
|
|
485
|
+
const handleSortChange = (0, import_react2.useCallback)((field) => {
|
|
393
486
|
const current = sortState[field] || "none";
|
|
394
487
|
const nextDirection = current === "none" ? "ascending" : current === "ascending" ? "descending" : "none";
|
|
395
488
|
const reset = {};
|
|
@@ -402,59 +495,23 @@ var DataTable = ({
|
|
|
402
495
|
resetPage();
|
|
403
496
|
fireParamsChange({ sort: next, page: resetPageOnChange ? 1 : void 0 });
|
|
404
497
|
}, [sortState, columns, serverSide, onSortChange, fireParamsChange, resetPage, resetPageOnChange]);
|
|
405
|
-
const handlePageChange = (0,
|
|
498
|
+
const handlePageChange = (0, import_react2.useCallback)((page) => {
|
|
406
499
|
setCurrentPage(page);
|
|
407
500
|
if (serverSide && onPageChange) onPageChange(page);
|
|
408
501
|
fireParamsChange({ page });
|
|
409
502
|
}, [serverSide, onPageChange, fireParamsChange]);
|
|
410
|
-
const filteredData = (0,
|
|
503
|
+
const filteredData = (0, import_react2.useMemo)(() => {
|
|
411
504
|
if (serverSide) return data;
|
|
412
|
-
let result = data;
|
|
413
|
-
filters.forEach((filter) => {
|
|
414
|
-
const value = filterValues[filter.name];
|
|
415
|
-
if (!isFilterActive(filter, value)) return;
|
|
416
|
-
const type = filter.type || "select";
|
|
417
|
-
if (filter.filterFn) {
|
|
418
|
-
result = result.filter((row) => filter.filterFn(row, value));
|
|
419
|
-
} else if (type === "multiselect") {
|
|
420
|
-
result = result.filter((row) => value.includes(row[filter.name]));
|
|
421
|
-
} else if (type === "dateRange") {
|
|
422
|
-
const fromTs = dateToTimestamp(value.from);
|
|
423
|
-
const toTs = value.to ? dateToTimestamp(value.to) + 864e5 - 1 : null;
|
|
424
|
-
result = result.filter((row) => {
|
|
425
|
-
const rowTs = new Date(row[filter.name]).getTime();
|
|
426
|
-
if (Number.isNaN(rowTs)) return false;
|
|
427
|
-
if (fromTs && rowTs < fromTs) return false;
|
|
428
|
-
if (toTs && rowTs > toTs) return false;
|
|
429
|
-
return true;
|
|
430
|
-
});
|
|
431
|
-
} else {
|
|
432
|
-
result = result.filter((row) => row[filter.name] === value);
|
|
433
|
-
}
|
|
434
|
-
});
|
|
505
|
+
let result = filterRows(data, filters, filterValues);
|
|
435
506
|
if (searchTerm && searchFields.length > 0) {
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
distance: 100,
|
|
441
|
-
ignoreLocation: true,
|
|
442
|
-
...fuzzyOptions
|
|
443
|
-
});
|
|
444
|
-
result = fuse.search(searchTerm).map((r) => r.item);
|
|
445
|
-
} else {
|
|
446
|
-
const term = searchTerm.toLowerCase();
|
|
447
|
-
result = result.filter(
|
|
448
|
-
(row) => searchFields.some((field) => {
|
|
449
|
-
const val = row[field];
|
|
450
|
-
return val && String(val).toLowerCase().includes(term);
|
|
451
|
-
})
|
|
452
|
-
);
|
|
453
|
-
}
|
|
507
|
+
result = searchRows(result, searchTerm, searchFields, {
|
|
508
|
+
fuzzy: fuzzySearch,
|
|
509
|
+
fuzzyOptions
|
|
510
|
+
});
|
|
454
511
|
}
|
|
455
512
|
return result;
|
|
456
513
|
}, [data, filterValues, searchTerm, filters, searchFields, serverSide, fuzzySearch, fuzzyOptions]);
|
|
457
|
-
const sortedData = (0,
|
|
514
|
+
const sortedData = (0, import_react2.useMemo)(() => {
|
|
458
515
|
if (serverSide) return filteredData;
|
|
459
516
|
const activeField = Object.keys(sortState).find((k) => sortState[k] !== "none");
|
|
460
517
|
if (!activeField) return filteredData;
|
|
@@ -483,7 +540,7 @@ var DataTable = ({
|
|
|
483
540
|
return 0;
|
|
484
541
|
});
|
|
485
542
|
}, [filteredData, sortState, serverSide, columns]);
|
|
486
|
-
const groupedData = (0,
|
|
543
|
+
const groupedData = (0, import_react2.useMemo)(() => {
|
|
487
544
|
if (!groupBy) return null;
|
|
488
545
|
const source = serverSide ? data : sortedData;
|
|
489
546
|
const groups = {};
|
|
@@ -507,7 +564,7 @@ var DataTable = ({
|
|
|
507
564
|
rows: groups[key]
|
|
508
565
|
}));
|
|
509
566
|
}, [sortedData, data, groupBy, serverSide]);
|
|
510
|
-
const [expandedGroups, setExpandedGroups] = (0,
|
|
567
|
+
const [expandedGroups, setExpandedGroups] = (0, import_react2.useState)(() => {
|
|
511
568
|
if (!groupBy) return /* @__PURE__ */ new Set();
|
|
512
569
|
const defaultExpanded = groupBy.defaultExpanded !== false;
|
|
513
570
|
if (defaultExpanded && groupedData) {
|
|
@@ -515,7 +572,7 @@ var DataTable = ({
|
|
|
515
572
|
}
|
|
516
573
|
return /* @__PURE__ */ new Set();
|
|
517
574
|
});
|
|
518
|
-
(0,
|
|
575
|
+
(0, import_react2.useEffect)(() => {
|
|
519
576
|
if (!groupedData) return;
|
|
520
577
|
const defaultExpanded = (groupBy == null ? void 0 : groupBy.defaultExpanded) !== false;
|
|
521
578
|
if (defaultExpanded) {
|
|
@@ -526,7 +583,7 @@ var DataTable = ({
|
|
|
526
583
|
});
|
|
527
584
|
}
|
|
528
585
|
}, [groupedData, groupBy]);
|
|
529
|
-
const toggleGroup = (0,
|
|
586
|
+
const toggleGroup = (0, import_react2.useCallback)((key) => {
|
|
530
587
|
setExpandedGroups((prev) => {
|
|
531
588
|
const next = new Set(prev);
|
|
532
589
|
if (next.has(key)) next.delete(key);
|
|
@@ -534,20 +591,20 @@ var DataTable = ({
|
|
|
534
591
|
return next;
|
|
535
592
|
});
|
|
536
593
|
}, []);
|
|
537
|
-
const datasetRows = (0,
|
|
594
|
+
const datasetRows = (0, import_react2.useMemo)(() => {
|
|
538
595
|
if (!groupedData) return serverSide ? data : sortedData;
|
|
539
596
|
return groupedData.flatMap((group) => group.rows);
|
|
540
597
|
}, [groupedData, sortedData, data, serverSide]);
|
|
541
598
|
const totalItems = serverSide ? totalCount || data.length : datasetRows.length;
|
|
542
599
|
const pageCount = Math.ceil(totalItems / pageSize);
|
|
543
|
-
const paginatedRows = (0,
|
|
600
|
+
const paginatedRows = (0, import_react2.useMemo)(() => {
|
|
544
601
|
if (serverSide) return datasetRows;
|
|
545
602
|
return datasetRows.slice(
|
|
546
603
|
(activePage - 1) * pageSize,
|
|
547
604
|
activePage * pageSize
|
|
548
605
|
);
|
|
549
606
|
}, [serverSide, datasetRows, activePage, pageSize]);
|
|
550
|
-
const displayRows = (0,
|
|
607
|
+
const displayRows = (0, import_react2.useMemo)(() => {
|
|
551
608
|
if (!groupedData) return paginatedRows.map((row) => ({ type: "data", row }));
|
|
552
609
|
const pageRows = new Set(paginatedRows);
|
|
553
610
|
const rows = [];
|
|
@@ -562,7 +619,7 @@ var DataTable = ({
|
|
|
562
619
|
return rows;
|
|
563
620
|
}, [groupedData, paginatedRows, expandedGroups]);
|
|
564
621
|
const footerData = serverSide ? data : filteredData;
|
|
565
|
-
const activeChips = (0,
|
|
622
|
+
const activeChips = (0, import_react2.useMemo)(() => {
|
|
566
623
|
const chips = [];
|
|
567
624
|
filters.forEach((filter) => {
|
|
568
625
|
const value = filterValues[filter.name];
|
|
@@ -587,7 +644,7 @@ var DataTable = ({
|
|
|
587
644
|
});
|
|
588
645
|
return chips;
|
|
589
646
|
}, [filterValues, filters]);
|
|
590
|
-
const handleFilterRemove = (0,
|
|
647
|
+
const handleFilterRemove = (0, import_react2.useCallback)((key) => {
|
|
591
648
|
if (key === "all") {
|
|
592
649
|
const cleared = {};
|
|
593
650
|
filters.forEach((f) => {
|
|
@@ -623,18 +680,19 @@ var DataTable = ({
|
|
|
623
680
|
const resolvedDateFromLabel = (labels == null ? void 0 : labels.dateFrom) || "From";
|
|
624
681
|
const resolvedDateToLabel = (labels == null ? void 0 : labels.dateTo) || "To";
|
|
625
682
|
const resolvedLoadingLabel = (labels == null ? void 0 : labels.loading) || `Loading ${pluralLabel}...`;
|
|
683
|
+
const resolvedLoadingMessage = (labels == null ? void 0 : labels.loadingMessage) || "This should only take a moment.";
|
|
626
684
|
const resolvedErrorTitle = (labels == null ? void 0 : labels.errorTitle) || "Something went wrong.";
|
|
627
685
|
const resolvedErrorMessage = (labels == null ? void 0 : labels.errorMessage) || "An error occurred while loading data.";
|
|
628
686
|
const resolvedRetryMessage = (labels == null ? void 0 : labels.retryMessage) || "Please try again.";
|
|
687
|
+
const resolvedShowClearFiltersButton = showClearFiltersButton ?? showFilterBadges;
|
|
629
688
|
const recordCountLabel = rowCountText ? rowCountText(shownOnPageCount, displayCount) : displayCount === totalDataCount ? `${totalDataCount} ${countLabel(totalDataCount)}` : `${displayCount} of ${totalDataCount} ${countLabel(totalDataCount)}`;
|
|
630
|
-
const [internalSelectedIds, setInternalSelectedIds] = (0,
|
|
631
|
-
|
|
632
|
-
(0, import_react.useEffect)(() => {
|
|
689
|
+
const [internalSelectedIds, setInternalSelectedIds] = (0, import_react2.useState)(/* @__PURE__ */ new Set());
|
|
690
|
+
(0, import_react2.useEffect)(() => {
|
|
633
691
|
if (externalSelectedIds != null) {
|
|
634
692
|
setInternalSelectedIds(new Set(externalSelectedIds));
|
|
635
693
|
}
|
|
636
694
|
}, [externalSelectedIds]);
|
|
637
|
-
const selectionQueryKey = (0,
|
|
695
|
+
const selectionQueryKey = (0, import_react2.useMemo)(() => {
|
|
638
696
|
if (!resetSelectionOnQueryChange) return "";
|
|
639
697
|
return toStableKey({
|
|
640
698
|
search: searchTerm,
|
|
@@ -642,48 +700,47 @@ var DataTable = ({
|
|
|
642
700
|
sort: serializeSortState(sortState)
|
|
643
701
|
});
|
|
644
702
|
}, [searchTerm, filterValues, sortState, resetSelectionOnQueryChange]);
|
|
645
|
-
const combinedSelectionResetKey = (0,
|
|
703
|
+
const combinedSelectionResetKey = (0, import_react2.useMemo)(
|
|
646
704
|
() => `${selectionQueryKey}::${selectionResetKey == null ? "" : toStableKey(selectionResetKey)}`,
|
|
647
705
|
[selectionQueryKey, selectionResetKey]
|
|
648
706
|
);
|
|
649
|
-
(0,
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
}
|
|
657
|
-
selectionResetRef.current = combinedSelectionResetKey;
|
|
658
|
-
}, [combinedSelectionResetKey, selectable, externalSelectedIds]);
|
|
707
|
+
const clearSelection = (0, import_react2.useCallback)(() => setInternalSelectedIds(/* @__PURE__ */ new Set()), []);
|
|
708
|
+
useSelectionReset({
|
|
709
|
+
resetKey: combinedSelectionResetKey,
|
|
710
|
+
enabled: selectable,
|
|
711
|
+
isControlled: externalSelectedIds != null,
|
|
712
|
+
clearSelection
|
|
713
|
+
});
|
|
659
714
|
const selectedIds = externalSelectedIds != null ? new Set(externalSelectedIds) : internalSelectedIds;
|
|
660
|
-
const showToolbarCount = showRowCount &&
|
|
661
|
-
const
|
|
662
|
-
const
|
|
715
|
+
const showToolbarCount = showRowCount && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0);
|
|
716
|
+
const hasToolbarLeft = showSearch && searchFields.length > 0 || filters.length > 0 || activeChips.length > 0 && (showFilterBadges || resolvedShowClearFiltersButton);
|
|
717
|
+
const countInTitleRow = !!title && showToolbarCount && !hasToolbarLeft;
|
|
718
|
+
const countInToolbar = showToolbarCount && !countInTitleRow;
|
|
719
|
+
const hasToolbarContent = hasToolbarLeft || countInToolbar;
|
|
663
720
|
const showRowActionsColumn = !!rowActions && !(hideRowActionsWhenSelectionActive && selectable && selectedIds.size > 0);
|
|
664
|
-
const applySelection = (0,
|
|
721
|
+
const applySelection = (0, import_react2.useCallback)((nextSet) => {
|
|
665
722
|
if (externalSelectedIds == null) {
|
|
666
723
|
setInternalSelectedIds(nextSet);
|
|
667
724
|
}
|
|
668
725
|
if (onSelectionChange) onSelectionChange([...nextSet]);
|
|
669
726
|
}, [externalSelectedIds, onSelectionChange]);
|
|
670
|
-
const pageRowIds = (0,
|
|
727
|
+
const pageRowIds = (0, import_react2.useMemo)(() => {
|
|
671
728
|
if (serverSide) {
|
|
672
729
|
return data.map((row) => row[rowIdField]).filter((id) => id != null);
|
|
673
730
|
}
|
|
674
731
|
return displayRows.filter((r) => r.type === "data").map((r) => r.row[rowIdField]).filter((id) => id != null);
|
|
675
732
|
}, [serverSide, data, displayRows, rowIdField]);
|
|
676
|
-
const allRowIds = (0,
|
|
733
|
+
const allRowIds = (0, import_react2.useMemo)(
|
|
677
734
|
() => datasetRows.map((row) => row[rowIdField]).filter((id) => id != null),
|
|
678
735
|
[datasetRows, rowIdField]
|
|
679
736
|
);
|
|
680
|
-
const handleSelectRow = (0,
|
|
737
|
+
const handleSelectRow = (0, import_react2.useCallback)((rowId, checked) => {
|
|
681
738
|
const next = new Set(selectedIds);
|
|
682
739
|
if (checked) next.add(rowId);
|
|
683
740
|
else next.delete(rowId);
|
|
684
741
|
applySelection(next);
|
|
685
742
|
}, [selectedIds, applySelection]);
|
|
686
|
-
const handleSelectAll = (0,
|
|
743
|
+
const handleSelectAll = (0, import_react2.useCallback)((checked) => {
|
|
687
744
|
const next = new Set(selectedIds);
|
|
688
745
|
pageRowIds.forEach((id) => {
|
|
689
746
|
if (checked) next.add(id);
|
|
@@ -691,10 +748,10 @@ var DataTable = ({
|
|
|
691
748
|
});
|
|
692
749
|
applySelection(next);
|
|
693
750
|
}, [selectedIds, pageRowIds, applySelection]);
|
|
694
|
-
const allVisibleSelected = (0,
|
|
751
|
+
const allVisibleSelected = (0, import_react2.useMemo)(() => {
|
|
695
752
|
return pageRowIds.length > 0 && pageRowIds.every((id) => selectedIds.has(id));
|
|
696
753
|
}, [pageRowIds, selectedIds]);
|
|
697
|
-
const handleSelectAllRows = (0,
|
|
754
|
+
const handleSelectAllRows = (0, import_react2.useCallback)(() => {
|
|
698
755
|
const idsToAdd = serverSide ? pageRowIds : allRowIds;
|
|
699
756
|
const next = new Set(selectedIds);
|
|
700
757
|
idsToAdd.forEach((id) => next.add(id));
|
|
@@ -707,13 +764,13 @@ var DataTable = ({
|
|
|
707
764
|
});
|
|
708
765
|
}
|
|
709
766
|
}, [serverSide, pageRowIds, allRowIds, selectedIds, applySelection, onSelectAllRequest, totalCount, data.length]);
|
|
710
|
-
const handleDeselectAll = (0,
|
|
767
|
+
const handleDeselectAll = (0, import_react2.useCallback)(() => {
|
|
711
768
|
applySelection(/* @__PURE__ */ new Set());
|
|
712
769
|
}, [applySelection]);
|
|
713
|
-
const [editingCell, setEditingCell] = (0,
|
|
714
|
-
const [editValue, setEditValue] = (0,
|
|
715
|
-
const [editError, setEditError] = (0,
|
|
716
|
-
const startEditing = (0,
|
|
770
|
+
const [editingCell, setEditingCell] = (0, import_react2.useState)(null);
|
|
771
|
+
const [editValue, setEditValue] = (0, import_react2.useState)(null);
|
|
772
|
+
const [editError, setEditError] = (0, import_react2.useState)(null);
|
|
773
|
+
const startEditing = (0, import_react2.useCallback)((rowId, field, currentValue) => {
|
|
717
774
|
setEditingCell({ rowId, field });
|
|
718
775
|
setEditValue(currentValue);
|
|
719
776
|
setEditError(null);
|
|
@@ -722,13 +779,13 @@ var DataTable = ({
|
|
|
722
779
|
if (row) onEditStart(row, field, currentValue);
|
|
723
780
|
}
|
|
724
781
|
}, [onEditStart, data, rowIdField]);
|
|
725
|
-
const commitEdit = (0,
|
|
782
|
+
const commitEdit = (0, import_react2.useCallback)((row, field, value, options = {}) => {
|
|
726
783
|
const { keepEditing = false } = options;
|
|
727
784
|
const col = columns.find((c) => c.field === field);
|
|
728
785
|
if (col == null ? void 0 : col.editValidate) {
|
|
729
|
-
const
|
|
730
|
-
if (
|
|
731
|
-
setEditError(
|
|
786
|
+
const err = editValidationError(col.editValidate(value, row));
|
|
787
|
+
if (err) {
|
|
788
|
+
setEditError(err);
|
|
732
789
|
return false;
|
|
733
790
|
}
|
|
734
791
|
}
|
|
@@ -756,14 +813,7 @@ var DataTable = ({
|
|
|
756
813
|
const extra = col.editProps || {};
|
|
757
814
|
const validate = col.editValidate;
|
|
758
815
|
const validationProps = validate && editError ? { error: true, validationMessage: editError } : {};
|
|
759
|
-
const onInputValidate = validate ? (val) =>
|
|
760
|
-
const result = validate(val, row);
|
|
761
|
-
if (result !== true && result !== void 0 && result !== null) {
|
|
762
|
-
setEditError(typeof result === "string" ? result : "Invalid value");
|
|
763
|
-
} else {
|
|
764
|
-
setEditError(null);
|
|
765
|
-
}
|
|
766
|
-
} : void 0;
|
|
816
|
+
const onInputValidate = validate ? (val) => setEditError(editValidationError(validate(val, row))) : void 0;
|
|
767
817
|
const handleInput = (val) => {
|
|
768
818
|
setEditValue(val);
|
|
769
819
|
if (onInputValidate) onInputValidate(val);
|
|
@@ -781,42 +831,42 @@ var DataTable = ({
|
|
|
781
831
|
};
|
|
782
832
|
switch (type) {
|
|
783
833
|
case "textarea":
|
|
784
|
-
return /* @__PURE__ */
|
|
834
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TextArea, { ...extra, name: fieldName, label: "", value: editValue ?? "", onChange: commit, onBlur: exitEdit, ...validationProps, onInput: handleInput });
|
|
785
835
|
case "number":
|
|
786
|
-
return /* @__PURE__ */
|
|
836
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.NumberInput, { ...extra, name: fieldName, label: "", value: editValue, onChange: commit, onBlur: exitEdit, ...validationProps, onInput: handleInput });
|
|
787
837
|
case "currency":
|
|
788
|
-
return /* @__PURE__ */
|
|
838
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.CurrencyInput, { currencyCode: "USD", ...extra, name: fieldName, label: "", value: editValue, onChange: commit, onBlur: exitEdit, ...validationProps, onInput: handleInput });
|
|
789
839
|
case "stepper":
|
|
790
|
-
return /* @__PURE__ */
|
|
840
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.StepperInput, { ...extra, name: fieldName, label: "", value: editValue, onChange: commit, onBlur: exitEdit, ...validationProps, onInput: handleInput });
|
|
791
841
|
case "select":
|
|
792
|
-
return /* @__PURE__ */
|
|
842
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Select, { variant: "transparent", ...extra, name: fieldName, label: "", value: editValue, onChange: commit, options: resolveEditOptions(col, data) });
|
|
793
843
|
case "multiselect":
|
|
794
|
-
return /* @__PURE__ */
|
|
844
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.MultiSelect, { ...extra, name: fieldName, label: "", value: editValue || [], onChange: commit, options: resolveEditOptions(col, data) });
|
|
795
845
|
case "date":
|
|
796
|
-
return /* @__PURE__ */
|
|
846
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.DateInput, { ...extra, name: fieldName, label: "", value: editValue, onChange: commit });
|
|
797
847
|
case "time":
|
|
798
|
-
return /* @__PURE__ */
|
|
848
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TimeInput, { ...extra, name: fieldName, label: "", value: editValue, onChange: commit });
|
|
799
849
|
case "datetime":
|
|
800
|
-
return /* @__PURE__ */
|
|
850
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", align: "center", gap: "xs", wrap: "nowrap" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.DateInput, { ...extra, name: `${fieldName}-date`, label: "", value: editValue == null ? void 0 : editValue.date, onChange: (val) => {
|
|
801
851
|
const next = { ...editValue, date: val };
|
|
802
852
|
handleInput(next);
|
|
803
853
|
commitEdit(row, col.field, next, { keepEditing: true });
|
|
804
|
-
}, onBlur: maybeExitDatetimeEdit }), /* @__PURE__ */
|
|
854
|
+
}, onBlur: maybeExitDatetimeEdit }), /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TimeInput, { ...extra.timeProps || {}, name: `${fieldName}-time`, label: "", value: editValue == null ? void 0 : editValue.time, onChange: (val) => {
|
|
805
855
|
const next = { ...editValue, time: val };
|
|
806
856
|
handleInput(next);
|
|
807
857
|
commitEdit(row, col.field, next, { keepEditing: true });
|
|
808
858
|
}, onBlur: maybeExitDatetimeEdit }));
|
|
809
859
|
case "toggle":
|
|
810
|
-
return /* @__PURE__ */
|
|
860
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Toggle, { ...extra, name: fieldName, label: "", checked: !!editValue, onChange: commit });
|
|
811
861
|
case "checkbox":
|
|
812
|
-
return /* @__PURE__ */
|
|
862
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Checkbox, { ...extra, name: fieldName, checked: !!editValue, onChange: commit });
|
|
813
863
|
default:
|
|
814
|
-
return /* @__PURE__ */
|
|
864
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Input, { ...extra, name: fieldName, label: "", value: editValue ?? "", onChange: commit, onBlur: exitEdit, ...validationProps, onInput: handleInput });
|
|
815
865
|
}
|
|
816
866
|
};
|
|
817
867
|
const resolvedEditMode = editMode || (columns.some((col) => col.editable) ? "discrete" : null);
|
|
818
868
|
const useColumnRendering = selectable || !!resolvedEditMode || editingRowId != null || showRowActionsColumn || !renderRow;
|
|
819
|
-
const autoWidths = (0,
|
|
869
|
+
const autoWidths = (0, import_react2.useMemo)(
|
|
820
870
|
() => autoWidth ? computeAutoWidths(columns, data) : {},
|
|
821
871
|
[columns, data, autoWidth]
|
|
822
872
|
);
|
|
@@ -829,7 +879,7 @@ var DataTable = ({
|
|
|
829
879
|
var _a;
|
|
830
880
|
return col.cellWidth || col.width || ((_a = autoWidths[col.field]) == null ? void 0 : _a.cellWidth) || defaultWidth;
|
|
831
881
|
};
|
|
832
|
-
const [inlineErrors, setInlineErrors] = (0,
|
|
882
|
+
const [inlineErrors, setInlineErrors] = (0, import_react2.useState)({});
|
|
833
883
|
const renderInlineControl = (col, row) => {
|
|
834
884
|
const type = col.editType || "text";
|
|
835
885
|
const rowId = row[rowIdField];
|
|
@@ -839,9 +889,9 @@ var DataTable = ({
|
|
|
839
889
|
const validate = col.editValidate;
|
|
840
890
|
const fire = (val) => {
|
|
841
891
|
if (validate) {
|
|
842
|
-
const
|
|
843
|
-
if (
|
|
844
|
-
setInlineErrors((prev) => ({ ...prev, [cellKey]:
|
|
892
|
+
const err = editValidationError(validate(val, row));
|
|
893
|
+
if (err) {
|
|
894
|
+
setInlineErrors((prev) => ({ ...prev, [cellKey]: err }));
|
|
845
895
|
return;
|
|
846
896
|
}
|
|
847
897
|
setInlineErrors((prev) => {
|
|
@@ -856,16 +906,13 @@ var DataTable = ({
|
|
|
856
906
|
const cellError = inlineErrors[cellKey];
|
|
857
907
|
const validationProps = cellError ? { error: true, validationMessage: cellError } : {};
|
|
858
908
|
const onInputValidate = validate ? (val) => {
|
|
859
|
-
const
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
return next;
|
|
867
|
-
});
|
|
868
|
-
}
|
|
909
|
+
const err = editValidationError(validate(val, row));
|
|
910
|
+
setInlineErrors((prev) => {
|
|
911
|
+
if (err) return { ...prev, [cellKey]: err };
|
|
912
|
+
const next = { ...prev };
|
|
913
|
+
delete next[cellKey];
|
|
914
|
+
return next;
|
|
915
|
+
});
|
|
869
916
|
} : void 0;
|
|
870
917
|
const emitInput = (val) => {
|
|
871
918
|
if (onInputValidate) onInputValidate(val);
|
|
@@ -873,33 +920,33 @@ var DataTable = ({
|
|
|
873
920
|
};
|
|
874
921
|
switch (type) {
|
|
875
922
|
case "textarea":
|
|
876
|
-
return /* @__PURE__ */
|
|
923
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TextArea, { ...extra, name: fieldName, label: "", value: value ?? "", onChange: fire, ...validationProps, onInput: emitInput });
|
|
877
924
|
case "number":
|
|
878
|
-
return /* @__PURE__ */
|
|
925
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.NumberInput, { ...extra, name: fieldName, label: "", value, onChange: fire, ...validationProps, onInput: emitInput });
|
|
879
926
|
case "currency":
|
|
880
|
-
return /* @__PURE__ */
|
|
927
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.CurrencyInput, { currencyCode: "USD", ...extra, name: fieldName, label: "", value, onChange: fire, ...validationProps, onInput: emitInput });
|
|
881
928
|
case "stepper":
|
|
882
|
-
return /* @__PURE__ */
|
|
929
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.StepperInput, { ...extra, name: fieldName, label: "", value, onChange: fire, ...validationProps, onInput: emitInput });
|
|
883
930
|
case "select":
|
|
884
|
-
return /* @__PURE__ */
|
|
931
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Select, { ...extra, name: fieldName, label: "", value, onChange: fire, options: resolveEditOptions(col, data) });
|
|
885
932
|
case "multiselect":
|
|
886
|
-
return /* @__PURE__ */
|
|
933
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.MultiSelect, { ...extra, name: fieldName, label: "", value: value || [], onChange: fire, options: resolveEditOptions(col, data) });
|
|
887
934
|
case "date":
|
|
888
|
-
return /* @__PURE__ */
|
|
935
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.DateInput, { ...extra, name: fieldName, label: "", value, onChange: fire });
|
|
889
936
|
case "time":
|
|
890
|
-
return /* @__PURE__ */
|
|
937
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TimeInput, { ...extra, name: fieldName, label: "", value, onChange: fire });
|
|
891
938
|
case "datetime":
|
|
892
|
-
return /* @__PURE__ */
|
|
939
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", align: "center", gap: "xs", wrap: "nowrap" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.DateInput, { ...extra, name: `${fieldName}-date`, label: "", value: value == null ? void 0 : value.date, onChange: (val) => {
|
|
893
940
|
fire({ ...value, date: val });
|
|
894
|
-
} }), /* @__PURE__ */
|
|
941
|
+
} }), /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TimeInput, { ...extra.timeProps || {}, name: `${fieldName}-time`, label: "", value: value == null ? void 0 : value.time, onChange: (val) => {
|
|
895
942
|
fire({ ...value, time: val });
|
|
896
943
|
} }));
|
|
897
944
|
case "toggle":
|
|
898
|
-
return /* @__PURE__ */
|
|
945
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Toggle, { ...extra, name: fieldName, label: "", checked: !!value, onChange: fire });
|
|
899
946
|
case "checkbox":
|
|
900
|
-
return /* @__PURE__ */
|
|
947
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Checkbox, { ...extra, name: fieldName, checked: !!value, onChange: fire });
|
|
901
948
|
default:
|
|
902
|
-
return /* @__PURE__ */
|
|
949
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Input, { ...extra, name: fieldName, label: "", value: value ?? "", onChange: fire, ...validationProps, onInput: emitInput });
|
|
903
950
|
}
|
|
904
951
|
};
|
|
905
952
|
const renderCellContent = (row, col) => {
|
|
@@ -919,30 +966,30 @@ var DataTable = ({
|
|
|
919
966
|
if (col.renderCell) {
|
|
920
967
|
const content2 = col.renderCell(rawValue, row);
|
|
921
968
|
if (col.editable) {
|
|
922
|
-
return /* @__PURE__ */
|
|
969
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Link, { variant: "dark", onClick: () => startEditing(rowId, col.field, rawValue) }, content2 || "--");
|
|
923
970
|
}
|
|
924
971
|
return content2;
|
|
925
972
|
}
|
|
926
973
|
if (col.editable) {
|
|
927
|
-
return /* @__PURE__ */
|
|
974
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, { truncate: { tooltipText: rawStr } }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Link, { variant: "dark", onClick: () => startEditing(rowId, col.field, rawValue) }, rawStr || "--"));
|
|
928
975
|
}
|
|
929
|
-
return /* @__PURE__ */
|
|
976
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, { truncate: { tooltipText: rawStr } }, rawStr);
|
|
930
977
|
}
|
|
931
978
|
const maxLen = typeof col.truncate === "number" ? col.truncate : col.truncate.maxLength || 100;
|
|
932
979
|
if (rawStr.length > maxLen) {
|
|
933
980
|
const truncatedStr = rawStr.slice(0, maxLen) + "\u2026";
|
|
934
981
|
const content2 = col.renderCell ? col.renderCell(truncatedStr, row) : truncatedStr;
|
|
935
982
|
if (col.editable) {
|
|
936
|
-
return /* @__PURE__ */
|
|
983
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Link, { variant: "dark", onClick: () => startEditing(rowId, col.field, rawValue) }, content2 || "--");
|
|
937
984
|
}
|
|
938
|
-
return col.renderCell ? content2 : /* @__PURE__ */
|
|
985
|
+
return col.renderCell ? content2 : /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, { truncate: { tooltipText: rawStr } }, content2 || "--");
|
|
939
986
|
}
|
|
940
987
|
}
|
|
941
988
|
const content = col.renderCell ? col.renderCell(rawValue, row) : rawValue;
|
|
942
989
|
const isEmpty = content == null || content === "";
|
|
943
990
|
if (col.editable) {
|
|
944
|
-
return /* @__PURE__ */
|
|
945
|
-
|
|
991
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
992
|
+
import_ui_extensions2.Link,
|
|
946
993
|
{
|
|
947
994
|
variant: "dark",
|
|
948
995
|
onClick: () => startEditing(rowId, col.field, rawValue)
|
|
@@ -955,8 +1002,8 @@ var DataTable = ({
|
|
|
955
1002
|
const renderFilterControl = (filter) => {
|
|
956
1003
|
const type = filter.type || "select";
|
|
957
1004
|
if (type === "multiselect") {
|
|
958
|
-
return /* @__PURE__ */
|
|
959
|
-
|
|
1005
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
1006
|
+
import_ui_extensions2.MultiSelect,
|
|
960
1007
|
{
|
|
961
1008
|
key: filter.name,
|
|
962
1009
|
name: `filter-${filter.name}`,
|
|
@@ -970,8 +1017,8 @@ var DataTable = ({
|
|
|
970
1017
|
}
|
|
971
1018
|
if (type === "dateRange") {
|
|
972
1019
|
const rangeVal = filterValues[filter.name] || { from: null, to: null };
|
|
973
|
-
return /* @__PURE__ */
|
|
974
|
-
|
|
1020
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { key: filter.name, direction: "row", align: "center", gap: "xs" }, /* @__PURE__ */ import_react2.default.createElement(
|
|
1021
|
+
import_ui_extensions2.DateInput,
|
|
975
1022
|
{
|
|
976
1023
|
name: `filter-${filter.name}-from`,
|
|
977
1024
|
label: "",
|
|
@@ -980,8 +1027,8 @@ var DataTable = ({
|
|
|
980
1027
|
value: rangeVal.from,
|
|
981
1028
|
onChange: (val) => handleFilterChange(filter.name, { ...rangeVal, from: val })
|
|
982
1029
|
}
|
|
983
|
-
), /* @__PURE__ */
|
|
984
|
-
|
|
1030
|
+
), /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Icon, { name: "dataSync", size: "sm" }), /* @__PURE__ */ import_react2.default.createElement(
|
|
1031
|
+
import_ui_extensions2.DateInput,
|
|
985
1032
|
{
|
|
986
1033
|
size: "sm",
|
|
987
1034
|
name: `filter-${filter.name}-to`,
|
|
@@ -993,8 +1040,8 @@ var DataTable = ({
|
|
|
993
1040
|
}
|
|
994
1041
|
));
|
|
995
1042
|
}
|
|
996
|
-
return /* @__PURE__ */
|
|
997
|
-
|
|
1043
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
1044
|
+
import_ui_extensions2.Select,
|
|
998
1045
|
{
|
|
999
1046
|
key: filter.name,
|
|
1000
1047
|
name: `filter-${filter.name}`,
|
|
@@ -1009,33 +1056,33 @@ var DataTable = ({
|
|
|
1009
1056
|
}
|
|
1010
1057
|
);
|
|
1011
1058
|
};
|
|
1012
|
-
return /* @__PURE__ */
|
|
1013
|
-
|
|
1059
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "column", gap: "xs" }, title && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", align: "center", justify: "between", gap: "sm" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, { format: { fontWeight: "demibold" } }, title), countInTitleRow && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)), hasToolbarContent && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", gap: "sm" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Box, { flex: 3 }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "column", gap: "sm" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, showSearch && searchFields.length > 0 && /* @__PURE__ */ import_react2.default.createElement(
|
|
1060
|
+
import_ui_extensions2.SearchInput,
|
|
1014
1061
|
{
|
|
1015
1062
|
name: "datatable-search",
|
|
1016
1063
|
placeholder: searchPlaceholder,
|
|
1017
1064
|
value: internalSearchTerm,
|
|
1018
1065
|
onChange: handleSearchChange
|
|
1019
1066
|
}
|
|
1020
|
-
), filters.slice(0, filterInlineLimit).map(renderFilterControl), filters.length > filterInlineLimit && /* @__PURE__ */
|
|
1021
|
-
|
|
1067
|
+
), filters.slice(0, filterInlineLimit).map(renderFilterControl), filters.length > filterInlineLimit && /* @__PURE__ */ import_react2.default.createElement(
|
|
1068
|
+
import_ui_extensions2.Button,
|
|
1022
1069
|
{
|
|
1023
1070
|
variant: "transparent",
|
|
1024
1071
|
size: "small",
|
|
1025
1072
|
onClick: () => setShowMoreFilters((prev) => !prev)
|
|
1026
1073
|
},
|
|
1027
|
-
/* @__PURE__ */
|
|
1074
|
+
/* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Icon, { name: "filter", size: "sm" }),
|
|
1028
1075
|
" ",
|
|
1029
1076
|
resolvedFiltersButtonLabel
|
|
1030
|
-
)), showMoreFilters && filters.length > filterInlineLimit && /* @__PURE__ */
|
|
1031
|
-
|
|
1077
|
+
)), showMoreFilters && filters.length > filterInlineLimit && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, filters.slice(filterInlineLimit).map(renderFilterControl)), activeChips.length > 0 && (showFilterBadges || resolvedShowClearFiltersButton) && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", align: "center", gap: "sm", wrap: "wrap" }, showFilterBadges && activeChips.map((chip) => /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Tag, { key: chip.key, variant: "default", onDelete: () => handleFilterRemove(chip.key) }, chip.label)), resolvedShowClearFiltersButton && /* @__PURE__ */ import_react2.default.createElement(
|
|
1078
|
+
import_ui_extensions2.Button,
|
|
1032
1079
|
{
|
|
1033
1080
|
variant: "transparent",
|
|
1034
1081
|
size: "extra-small",
|
|
1035
1082
|
onClick: () => handleFilterRemove("all")
|
|
1036
1083
|
},
|
|
1037
1084
|
resolvedClearAllLabel
|
|
1038
|
-
)))),
|
|
1085
|
+
)))), countInToolbar && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Box, { flex: 1, alignSelf: "end" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", justify: "end" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel)))), showSelectionBar && selectable && selectedIds.size > 0 && (renderSelectionBar ? renderSelectionBar({
|
|
1039
1086
|
selectedIds,
|
|
1040
1087
|
selectedCount: selectedIds.size,
|
|
1041
1088
|
displayCount,
|
|
@@ -1044,23 +1091,27 @@ var DataTable = ({
|
|
|
1044
1091
|
onSelectAll: handleSelectAllRows,
|
|
1045
1092
|
onDeselectAll: handleDeselectAll,
|
|
1046
1093
|
selectionActions
|
|
1047
|
-
}) : /* @__PURE__ */
|
|
1048
|
-
|
|
1094
|
+
}) : /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", gap: "sm" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Box, { flex: 3 }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", align: "center", gap: "sm", wrap: "nowrap" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, { inline: true, format: { fontWeight: "demibold" } }, typeof resolvedSelectedLabel === "function" ? resolvedSelectedLabel(selectedIds.size, countLabel(selectedIds.size)) : resolvedSelectedLabel), selectedIds.size < (serverSide ? totalCount || data.length : allRowIds.length) && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Button, { variant: "transparent", size: "extra-small", onClick: handleSelectAllRows }, typeof resolvedSelectAllLabel === "function" ? resolvedSelectAllLabel(displayCount, countLabel(displayCount)) : resolvedSelectAllLabel), /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Button, { variant: "transparent", size: "extra-small", onClick: handleDeselectAll }, resolvedDeselectAllLabel), selectionActions.map((action, i) => /* @__PURE__ */ import_react2.default.createElement(
|
|
1095
|
+
import_ui_extensions2.Button,
|
|
1049
1096
|
{
|
|
1050
1097
|
key: i,
|
|
1051
1098
|
variant: action.variant || "transparent",
|
|
1052
1099
|
size: "extra-small",
|
|
1053
1100
|
onClick: () => action.onClick([...selectedIds])
|
|
1054
1101
|
},
|
|
1055
|
-
action.icon && /* @__PURE__ */
|
|
1102
|
+
action.icon && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Icon, { name: action.icon, size: "sm" }),
|
|
1056
1103
|
" ",
|
|
1057
1104
|
action.label
|
|
1058
|
-
)))), showRowCount && displayCount > 0 && /* @__PURE__ */
|
|
1105
|
+
)))), showRowCount && displayCount > 0 && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Box, { flex: 1, alignSelf: "center" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", justify: "end" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, { variant: "microcopy", format: rowCountBold ? { fontWeight: "bold" } : void 0 }, recordCountLabel))))), loading ? renderLoadingState ? renderLoadingState({ label: resolvedLoadingLabel }) : (
|
|
1106
|
+
// Same EmptyState layout as the empty state, just the "building" image
|
|
1107
|
+
// + a loading message — so loading and empty match with no layout shift.
|
|
1108
|
+
/* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Tile, null, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "column", align: "center", justify: "center" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.EmptyState, { title: resolvedLoadingLabel, imageName: "building", layout: "vertical" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, null, resolvedLoadingMessage))))
|
|
1109
|
+
) : error ? renderErrorState ? renderErrorState({
|
|
1059
1110
|
error,
|
|
1060
1111
|
title: typeof error === "string" ? error : resolvedErrorTitle,
|
|
1061
1112
|
message: typeof error === "string" ? resolvedRetryMessage : resolvedErrorMessage
|
|
1062
|
-
}) : /* @__PURE__ */
|
|
1063
|
-
|
|
1113
|
+
}) : /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.ErrorState, { title: typeof error === "string" ? error : resolvedErrorTitle }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, null, typeof error === "string" ? resolvedRetryMessage : resolvedErrorMessage)) : displayRows.length === 0 ? renderEmptyState ? renderEmptyState({ title: resolvedEmptyTitle, message: resolvedEmptyMessage }) : /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Tile, null, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "column", align: "center", justify: "center" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.EmptyState, { title: resolvedEmptyTitle, layout: "vertical" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, null, resolvedEmptyMessage)))) : /* @__PURE__ */ import_react2.default.createElement(
|
|
1114
|
+
import_ui_extensions2.Table,
|
|
1064
1115
|
{
|
|
1065
1116
|
bordered,
|
|
1066
1117
|
flush,
|
|
@@ -1072,8 +1123,8 @@ var DataTable = ({
|
|
|
1072
1123
|
showButtonLabels,
|
|
1073
1124
|
...maxVisiblePageButtons != null ? { maxVisiblePageButtons } : {}
|
|
1074
1125
|
},
|
|
1075
|
-
/* @__PURE__ */
|
|
1076
|
-
|
|
1126
|
+
/* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableHead, null, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableRow, null, selectable && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableHeader, { width: "min" }, /* @__PURE__ */ import_react2.default.createElement(
|
|
1127
|
+
import_ui_extensions2.Checkbox,
|
|
1077
1128
|
{
|
|
1078
1129
|
name: "datatable-select-all",
|
|
1079
1130
|
"aria-label": "Select all rows",
|
|
@@ -1082,8 +1133,8 @@ var DataTable = ({
|
|
|
1082
1133
|
}
|
|
1083
1134
|
)), columns.map((col) => {
|
|
1084
1135
|
const headerAlign = resolvedEditMode === "inline" && col.editable ? void 0 : col.align;
|
|
1085
|
-
return /* @__PURE__ */
|
|
1086
|
-
|
|
1136
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
1137
|
+
import_ui_extensions2.TableHeader,
|
|
1087
1138
|
{
|
|
1088
1139
|
key: col.field,
|
|
1089
1140
|
width: getHeaderWidth(col),
|
|
@@ -1091,22 +1142,22 @@ var DataTable = ({
|
|
|
1091
1142
|
sortDirection: col.sortable ? sortState[col.field] || "none" : "never",
|
|
1092
1143
|
onSortChange: col.sortable ? () => handleSortChange(col.field) : void 0
|
|
1093
1144
|
},
|
|
1094
|
-
col.description ? /* @__PURE__ */
|
|
1145
|
+
col.description ? /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, col.label, "\xA0", /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Link, { inline: true, variant: "dark", overlay: /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Tooltip, null, col.description) }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Icon, { name: "info", screenReaderText: typeof col.description === "string" ? col.description : void 0 }))) : col.label
|
|
1095
1146
|
);
|
|
1096
|
-
}), showRowActionsColumn && /* @__PURE__ */
|
|
1097
|
-
/* @__PURE__ */
|
|
1098
|
-
(item, idx) => item.type === "group-header" ? /* @__PURE__ */
|
|
1147
|
+
}), showRowActionsColumn && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableHeader, { width: "min" }))),
|
|
1148
|
+
/* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableBody, null, displayRows.map(
|
|
1149
|
+
(item, idx) => item.type === "group-header" ? /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableRow, { key: `group-${item.group.key}` }, selectable && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableCell, { width: "min" }), columns.map((col, colIdx) => {
|
|
1099
1150
|
var _a, _b, _c;
|
|
1100
|
-
return /* @__PURE__ */
|
|
1101
|
-
|
|
1151
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableCell, { key: col.field, width: getCellWidth(col), align: colIdx === 0 ? void 0 : col.align }, colIdx === 0 ? /* @__PURE__ */ import_react2.default.createElement(
|
|
1152
|
+
import_ui_extensions2.Link,
|
|
1102
1153
|
{
|
|
1103
1154
|
variant: "dark",
|
|
1104
1155
|
onClick: () => toggleGroup(item.group.key)
|
|
1105
1156
|
},
|
|
1106
|
-
/* @__PURE__ */
|
|
1157
|
+
/* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", align: "center", gap: "xs", wrap: "nowrap" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Icon, { name: expandedGroups.has(item.group.key) ? "downCarat" : "right" }), /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, { format: { fontWeight: "demibold" } }, item.group.label))
|
|
1107
1158
|
) : ((_a = groupBy.aggregations) == null ? void 0 : _a[col.field]) ? groupBy.aggregations[col.field](item.group.rows, item.group.key) : ((_c = (_b = groupBy.groupValues) == null ? void 0 : _b[item.group.key]) == null ? void 0 : _c[col.field]) ?? "");
|
|
1108
|
-
}), showRowActionsColumn && /* @__PURE__ */
|
|
1109
|
-
|
|
1159
|
+
}), showRowActionsColumn && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableCell, { width: "min" })) : useColumnRendering ? /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableRow, { key: item.row[rowIdField] ?? idx }, selectable && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableCell, { width: "min" }, /* @__PURE__ */ import_react2.default.createElement(
|
|
1160
|
+
import_ui_extensions2.Checkbox,
|
|
1110
1161
|
{
|
|
1111
1162
|
name: `select-${item.row[rowIdField]}`,
|
|
1112
1163
|
"aria-label": "Select row",
|
|
@@ -1119,28 +1170,28 @@ var DataTable = ({
|
|
|
1119
1170
|
const isRowEditing = editingRowId != null && rowId === editingRowId && col.editable;
|
|
1120
1171
|
const isShowingInput = isDiscreteEditing || isRowEditing || resolvedEditMode === "inline" && col.editable;
|
|
1121
1172
|
const cellAlign = isShowingInput ? void 0 : col.align;
|
|
1122
|
-
return /* @__PURE__ */
|
|
1123
|
-
}), showRowActionsColumn && /* @__PURE__ */
|
|
1173
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableCell, { key: col.field, width: isDiscreteEditing || isRowEditing ? "auto" : getCellWidth(col), align: cellAlign }, renderCellContent(item.row, col));
|
|
1174
|
+
}), showRowActionsColumn && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableCell, { width: "min" }, /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Flex, { direction: "row", align: "center", gap: "xs", wrap: "nowrap" }, (() => {
|
|
1124
1175
|
const resolvedRowActions = typeof rowActions === "function" ? rowActions(item.row) : rowActions;
|
|
1125
1176
|
const actions = Array.isArray(resolvedRowActions) ? resolvedRowActions : [];
|
|
1126
|
-
return actions.map((action, i) => /* @__PURE__ */
|
|
1127
|
-
|
|
1177
|
+
return actions.map((action, i) => /* @__PURE__ */ import_react2.default.createElement(
|
|
1178
|
+
import_ui_extensions2.Button,
|
|
1128
1179
|
{
|
|
1129
1180
|
key: i,
|
|
1130
1181
|
variant: action.variant || "transparent",
|
|
1131
1182
|
size: "extra-small",
|
|
1132
1183
|
onClick: () => action.onClick(item.row)
|
|
1133
1184
|
},
|
|
1134
|
-
action.icon && /* @__PURE__ */
|
|
1185
|
+
action.icon && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Icon, { name: action.icon, size: "sm" }),
|
|
1135
1186
|
action.label && ` ${action.label}`
|
|
1136
1187
|
));
|
|
1137
1188
|
})()))) : renderRow(item.row)
|
|
1138
1189
|
)),
|
|
1139
|
-
(footer || columns.some((col) => col.footer)) && /* @__PURE__ */
|
|
1190
|
+
(footer || columns.some((col) => col.footer)) && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableFooter, null, typeof footer === "function" ? footer(footerData) : /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableRow, null, selectable && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableHeader, { width: "min" }), columns.map((col) => {
|
|
1140
1191
|
const footerDef = col.footer;
|
|
1141
1192
|
const content = typeof footerDef === "function" ? footerDef(footerData) : footerDef || "";
|
|
1142
|
-
return /* @__PURE__ */
|
|
1143
|
-
}), showRowActionsColumn && /* @__PURE__ */
|
|
1193
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableHeader, { key: col.field, align: col.align }, content);
|
|
1194
|
+
}), showRowActionsColumn && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TableHeader, { width: "min" })))
|
|
1144
1195
|
));
|
|
1145
1196
|
};
|
|
1146
1197
|
// Annotate the CommonJS export names for ESM import in node:
|