hs-uix 1.6.5 → 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 +291 -239
- package/dist/datatable.mjs +207 -155
- package/dist/feed.js +939 -0
- package/dist/feed.mjs +927 -0
- package/dist/form.js +115 -93
- package/dist/form.mjs +115 -93
- package/dist/index.js +3529 -1060
- package/dist/index.mjs +3231 -770
- 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
|
|
@@ -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,47 +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
715
|
const showToolbarCount = showRowCount && displayCount > 0 && !(showSelectionBar && selectable && selectedIds.size > 0);
|
|
661
|
-
const
|
|
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;
|
|
662
720
|
const showRowActionsColumn = !!rowActions && !(hideRowActionsWhenSelectionActive && selectable && selectedIds.size > 0);
|
|
663
|
-
const applySelection = (0,
|
|
721
|
+
const applySelection = (0, import_react2.useCallback)((nextSet) => {
|
|
664
722
|
if (externalSelectedIds == null) {
|
|
665
723
|
setInternalSelectedIds(nextSet);
|
|
666
724
|
}
|
|
667
725
|
if (onSelectionChange) onSelectionChange([...nextSet]);
|
|
668
726
|
}, [externalSelectedIds, onSelectionChange]);
|
|
669
|
-
const pageRowIds = (0,
|
|
727
|
+
const pageRowIds = (0, import_react2.useMemo)(() => {
|
|
670
728
|
if (serverSide) {
|
|
671
729
|
return data.map((row) => row[rowIdField]).filter((id) => id != null);
|
|
672
730
|
}
|
|
673
731
|
return displayRows.filter((r) => r.type === "data").map((r) => r.row[rowIdField]).filter((id) => id != null);
|
|
674
732
|
}, [serverSide, data, displayRows, rowIdField]);
|
|
675
|
-
const allRowIds = (0,
|
|
733
|
+
const allRowIds = (0, import_react2.useMemo)(
|
|
676
734
|
() => datasetRows.map((row) => row[rowIdField]).filter((id) => id != null),
|
|
677
735
|
[datasetRows, rowIdField]
|
|
678
736
|
);
|
|
679
|
-
const handleSelectRow = (0,
|
|
737
|
+
const handleSelectRow = (0, import_react2.useCallback)((rowId, checked) => {
|
|
680
738
|
const next = new Set(selectedIds);
|
|
681
739
|
if (checked) next.add(rowId);
|
|
682
740
|
else next.delete(rowId);
|
|
683
741
|
applySelection(next);
|
|
684
742
|
}, [selectedIds, applySelection]);
|
|
685
|
-
const handleSelectAll = (0,
|
|
743
|
+
const handleSelectAll = (0, import_react2.useCallback)((checked) => {
|
|
686
744
|
const next = new Set(selectedIds);
|
|
687
745
|
pageRowIds.forEach((id) => {
|
|
688
746
|
if (checked) next.add(id);
|
|
@@ -690,10 +748,10 @@ var DataTable = ({
|
|
|
690
748
|
});
|
|
691
749
|
applySelection(next);
|
|
692
750
|
}, [selectedIds, pageRowIds, applySelection]);
|
|
693
|
-
const allVisibleSelected = (0,
|
|
751
|
+
const allVisibleSelected = (0, import_react2.useMemo)(() => {
|
|
694
752
|
return pageRowIds.length > 0 && pageRowIds.every((id) => selectedIds.has(id));
|
|
695
753
|
}, [pageRowIds, selectedIds]);
|
|
696
|
-
const handleSelectAllRows = (0,
|
|
754
|
+
const handleSelectAllRows = (0, import_react2.useCallback)(() => {
|
|
697
755
|
const idsToAdd = serverSide ? pageRowIds : allRowIds;
|
|
698
756
|
const next = new Set(selectedIds);
|
|
699
757
|
idsToAdd.forEach((id) => next.add(id));
|
|
@@ -706,13 +764,13 @@ var DataTable = ({
|
|
|
706
764
|
});
|
|
707
765
|
}
|
|
708
766
|
}, [serverSide, pageRowIds, allRowIds, selectedIds, applySelection, onSelectAllRequest, totalCount, data.length]);
|
|
709
|
-
const handleDeselectAll = (0,
|
|
767
|
+
const handleDeselectAll = (0, import_react2.useCallback)(() => {
|
|
710
768
|
applySelection(/* @__PURE__ */ new Set());
|
|
711
769
|
}, [applySelection]);
|
|
712
|
-
const [editingCell, setEditingCell] = (0,
|
|
713
|
-
const [editValue, setEditValue] = (0,
|
|
714
|
-
const [editError, setEditError] = (0,
|
|
715
|
-
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) => {
|
|
716
774
|
setEditingCell({ rowId, field });
|
|
717
775
|
setEditValue(currentValue);
|
|
718
776
|
setEditError(null);
|
|
@@ -721,13 +779,13 @@ var DataTable = ({
|
|
|
721
779
|
if (row) onEditStart(row, field, currentValue);
|
|
722
780
|
}
|
|
723
781
|
}, [onEditStart, data, rowIdField]);
|
|
724
|
-
const commitEdit = (0,
|
|
782
|
+
const commitEdit = (0, import_react2.useCallback)((row, field, value, options = {}) => {
|
|
725
783
|
const { keepEditing = false } = options;
|
|
726
784
|
const col = columns.find((c) => c.field === field);
|
|
727
785
|
if (col == null ? void 0 : col.editValidate) {
|
|
728
|
-
const
|
|
729
|
-
if (
|
|
730
|
-
setEditError(
|
|
786
|
+
const err = editValidationError(col.editValidate(value, row));
|
|
787
|
+
if (err) {
|
|
788
|
+
setEditError(err);
|
|
731
789
|
return false;
|
|
732
790
|
}
|
|
733
791
|
}
|
|
@@ -755,14 +813,7 @@ var DataTable = ({
|
|
|
755
813
|
const extra = col.editProps || {};
|
|
756
814
|
const validate = col.editValidate;
|
|
757
815
|
const validationProps = validate && editError ? { error: true, validationMessage: editError } : {};
|
|
758
|
-
const onInputValidate = validate ? (val) =>
|
|
759
|
-
const result = validate(val, row);
|
|
760
|
-
if (result !== true && result !== void 0 && result !== null) {
|
|
761
|
-
setEditError(typeof result === "string" ? result : "Invalid value");
|
|
762
|
-
} else {
|
|
763
|
-
setEditError(null);
|
|
764
|
-
}
|
|
765
|
-
} : void 0;
|
|
816
|
+
const onInputValidate = validate ? (val) => setEditError(editValidationError(validate(val, row))) : void 0;
|
|
766
817
|
const handleInput = (val) => {
|
|
767
818
|
setEditValue(val);
|
|
768
819
|
if (onInputValidate) onInputValidate(val);
|
|
@@ -780,42 +831,42 @@ var DataTable = ({
|
|
|
780
831
|
};
|
|
781
832
|
switch (type) {
|
|
782
833
|
case "textarea":
|
|
783
|
-
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 });
|
|
784
835
|
case "number":
|
|
785
|
-
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 });
|
|
786
837
|
case "currency":
|
|
787
|
-
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 });
|
|
788
839
|
case "stepper":
|
|
789
|
-
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 });
|
|
790
841
|
case "select":
|
|
791
|
-
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) });
|
|
792
843
|
case "multiselect":
|
|
793
|
-
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) });
|
|
794
845
|
case "date":
|
|
795
|
-
return /* @__PURE__ */
|
|
846
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.DateInput, { ...extra, name: fieldName, label: "", value: editValue, onChange: commit });
|
|
796
847
|
case "time":
|
|
797
|
-
return /* @__PURE__ */
|
|
848
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TimeInput, { ...extra, name: fieldName, label: "", value: editValue, onChange: commit });
|
|
798
849
|
case "datetime":
|
|
799
|
-
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) => {
|
|
800
851
|
const next = { ...editValue, date: val };
|
|
801
852
|
handleInput(next);
|
|
802
853
|
commitEdit(row, col.field, next, { keepEditing: true });
|
|
803
|
-
}, 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) => {
|
|
804
855
|
const next = { ...editValue, time: val };
|
|
805
856
|
handleInput(next);
|
|
806
857
|
commitEdit(row, col.field, next, { keepEditing: true });
|
|
807
858
|
}, onBlur: maybeExitDatetimeEdit }));
|
|
808
859
|
case "toggle":
|
|
809
|
-
return /* @__PURE__ */
|
|
860
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Toggle, { ...extra, name: fieldName, label: "", checked: !!editValue, onChange: commit });
|
|
810
861
|
case "checkbox":
|
|
811
|
-
return /* @__PURE__ */
|
|
862
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Checkbox, { ...extra, name: fieldName, checked: !!editValue, onChange: commit });
|
|
812
863
|
default:
|
|
813
|
-
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 });
|
|
814
865
|
}
|
|
815
866
|
};
|
|
816
867
|
const resolvedEditMode = editMode || (columns.some((col) => col.editable) ? "discrete" : null);
|
|
817
868
|
const useColumnRendering = selectable || !!resolvedEditMode || editingRowId != null || showRowActionsColumn || !renderRow;
|
|
818
|
-
const autoWidths = (0,
|
|
869
|
+
const autoWidths = (0, import_react2.useMemo)(
|
|
819
870
|
() => autoWidth ? computeAutoWidths(columns, data) : {},
|
|
820
871
|
[columns, data, autoWidth]
|
|
821
872
|
);
|
|
@@ -828,7 +879,7 @@ var DataTable = ({
|
|
|
828
879
|
var _a;
|
|
829
880
|
return col.cellWidth || col.width || ((_a = autoWidths[col.field]) == null ? void 0 : _a.cellWidth) || defaultWidth;
|
|
830
881
|
};
|
|
831
|
-
const [inlineErrors, setInlineErrors] = (0,
|
|
882
|
+
const [inlineErrors, setInlineErrors] = (0, import_react2.useState)({});
|
|
832
883
|
const renderInlineControl = (col, row) => {
|
|
833
884
|
const type = col.editType || "text";
|
|
834
885
|
const rowId = row[rowIdField];
|
|
@@ -838,9 +889,9 @@ var DataTable = ({
|
|
|
838
889
|
const validate = col.editValidate;
|
|
839
890
|
const fire = (val) => {
|
|
840
891
|
if (validate) {
|
|
841
|
-
const
|
|
842
|
-
if (
|
|
843
|
-
setInlineErrors((prev) => ({ ...prev, [cellKey]:
|
|
892
|
+
const err = editValidationError(validate(val, row));
|
|
893
|
+
if (err) {
|
|
894
|
+
setInlineErrors((prev) => ({ ...prev, [cellKey]: err }));
|
|
844
895
|
return;
|
|
845
896
|
}
|
|
846
897
|
setInlineErrors((prev) => {
|
|
@@ -855,16 +906,13 @@ var DataTable = ({
|
|
|
855
906
|
const cellError = inlineErrors[cellKey];
|
|
856
907
|
const validationProps = cellError ? { error: true, validationMessage: cellError } : {};
|
|
857
908
|
const onInputValidate = validate ? (val) => {
|
|
858
|
-
const
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
return next;
|
|
866
|
-
});
|
|
867
|
-
}
|
|
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
|
+
});
|
|
868
916
|
} : void 0;
|
|
869
917
|
const emitInput = (val) => {
|
|
870
918
|
if (onInputValidate) onInputValidate(val);
|
|
@@ -872,33 +920,33 @@ var DataTable = ({
|
|
|
872
920
|
};
|
|
873
921
|
switch (type) {
|
|
874
922
|
case "textarea":
|
|
875
|
-
return /* @__PURE__ */
|
|
923
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TextArea, { ...extra, name: fieldName, label: "", value: value ?? "", onChange: fire, ...validationProps, onInput: emitInput });
|
|
876
924
|
case "number":
|
|
877
|
-
return /* @__PURE__ */
|
|
925
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.NumberInput, { ...extra, name: fieldName, label: "", value, onChange: fire, ...validationProps, onInput: emitInput });
|
|
878
926
|
case "currency":
|
|
879
|
-
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 });
|
|
880
928
|
case "stepper":
|
|
881
|
-
return /* @__PURE__ */
|
|
929
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.StepperInput, { ...extra, name: fieldName, label: "", value, onChange: fire, ...validationProps, onInput: emitInput });
|
|
882
930
|
case "select":
|
|
883
|
-
return /* @__PURE__ */
|
|
931
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Select, { ...extra, name: fieldName, label: "", value, onChange: fire, options: resolveEditOptions(col, data) });
|
|
884
932
|
case "multiselect":
|
|
885
|
-
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) });
|
|
886
934
|
case "date":
|
|
887
|
-
return /* @__PURE__ */
|
|
935
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.DateInput, { ...extra, name: fieldName, label: "", value, onChange: fire });
|
|
888
936
|
case "time":
|
|
889
|
-
return /* @__PURE__ */
|
|
937
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.TimeInput, { ...extra, name: fieldName, label: "", value, onChange: fire });
|
|
890
938
|
case "datetime":
|
|
891
|
-
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) => {
|
|
892
940
|
fire({ ...value, date: val });
|
|
893
|
-
} }), /* @__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) => {
|
|
894
942
|
fire({ ...value, time: val });
|
|
895
943
|
} }));
|
|
896
944
|
case "toggle":
|
|
897
|
-
return /* @__PURE__ */
|
|
945
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Toggle, { ...extra, name: fieldName, label: "", checked: !!value, onChange: fire });
|
|
898
946
|
case "checkbox":
|
|
899
|
-
return /* @__PURE__ */
|
|
947
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Checkbox, { ...extra, name: fieldName, checked: !!value, onChange: fire });
|
|
900
948
|
default:
|
|
901
|
-
return /* @__PURE__ */
|
|
949
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Input, { ...extra, name: fieldName, label: "", value: value ?? "", onChange: fire, ...validationProps, onInput: emitInput });
|
|
902
950
|
}
|
|
903
951
|
};
|
|
904
952
|
const renderCellContent = (row, col) => {
|
|
@@ -918,30 +966,30 @@ var DataTable = ({
|
|
|
918
966
|
if (col.renderCell) {
|
|
919
967
|
const content2 = col.renderCell(rawValue, row);
|
|
920
968
|
if (col.editable) {
|
|
921
|
-
return /* @__PURE__ */
|
|
969
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Link, { variant: "dark", onClick: () => startEditing(rowId, col.field, rawValue) }, content2 || "--");
|
|
922
970
|
}
|
|
923
971
|
return content2;
|
|
924
972
|
}
|
|
925
973
|
if (col.editable) {
|
|
926
|
-
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 || "--"));
|
|
927
975
|
}
|
|
928
|
-
return /* @__PURE__ */
|
|
976
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, { truncate: { tooltipText: rawStr } }, rawStr);
|
|
929
977
|
}
|
|
930
978
|
const maxLen = typeof col.truncate === "number" ? col.truncate : col.truncate.maxLength || 100;
|
|
931
979
|
if (rawStr.length > maxLen) {
|
|
932
980
|
const truncatedStr = rawStr.slice(0, maxLen) + "\u2026";
|
|
933
981
|
const content2 = col.renderCell ? col.renderCell(truncatedStr, row) : truncatedStr;
|
|
934
982
|
if (col.editable) {
|
|
935
|
-
return /* @__PURE__ */
|
|
983
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Link, { variant: "dark", onClick: () => startEditing(rowId, col.field, rawValue) }, content2 || "--");
|
|
936
984
|
}
|
|
937
|
-
return col.renderCell ? content2 : /* @__PURE__ */
|
|
985
|
+
return col.renderCell ? content2 : /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Text, { truncate: { tooltipText: rawStr } }, content2 || "--");
|
|
938
986
|
}
|
|
939
987
|
}
|
|
940
988
|
const content = col.renderCell ? col.renderCell(rawValue, row) : rawValue;
|
|
941
989
|
const isEmpty = content == null || content === "";
|
|
942
990
|
if (col.editable) {
|
|
943
|
-
return /* @__PURE__ */
|
|
944
|
-
|
|
991
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
992
|
+
import_ui_extensions2.Link,
|
|
945
993
|
{
|
|
946
994
|
variant: "dark",
|
|
947
995
|
onClick: () => startEditing(rowId, col.field, rawValue)
|
|
@@ -954,8 +1002,8 @@ var DataTable = ({
|
|
|
954
1002
|
const renderFilterControl = (filter) => {
|
|
955
1003
|
const type = filter.type || "select";
|
|
956
1004
|
if (type === "multiselect") {
|
|
957
|
-
return /* @__PURE__ */
|
|
958
|
-
|
|
1005
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
1006
|
+
import_ui_extensions2.MultiSelect,
|
|
959
1007
|
{
|
|
960
1008
|
key: filter.name,
|
|
961
1009
|
name: `filter-${filter.name}`,
|
|
@@ -969,8 +1017,8 @@ var DataTable = ({
|
|
|
969
1017
|
}
|
|
970
1018
|
if (type === "dateRange") {
|
|
971
1019
|
const rangeVal = filterValues[filter.name] || { from: null, to: null };
|
|
972
|
-
return /* @__PURE__ */
|
|
973
|
-
|
|
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,
|
|
974
1022
|
{
|
|
975
1023
|
name: `filter-${filter.name}-from`,
|
|
976
1024
|
label: "",
|
|
@@ -979,8 +1027,8 @@ var DataTable = ({
|
|
|
979
1027
|
value: rangeVal.from,
|
|
980
1028
|
onChange: (val) => handleFilterChange(filter.name, { ...rangeVal, from: val })
|
|
981
1029
|
}
|
|
982
|
-
), /* @__PURE__ */
|
|
983
|
-
|
|
1030
|
+
), /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Icon, { name: "dataSync", size: "sm" }), /* @__PURE__ */ import_react2.default.createElement(
|
|
1031
|
+
import_ui_extensions2.DateInput,
|
|
984
1032
|
{
|
|
985
1033
|
size: "sm",
|
|
986
1034
|
name: `filter-${filter.name}-to`,
|
|
@@ -992,8 +1040,8 @@ var DataTable = ({
|
|
|
992
1040
|
}
|
|
993
1041
|
));
|
|
994
1042
|
}
|
|
995
|
-
return /* @__PURE__ */
|
|
996
|
-
|
|
1043
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
1044
|
+
import_ui_extensions2.Select,
|
|
997
1045
|
{
|
|
998
1046
|
key: filter.name,
|
|
999
1047
|
name: `filter-${filter.name}`,
|
|
@@ -1008,33 +1056,33 @@ var DataTable = ({
|
|
|
1008
1056
|
}
|
|
1009
1057
|
);
|
|
1010
1058
|
};
|
|
1011
|
-
return /* @__PURE__ */
|
|
1012
|
-
|
|
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,
|
|
1013
1061
|
{
|
|
1014
1062
|
name: "datatable-search",
|
|
1015
1063
|
placeholder: searchPlaceholder,
|
|
1016
1064
|
value: internalSearchTerm,
|
|
1017
1065
|
onChange: handleSearchChange
|
|
1018
1066
|
}
|
|
1019
|
-
), filters.slice(0, filterInlineLimit).map(renderFilterControl), filters.length > filterInlineLimit && /* @__PURE__ */
|
|
1020
|
-
|
|
1067
|
+
), filters.slice(0, filterInlineLimit).map(renderFilterControl), filters.length > filterInlineLimit && /* @__PURE__ */ import_react2.default.createElement(
|
|
1068
|
+
import_ui_extensions2.Button,
|
|
1021
1069
|
{
|
|
1022
1070
|
variant: "transparent",
|
|
1023
1071
|
size: "small",
|
|
1024
1072
|
onClick: () => setShowMoreFilters((prev) => !prev)
|
|
1025
1073
|
},
|
|
1026
|
-
/* @__PURE__ */
|
|
1074
|
+
/* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Icon, { name: "filter", size: "sm" }),
|
|
1027
1075
|
" ",
|
|
1028
1076
|
resolvedFiltersButtonLabel
|
|
1029
|
-
)), showMoreFilters && filters.length > filterInlineLimit && /* @__PURE__ */
|
|
1030
|
-
|
|
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,
|
|
1031
1079
|
{
|
|
1032
1080
|
variant: "transparent",
|
|
1033
1081
|
size: "extra-small",
|
|
1034
1082
|
onClick: () => handleFilterRemove("all")
|
|
1035
1083
|
},
|
|
1036
1084
|
resolvedClearAllLabel
|
|
1037
|
-
)))),
|
|
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({
|
|
1038
1086
|
selectedIds,
|
|
1039
1087
|
selectedCount: selectedIds.size,
|
|
1040
1088
|
displayCount,
|
|
@@ -1043,23 +1091,27 @@ var DataTable = ({
|
|
|
1043
1091
|
onSelectAll: handleSelectAllRows,
|
|
1044
1092
|
onDeselectAll: handleDeselectAll,
|
|
1045
1093
|
selectionActions
|
|
1046
|
-
}) : /* @__PURE__ */
|
|
1047
|
-
|
|
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,
|
|
1048
1096
|
{
|
|
1049
1097
|
key: i,
|
|
1050
1098
|
variant: action.variant || "transparent",
|
|
1051
1099
|
size: "extra-small",
|
|
1052
1100
|
onClick: () => action.onClick([...selectedIds])
|
|
1053
1101
|
},
|
|
1054
|
-
action.icon && /* @__PURE__ */
|
|
1102
|
+
action.icon && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Icon, { name: action.icon, size: "sm" }),
|
|
1055
1103
|
" ",
|
|
1056
1104
|
action.label
|
|
1057
|
-
)))), 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({
|
|
1058
1110
|
error,
|
|
1059
1111
|
title: typeof error === "string" ? error : resolvedErrorTitle,
|
|
1060
1112
|
message: typeof error === "string" ? resolvedRetryMessage : resolvedErrorMessage
|
|
1061
|
-
}) : /* @__PURE__ */
|
|
1062
|
-
|
|
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,
|
|
1063
1115
|
{
|
|
1064
1116
|
bordered,
|
|
1065
1117
|
flush,
|
|
@@ -1071,8 +1123,8 @@ var DataTable = ({
|
|
|
1071
1123
|
showButtonLabels,
|
|
1072
1124
|
...maxVisiblePageButtons != null ? { maxVisiblePageButtons } : {}
|
|
1073
1125
|
},
|
|
1074
|
-
/* @__PURE__ */
|
|
1075
|
-
|
|
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,
|
|
1076
1128
|
{
|
|
1077
1129
|
name: "datatable-select-all",
|
|
1078
1130
|
"aria-label": "Select all rows",
|
|
@@ -1081,8 +1133,8 @@ var DataTable = ({
|
|
|
1081
1133
|
}
|
|
1082
1134
|
)), columns.map((col) => {
|
|
1083
1135
|
const headerAlign = resolvedEditMode === "inline" && col.editable ? void 0 : col.align;
|
|
1084
|
-
return /* @__PURE__ */
|
|
1085
|
-
|
|
1136
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
1137
|
+
import_ui_extensions2.TableHeader,
|
|
1086
1138
|
{
|
|
1087
1139
|
key: col.field,
|
|
1088
1140
|
width: getHeaderWidth(col),
|
|
@@ -1090,22 +1142,22 @@ var DataTable = ({
|
|
|
1090
1142
|
sortDirection: col.sortable ? sortState[col.field] || "none" : "never",
|
|
1091
1143
|
onSortChange: col.sortable ? () => handleSortChange(col.field) : void 0
|
|
1092
1144
|
},
|
|
1093
|
-
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
|
|
1094
1146
|
);
|
|
1095
|
-
}), showRowActionsColumn && /* @__PURE__ */
|
|
1096
|
-
/* @__PURE__ */
|
|
1097
|
-
(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) => {
|
|
1098
1150
|
var _a, _b, _c;
|
|
1099
|
-
return /* @__PURE__ */
|
|
1100
|
-
|
|
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,
|
|
1101
1153
|
{
|
|
1102
1154
|
variant: "dark",
|
|
1103
1155
|
onClick: () => toggleGroup(item.group.key)
|
|
1104
1156
|
},
|
|
1105
|
-
/* @__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))
|
|
1106
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]) ?? "");
|
|
1107
|
-
}), showRowActionsColumn && /* @__PURE__ */
|
|
1108
|
-
|
|
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,
|
|
1109
1161
|
{
|
|
1110
1162
|
name: `select-${item.row[rowIdField]}`,
|
|
1111
1163
|
"aria-label": "Select row",
|
|
@@ -1118,28 +1170,28 @@ var DataTable = ({
|
|
|
1118
1170
|
const isRowEditing = editingRowId != null && rowId === editingRowId && col.editable;
|
|
1119
1171
|
const isShowingInput = isDiscreteEditing || isRowEditing || resolvedEditMode === "inline" && col.editable;
|
|
1120
1172
|
const cellAlign = isShowingInput ? void 0 : col.align;
|
|
1121
|
-
return /* @__PURE__ */
|
|
1122
|
-
}), 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" }, (() => {
|
|
1123
1175
|
const resolvedRowActions = typeof rowActions === "function" ? rowActions(item.row) : rowActions;
|
|
1124
1176
|
const actions = Array.isArray(resolvedRowActions) ? resolvedRowActions : [];
|
|
1125
|
-
return actions.map((action, i) => /* @__PURE__ */
|
|
1126
|
-
|
|
1177
|
+
return actions.map((action, i) => /* @__PURE__ */ import_react2.default.createElement(
|
|
1178
|
+
import_ui_extensions2.Button,
|
|
1127
1179
|
{
|
|
1128
1180
|
key: i,
|
|
1129
1181
|
variant: action.variant || "transparent",
|
|
1130
1182
|
size: "extra-small",
|
|
1131
1183
|
onClick: () => action.onClick(item.row)
|
|
1132
1184
|
},
|
|
1133
|
-
action.icon && /* @__PURE__ */
|
|
1185
|
+
action.icon && /* @__PURE__ */ import_react2.default.createElement(import_ui_extensions2.Icon, { name: action.icon, size: "sm" }),
|
|
1134
1186
|
action.label && ` ${action.label}`
|
|
1135
1187
|
));
|
|
1136
1188
|
})()))) : renderRow(item.row)
|
|
1137
1189
|
)),
|
|
1138
|
-
(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) => {
|
|
1139
1191
|
const footerDef = col.footer;
|
|
1140
1192
|
const content = typeof footerDef === "function" ? footerDef(footerData) : footerDef || "";
|
|
1141
|
-
return /* @__PURE__ */
|
|
1142
|
-
}), 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" })))
|
|
1143
1195
|
));
|
|
1144
1196
|
};
|
|
1145
1197
|
// Annotate the CommonJS export names for ESM import in node:
|