@datum-cloud/datum-ui 2.3.2 → 2.4.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/dist/components/features/data-table/types.d.ts +6 -0
- package/dist/data-table/index.mjs +1 -1
- package/dist/{data-table-Du7_FLBi.mjs → data-table-ClfRpyHq.mjs} +25 -5
- package/dist/grouped-table/index.mjs +1 -1
- package/dist/{grouped-table-C5V8ESJe.mjs → grouped-table-Bb9KoI1e.mjs} +1 -1
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
|
@@ -333,4 +333,10 @@ export interface CreateStoreOptions<TData extends RowData> {
|
|
|
333
333
|
readonly filterFns?: FilterFnMap;
|
|
334
334
|
readonly isLoading?: boolean;
|
|
335
335
|
readonly columnCount?: number;
|
|
336
|
+
/**
|
|
337
|
+
* Row identity, used to reconcile `rowSelection` across data changes.
|
|
338
|
+
* When omitted, TanStack falls back to array-index ids, which are
|
|
339
|
+
* meaningless across a data change — so selection is cleared instead.
|
|
340
|
+
*/
|
|
341
|
+
readonly getRowId?: (row: TData) => string;
|
|
336
342
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as useNuqsAdapter, a as useDataTablePagination, b as DEFAULT_PAGE_SIZE, c as useDataTableSelection, d as resolvePath, f as rowMatchesSearch, g as createSelectionColumn, h as DataTableColumnHeader, i as useDataTableLoading, l as useDataTableSorting, m as DataTableRowActions, n as useDataTableFilters, o as useDataTableRows, p as dataTableFeatures, r as useDataTableInlineContents, s as useDataTableSearch, t as DataTable, u as createDataTableStore, v as DEFAULT_DEBOUNCE_MS, x as DEFAULT_PAGE_SIZES, y as DEFAULT_LOADING_ROWS } from "../data-table-
|
|
1
|
+
import { _ as useNuqsAdapter, a as useDataTablePagination, b as DEFAULT_PAGE_SIZE, c as useDataTableSelection, d as resolvePath, f as rowMatchesSearch, g as createSelectionColumn, h as DataTableColumnHeader, i as useDataTableLoading, l as useDataTableSorting, m as DataTableRowActions, n as useDataTableFilters, o as useDataTableRows, p as dataTableFeatures, r as useDataTableInlineContents, s as useDataTableSearch, t as DataTable, u as createDataTableStore, v as DEFAULT_DEBOUNCE_MS, x as DEFAULT_PAGE_SIZES, y as DEFAULT_LOADING_ROWS } from "../data-table-ClfRpyHq.mjs";
|
|
2
2
|
export { DEFAULT_DEBOUNCE_MS, DEFAULT_LOADING_ROWS, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZES, DataTable, DataTableColumnHeader, DataTableRowActions, createDataTableStore, createSelectionColumn, dataTableFeatures, resolvePath, rowMatchesSearch, useDataTableFilters, useDataTableInlineContents, useDataTableLoading, useDataTablePagination, useDataTableRows, useDataTableSearch, useDataTableSelection, useDataTableSorting, useNuqsAdapter };
|
|
@@ -313,6 +313,20 @@ function applyFilters(data, filters, search, registeredFilters, customFilterFns,
|
|
|
313
313
|
}
|
|
314
314
|
//#endregion
|
|
315
315
|
//#region src/components/features/data-table/core/store.ts
|
|
316
|
+
/**
|
|
317
|
+
* Keep only the selection keys whose rows survive a data change.
|
|
318
|
+
* Dropping vanished keys stops a deleted row's selection from
|
|
319
|
+
* resurrecting if a row with the same id reappears later.
|
|
320
|
+
*/
|
|
321
|
+
function pruneSelection(selection, rows, getRowId) {
|
|
322
|
+
const keys = Object.keys(selection);
|
|
323
|
+
if (keys.length === 0) return selection;
|
|
324
|
+
const surviving = /* @__PURE__ */ new Set();
|
|
325
|
+
for (const row of rows) surviving.add(getRowId(row));
|
|
326
|
+
const next = {};
|
|
327
|
+
for (const key of keys) if (selection[key] && surviving.has(key)) next[key] = true;
|
|
328
|
+
return next;
|
|
329
|
+
}
|
|
316
330
|
function createDataTableStore(options) {
|
|
317
331
|
let registeredFilters = /* @__PURE__ */ new Map();
|
|
318
332
|
const listeners = /* @__PURE__ */ new Set();
|
|
@@ -362,13 +376,17 @@ function createDataTableStore(options) {
|
|
|
362
376
|
setData: (data) => {
|
|
363
377
|
const next = {
|
|
364
378
|
...state,
|
|
365
|
-
data
|
|
366
|
-
pageIndex: 0,
|
|
367
|
-
rowSelection: {}
|
|
379
|
+
data
|
|
368
380
|
};
|
|
381
|
+
const filteredData = computeFilteredData(next);
|
|
382
|
+
const pageCount = Math.max(1, Math.ceil(filteredData.length / state.pageSize));
|
|
383
|
+
const pageIndex = Math.min(state.pageIndex, pageCount - 1);
|
|
384
|
+
const rowSelection = options.getRowId ? pruneSelection(state.rowSelection, filteredData, options.getRowId) : {};
|
|
369
385
|
setState({
|
|
370
386
|
...next,
|
|
371
|
-
filteredData
|
|
387
|
+
filteredData,
|
|
388
|
+
pageIndex,
|
|
389
|
+
rowSelection
|
|
372
390
|
});
|
|
373
391
|
},
|
|
374
392
|
setServerData: (data) => {
|
|
@@ -1168,6 +1186,7 @@ function useClientTable(store, options) {
|
|
|
1168
1186
|
}) : updater;
|
|
1169
1187
|
store.setPagination(next.pageIndex, next.pageSize);
|
|
1170
1188
|
},
|
|
1189
|
+
autoResetPageIndex: false,
|
|
1171
1190
|
getRowId,
|
|
1172
1191
|
enableRowSelection: !!enableRowSelection
|
|
1173
1192
|
});
|
|
@@ -1239,7 +1258,8 @@ function ClientProvider(props) {
|
|
|
1239
1258
|
columnCount: columns.length,
|
|
1240
1259
|
searchableColumns,
|
|
1241
1260
|
searchFn,
|
|
1242
|
-
filterFns
|
|
1261
|
+
filterFns,
|
|
1262
|
+
getRowId
|
|
1243
1263
|
}), []);
|
|
1244
1264
|
const isInitialRender = useRef(true);
|
|
1245
1265
|
useEffect(() => {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as GroupedTable } from "../grouped-table-
|
|
1
|
+
import { t as GroupedTable } from "../grouped-table-Bb9KoI1e.mjs";
|
|
2
2
|
export { GroupedTable };
|
|
@@ -5,7 +5,7 @@ import { Collapsible, CollapsibleTrigger } from "./collapsible/index.mjs";
|
|
|
5
5
|
import { t as useControllableState } from "./use-controllable-state-Dna7u3r9.mjs";
|
|
6
6
|
import { Skeleton } from "./skeleton/index.mjs";
|
|
7
7
|
import { TableBody, TableCell, TableHead, TableHeader, TableRow } from "./table/index.mjs";
|
|
8
|
-
import { f as rowMatchesSearch, g as createSelectionColumn, h as DataTableColumnHeader, m as DataTableRowActions, p as dataTableFeatures } from "./data-table-
|
|
8
|
+
import { f as rowMatchesSearch, g as createSelectionColumn, h as DataTableColumnHeader, m as DataTableRowActions, p as dataTableFeatures } from "./data-table-ClfRpyHq.mjs";
|
|
9
9
|
import { n as useDebouncedSearchInput } from "./use-debounced-search-input-yu_F0QBt.mjs";
|
|
10
10
|
import { InputWithAddons } from "./input-with-addons/index.mjs";
|
|
11
11
|
import { ChevronRight, Search, X } from "lucide-react";
|
package/dist/index.mjs
CHANGED
|
@@ -53,7 +53,7 @@ import { i as ClientOnly, n as useTheme, r as ThemeScript, t as ThemeProvider }
|
|
|
53
53
|
import { a as formatJson, c as isValidYaml, d as CodeEditor, i as CodeEditorTabs, l as jsonToYaml, n as jsonSchema, o as formatYaml, r as yamlSchema, s as isValidJson, t as createCodeEditorSchema, u as yamlToJson } from "./types-agDpVXBG.mjs";
|
|
54
54
|
import { t as toast } from "./toast-BUPlDkN3.mjs";
|
|
55
55
|
import { n as Toaster, t as useToast } from "./use-toast-Bpq0yJIT.mjs";
|
|
56
|
-
import { _ as useNuqsAdapter, a as useDataTablePagination, b as DEFAULT_PAGE_SIZE, c as useDataTableSelection, d as resolvePath, f as rowMatchesSearch, g as createSelectionColumn, h as DataTableColumnHeader, i as useDataTableLoading, l as useDataTableSorting, m as DataTableRowActions, n as useDataTableFilters, o as useDataTableRows, p as dataTableFeatures, r as useDataTableInlineContents, s as useDataTableSearch, t as DataTable, u as createDataTableStore, v as DEFAULT_DEBOUNCE_MS, x as DEFAULT_PAGE_SIZES, y as DEFAULT_LOADING_ROWS } from "./data-table-
|
|
56
|
+
import { _ as useNuqsAdapter, a as useDataTablePagination, b as DEFAULT_PAGE_SIZE, c as useDataTableSelection, d as resolvePath, f as rowMatchesSearch, g as createSelectionColumn, h as DataTableColumnHeader, i as useDataTableLoading, l as useDataTableSorting, m as DataTableRowActions, n as useDataTableFilters, o as useDataTableRows, p as dataTableFeatures, r as useDataTableInlineContents, s as useDataTableSearch, t as DataTable, u as createDataTableStore, v as DEFAULT_DEBOUNCE_MS, x as DEFAULT_PAGE_SIZES, y as DEFAULT_LOADING_ROWS } from "./data-table-ClfRpyHq.mjs";
|
|
57
57
|
import { t as ActionRow } from "./action-row-DTvs91_3.mjs";
|
|
58
58
|
import { n as useDebouncedSearchInput, t as DEFAULT_SEARCH_DEBOUNCE_MS } from "./use-debounced-search-input-yu_F0QBt.mjs";
|
|
59
59
|
import { t as MultiSelect } from "./multi-select-PtdMChPF.mjs";
|
|
@@ -69,7 +69,7 @@ import { InputWithAddons } from "./input-with-addons/index.mjs";
|
|
|
69
69
|
import { t as TimePicker } from "./time-picker-CFhaHTtI.mjs";
|
|
70
70
|
import { t as Transfer } from "./transfer-CEq9AhL7.mjs";
|
|
71
71
|
import { a as getResponsiveValue, c as GRID_COLUMNS, d as RESPONSIVE_MAP, i as getGutter, l as GRID_PREFIX, n as Row, o as registerMediaQuery, r as RowContext, s as GRID_BREAKPOINTS, t as Col, u as RESPONSIVE_ARRAY } from "./col-BYGWTB4j.mjs";
|
|
72
|
-
import { t as GroupedTable } from "./grouped-table-
|
|
72
|
+
import { t as GroupedTable } from "./grouped-table-Bb9KoI1e.mjs";
|
|
73
73
|
import { t as InputNumber } from "./input-number-TXmW-X9o.mjs";
|
|
74
74
|
import { a as logoStyles, i as LogoFlat, n as LogoStacked, r as LogoIcon, t as LogoText } from "./logo-text-Dpm5O6Kg.mjs";
|
|
75
75
|
import { t as Logo } from "./logo-C3FxD7jb.mjs";
|