@tanstack/table-core 8.0.0-alpha.64 → 8.0.0-alpha.68
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/build/cjs/aggregationFns.js +25 -37
- package/build/cjs/aggregationFns.js.map +1 -1
- package/build/cjs/core.js +167 -47
- package/build/cjs/core.js.map +1 -1
- package/build/cjs/createTable.js +24 -40
- package/build/cjs/createTable.js.map +1 -1
- package/build/cjs/features/Cells.js +29 -35
- package/build/cjs/features/Cells.js.map +1 -1
- package/build/cjs/features/ColumnSizing.js +126 -218
- package/build/cjs/features/ColumnSizing.js.map +1 -1
- package/build/cjs/features/Columns.js +59 -86
- package/build/cjs/features/Columns.js.map +1 -1
- package/build/cjs/features/Expanding.js +78 -125
- package/build/cjs/features/Expanding.js.map +1 -1
- package/build/cjs/features/Filters.js +143 -218
- package/build/cjs/features/Filters.js.map +1 -1
- package/build/cjs/features/Grouping.js +70 -116
- package/build/cjs/features/Grouping.js.map +1 -1
- package/build/cjs/features/Headers.js +125 -205
- package/build/cjs/features/Headers.js.map +1 -1
- package/build/cjs/features/Ordering.js +31 -43
- package/build/cjs/features/Ordering.js.map +1 -1
- package/build/cjs/features/Pagination.js +64 -72
- package/build/cjs/features/Pagination.js.map +1 -1
- package/build/cjs/features/Pinning.js +96 -177
- package/build/cjs/features/Pinning.js.map +1 -1
- package/build/cjs/features/RowSelection.js +134 -205
- package/build/cjs/features/RowSelection.js.map +1 -1
- package/build/cjs/features/Rows.js +32 -22
- package/build/cjs/features/Rows.js.map +1 -1
- package/build/cjs/features/Sorting.js +62 -131
- package/build/cjs/features/Sorting.js.map +1 -1
- package/build/cjs/features/Visibility.js +53 -120
- package/build/cjs/features/Visibility.js.map +1 -1
- package/build/cjs/filterFns.js +52 -133
- package/build/cjs/filterFns.js.map +1 -1
- package/build/cjs/index.js +13 -13
- package/build/cjs/sortingFns.js +21 -21
- package/build/cjs/sortingFns.js.map +1 -1
- package/build/cjs/utils/filterRowsUtils.js +56 -41
- package/build/cjs/utils/filterRowsUtils.js.map +1 -1
- package/build/cjs/utils/getCoreRowModel.js +98 -0
- package/build/cjs/utils/getCoreRowModel.js.map +1 -0
- package/build/cjs/utils/getExpandedRowModel.js +18 -22
- package/build/cjs/utils/getExpandedRowModel.js.map +1 -1
- package/build/cjs/utils/getFacetedMinMaxValues.js +48 -0
- package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -0
- package/build/cjs/utils/getFacetedRowModel.js +50 -0
- package/build/cjs/utils/getFacetedRowModel.js.map +1 -0
- package/build/cjs/utils/getFacetedUniqueValues.js +48 -0
- package/build/cjs/utils/getFacetedUniqueValues.js.map +1 -0
- package/build/cjs/utils/getFilteredRowModel.js +130 -0
- package/build/cjs/utils/getFilteredRowModel.js.map +1 -0
- package/build/cjs/utils/getGroupedRowModel.js +126 -136
- package/build/cjs/utils/getGroupedRowModel.js.map +1 -1
- package/build/cjs/utils/getPaginationRowModel.js +39 -39
- package/build/cjs/utils/getPaginationRowModel.js.map +1 -1
- package/build/cjs/utils/getSortedRowModel.js +112 -0
- package/build/cjs/utils/getSortedRowModel.js.map +1 -0
- package/build/cjs/utils.js +36 -211
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +1970 -2956
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +390 -482
- package/build/types/core.d.ts +3 -5
- package/build/types/features/Cells.d.ts +1 -1
- package/build/types/features/ColumnSizing.d.ts +2 -13
- package/build/types/features/Columns.d.ts +1 -1
- package/build/types/features/Expanding.d.ts +1 -6
- package/build/types/features/Filters.d.ts +42 -30
- package/build/types/features/Grouping.d.ts +4 -10
- package/build/types/features/Pinning.d.ts +0 -4
- package/build/types/features/RowSelection.d.ts +1 -7
- package/build/types/features/Rows.d.ts +4 -3
- package/build/types/features/Sorting.d.ts +3 -14
- package/build/types/features/Visibility.d.ts +0 -4
- package/build/types/filterFns.d.ts +10 -52
- package/build/types/index.d.ts +6 -5
- package/build/types/types.d.ts +5 -17
- package/build/types/utils/filterRowsUtils.d.ts +3 -2
- package/build/types/utils/getCoreRowModel.d.ts +2 -0
- package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
- package/build/types/utils/getFacetedRowModel.d.ts +2 -0
- package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
- package/build/types/utils/{getCoreRowModelSync.d.ts → getFilteredRowModel.d.ts} +1 -1
- package/build/types/utils/getGroupedRowModel.d.ts +1 -1
- package/build/types/utils/getSortedRowModel.d.ts +2 -0
- package/build/types/utils.d.ts +2 -18
- package/build/umd/index.development.js +1948 -2935
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +2 -1
- package/src/core.ts +197 -46
- package/src/features/Cells.ts +10 -12
- package/src/features/ColumnSizing.ts +72 -129
- package/src/features/Columns.ts +16 -15
- package/src/features/Expanding.ts +58 -105
- package/src/features/Filters.ts +223 -226
- package/src/features/Grouping.ts +51 -79
- package/src/features/Headers.ts +18 -40
- package/src/features/Ordering.ts +1 -1
- package/src/features/Pagination.ts +1 -1
- package/src/features/Pinning.ts +73 -92
- package/src/features/RowSelection.ts +71 -120
- package/src/features/Rows.ts +21 -6
- package/src/features/Sorting.ts +39 -99
- package/src/features/Visibility.ts +21 -50
- package/src/filterFns.ts +74 -147
- package/src/index.ts +12 -5
- package/src/sortingFns.ts +11 -11
- package/src/types.ts +5 -18
- package/src/utils/filterRowsUtils.ts +59 -56
- package/src/utils/{getCoreRowModelSync.ts → getCoreRowModel.ts} +3 -9
- package/src/utils/getExpandedRowModel.ts +2 -2
- package/src/utils/getFacetedMinMaxValues.ts +37 -0
- package/src/utils/getFacetedRowModel.ts +50 -0
- package/src/utils/getFacetedUniqueValues.ts +37 -0
- package/src/utils/getFilteredRowModel.ts +150 -0
- package/src/utils/getGroupedRowModel.ts +53 -62
- package/src/utils/getPaginationRowModel.ts +1 -1
- package/src/utils/{getSortedRowModelSync.ts → getSortedRowModel.ts} +7 -7
- package/src/utils.ts +29 -239
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
- package/build/cjs/utils/getColumnFilteredRowModelSync.js +0 -115
- package/build/cjs/utils/getColumnFilteredRowModelSync.js.map +0 -1
- package/build/cjs/utils/getCoreRowModelAsync.js +0 -125
- package/build/cjs/utils/getCoreRowModelAsync.js.map +0 -1
- package/build/cjs/utils/getCoreRowModelSync.js +0 -102
- package/build/cjs/utils/getCoreRowModelSync.js.map +0 -1
- package/build/cjs/utils/getGlobalFilteredRowModelSync.js +0 -91
- package/build/cjs/utils/getGlobalFilteredRowModelSync.js.map +0 -1
- package/build/cjs/utils/getSortedRowModelSync.js +0 -118
- package/build/cjs/utils/getSortedRowModelSync.js.map +0 -1
- package/build/types/utils/getColumnFilteredRowModelAsync.d.ts +0 -4
- package/build/types/utils/getColumnFilteredRowModelSync.d.ts +0 -2
- package/build/types/utils/getCoreRowModelAsync.d.ts +0 -4
- package/build/types/utils/getGlobalFilteredRowModelAsync.d.ts +0 -4
- package/build/types/utils/getGlobalFilteredRowModelSync.d.ts +0 -2
- package/build/types/utils/getSortedRowModelAsync.d.ts +0 -13
- package/build/types/utils/getSortedRowModelSync.d.ts +0 -2
- package/src/utils/getColumnFilteredRowModelAsync.ts +0 -118
- package/src/utils/getColumnFilteredRowModelSync.ts +0 -102
- package/src/utils/getCoreRowModelAsync.ts +0 -104
- package/src/utils/getGlobalFilteredRowModelAsync.ts +0 -96
- package/src/utils/getGlobalFilteredRowModelSync.ts +0 -79
- package/src/utils/getSortedRowModelAsync.ts +0 -200
|
@@ -44,25 +44,16 @@ export type RowSelectionRow = {
|
|
|
44
44
|
getIsSomeSelected: () => boolean
|
|
45
45
|
getCanSelect: () => boolean
|
|
46
46
|
getCanMultiSelect: () => boolean
|
|
47
|
+
getCanSelectSubRows: () => boolean
|
|
47
48
|
toggleSelected: (value?: boolean) => void
|
|
48
49
|
getToggleSelectedHandler: () => (event: unknown) => void
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
export type RowSelectionInstance<TGenerics extends TableGenerics> = {
|
|
52
|
-
getToggleRowSelectedHandler: (
|
|
53
|
-
rowId: string
|
|
54
|
-
) => undefined | ((e: unknown) => void)
|
|
55
53
|
getToggleAllRowsSelectedHandler: () => (event: unknown) => void
|
|
56
54
|
getToggleAllPageRowsSelectedHandler: () => (event: unknown) => void
|
|
57
55
|
setRowSelection: (updater: Updater<RowSelectionState>) => void
|
|
58
56
|
resetRowSelection: () => void
|
|
59
|
-
toggleRowSelected: (rowId: string, value?: boolean) => void
|
|
60
|
-
getRowCanSelect: (rowId: string) => boolean
|
|
61
|
-
getRowCanSelectSubRows: (rowId: string) => boolean
|
|
62
|
-
getRowCanMultiSelect: (rowId: string) => boolean
|
|
63
|
-
// getGroupingRowCanSelect: (rowId: string) => boolean
|
|
64
|
-
getRowIsSelected: (rowId: string) => boolean
|
|
65
|
-
getRowIsSomeSelected: (rowId: string) => boolean
|
|
66
57
|
getIsAllRowsSelected: () => boolean
|
|
67
58
|
getIsAllPageRowsSelected: () => boolean
|
|
68
59
|
getIsSomeRowsSelected: () => boolean
|
|
@@ -148,24 +139,7 @@ export const RowSelection: TableFeature = {
|
|
|
148
139
|
|
|
149
140
|
return rowSelection
|
|
150
141
|
}),
|
|
151
|
-
toggleRowSelected: (rowId, value) => {
|
|
152
|
-
const row = instance.getRow(rowId)
|
|
153
|
-
const isSelected = row.getIsSelected()
|
|
154
|
-
|
|
155
|
-
instance.setRowSelection(old => {
|
|
156
|
-
value = typeof value !== 'undefined' ? value : !isSelected
|
|
157
|
-
|
|
158
|
-
if (isSelected === value) {
|
|
159
|
-
return old
|
|
160
|
-
}
|
|
161
142
|
|
|
162
|
-
const selectedRowIds = { ...old }
|
|
163
|
-
|
|
164
|
-
mutateRowIsSelected(selectedRowIds, rowId, value, instance)
|
|
165
|
-
|
|
166
|
-
return selectedRowIds
|
|
167
|
-
})
|
|
168
|
-
},
|
|
169
143
|
// addRowSelectionRange: rowId => {
|
|
170
144
|
// const {
|
|
171
145
|
// rows,
|
|
@@ -239,7 +213,7 @@ export const RowSelection: TableFeature = {
|
|
|
239
213
|
return selectRowsFn(instance, rowModel)
|
|
240
214
|
},
|
|
241
215
|
{
|
|
242
|
-
key: 'getSelectedRowModel',
|
|
216
|
+
key: process.env.NODE_ENV === 'development' && 'getSelectedRowModel',
|
|
243
217
|
debug: () => instance.options.debugAll ?? instance.options.debugTable,
|
|
244
218
|
}
|
|
245
219
|
),
|
|
@@ -247,7 +221,7 @@ export const RowSelection: TableFeature = {
|
|
|
247
221
|
getFilteredSelectedRowModel: memo(
|
|
248
222
|
() => [
|
|
249
223
|
instance.getState().rowSelection,
|
|
250
|
-
instance.
|
|
224
|
+
instance.getFilteredRowModel(),
|
|
251
225
|
],
|
|
252
226
|
(rowSelection, rowModel) => {
|
|
253
227
|
if (!Object.keys(rowSelection).length) {
|
|
@@ -261,7 +235,9 @@ export const RowSelection: TableFeature = {
|
|
|
261
235
|
return selectRowsFn(instance, rowModel)
|
|
262
236
|
},
|
|
263
237
|
{
|
|
264
|
-
key:
|
|
238
|
+
key:
|
|
239
|
+
process.env.NODE_ENV === 'production' &&
|
|
240
|
+
'getFilteredSelectedRowModel',
|
|
265
241
|
debug: () => instance.options.debugAll ?? instance.options.debugTable,
|
|
266
242
|
}
|
|
267
243
|
),
|
|
@@ -280,77 +256,15 @@ export const RowSelection: TableFeature = {
|
|
|
280
256
|
return selectRowsFn(instance, rowModel)
|
|
281
257
|
},
|
|
282
258
|
{
|
|
283
|
-
key:
|
|
259
|
+
key:
|
|
260
|
+
process.env.NODE_ENV === 'production' &&
|
|
261
|
+
'getGroupedSelectedRowModel',
|
|
284
262
|
debug: () => instance.options.debugAll ?? instance.options.debugTable,
|
|
285
263
|
}
|
|
286
264
|
),
|
|
287
265
|
|
|
288
266
|
///
|
|
289
267
|
|
|
290
|
-
getRowIsSelected: rowId => {
|
|
291
|
-
const { rowSelection } = instance.getState()
|
|
292
|
-
const row = instance.getRow(rowId)
|
|
293
|
-
|
|
294
|
-
if (!row) {
|
|
295
|
-
throw new Error()
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
return isRowSelected(row, rowSelection, instance) === true
|
|
299
|
-
},
|
|
300
|
-
|
|
301
|
-
getRowIsSomeSelected: rowId => {
|
|
302
|
-
const { rowSelection } = instance.getState()
|
|
303
|
-
const row = instance.getRow(rowId)
|
|
304
|
-
|
|
305
|
-
if (!row) {
|
|
306
|
-
throw new Error()
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
return isRowSelected(row, rowSelection, instance) === 'some'
|
|
310
|
-
},
|
|
311
|
-
|
|
312
|
-
getRowCanSelect: rowId => {
|
|
313
|
-
const row = instance.getRow(rowId)
|
|
314
|
-
|
|
315
|
-
if (!row) {
|
|
316
|
-
throw new Error()
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
if (typeof instance.options.enableRowSelection === 'function') {
|
|
320
|
-
return instance.options.enableRowSelection(row)
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
return instance.options.enableRowSelection ?? true
|
|
324
|
-
},
|
|
325
|
-
|
|
326
|
-
getRowCanSelectSubRows: rowId => {
|
|
327
|
-
const row = instance.getRow(rowId)
|
|
328
|
-
|
|
329
|
-
if (!row) {
|
|
330
|
-
throw new Error()
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
if (typeof instance.options.enableSubRowSelection === 'function') {
|
|
334
|
-
return instance.options.enableSubRowSelection(row)
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
return instance.options.enableSubRowSelection ?? true
|
|
338
|
-
},
|
|
339
|
-
|
|
340
|
-
getRowCanMultiSelect: rowId => {
|
|
341
|
-
const row = instance.getRow(rowId)
|
|
342
|
-
|
|
343
|
-
if (!row) {
|
|
344
|
-
throw new Error()
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
if (typeof instance.options.enableMultiRowSelection === 'function') {
|
|
348
|
-
return instance.options.enableMultiRowSelection(row)
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
return instance.options.enableMultiRowSelection ?? true
|
|
352
|
-
},
|
|
353
|
-
|
|
354
268
|
// getGroupingRowCanSelect: rowId => {
|
|
355
269
|
// const row = instance.getRow(rowId)
|
|
356
270
|
|
|
@@ -366,8 +280,7 @@ export const RowSelection: TableFeature = {
|
|
|
366
280
|
// },
|
|
367
281
|
|
|
368
282
|
getIsAllRowsSelected: () => {
|
|
369
|
-
const preFilteredFlatRows =
|
|
370
|
-
instance.getPreGlobalFilteredRowModel().flatRows
|
|
283
|
+
const preFilteredFlatRows = instance.getPreFilteredRowModel().flatRows
|
|
371
284
|
const { rowSelection } = instance.getState()
|
|
372
285
|
|
|
373
286
|
let isAllRowsSelected = Boolean(
|
|
@@ -413,21 +326,6 @@ export const RowSelection: TableFeature = {
|
|
|
413
326
|
: !!paginationFlatRows?.length
|
|
414
327
|
},
|
|
415
328
|
|
|
416
|
-
getToggleRowSelectedHandler: rowId => {
|
|
417
|
-
const row = instance.getRow(rowId)
|
|
418
|
-
|
|
419
|
-
const isSelected = row.getIsSelected()
|
|
420
|
-
const isSomeSelected = row.getIsSomeSelected()
|
|
421
|
-
const canSelect = row.getCanSelect()
|
|
422
|
-
|
|
423
|
-
return (e: unknown) => {
|
|
424
|
-
if (!canSelect) return
|
|
425
|
-
row.toggleSelected(
|
|
426
|
-
((e as MouseEvent).target as HTMLInputElement)?.checked
|
|
427
|
-
)
|
|
428
|
-
}
|
|
429
|
-
},
|
|
430
|
-
|
|
431
329
|
getToggleAllRowsSelectedHandler: () => {
|
|
432
330
|
return (e: unknown) => {
|
|
433
331
|
instance.toggleAllRowsSelected(
|
|
@@ -451,13 +349,66 @@ export const RowSelection: TableFeature = {
|
|
|
451
349
|
instance: TableInstance<TGenerics>
|
|
452
350
|
): RowSelectionRow => {
|
|
453
351
|
return {
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
352
|
+
toggleSelected: value => {
|
|
353
|
+
const isSelected = row.getIsSelected()
|
|
354
|
+
|
|
355
|
+
instance.setRowSelection(old => {
|
|
356
|
+
value = typeof value !== 'undefined' ? value : !isSelected
|
|
357
|
+
|
|
358
|
+
if (isSelected === value) {
|
|
359
|
+
return old
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
const selectedRowIds = { ...old }
|
|
363
|
+
|
|
364
|
+
mutateRowIsSelected(selectedRowIds, row.id, value, instance)
|
|
365
|
+
|
|
366
|
+
return selectedRowIds
|
|
367
|
+
})
|
|
368
|
+
},
|
|
369
|
+
getIsSelected: () => {
|
|
370
|
+
const { rowSelection } = instance.getState()
|
|
371
|
+
return isRowSelected(row, rowSelection, instance) === true
|
|
372
|
+
},
|
|
373
|
+
|
|
374
|
+
getIsSomeSelected: () => {
|
|
375
|
+
const { rowSelection } = instance.getState()
|
|
376
|
+
return isRowSelected(row, rowSelection, instance) === 'some'
|
|
377
|
+
},
|
|
378
|
+
|
|
379
|
+
getCanSelect: () => {
|
|
380
|
+
if (typeof instance.options.enableRowSelection === 'function') {
|
|
381
|
+
return instance.options.enableRowSelection(row)
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
return instance.options.enableRowSelection ?? true
|
|
385
|
+
},
|
|
386
|
+
|
|
387
|
+
getCanSelectSubRows: () => {
|
|
388
|
+
if (typeof instance.options.enableSubRowSelection === 'function') {
|
|
389
|
+
return instance.options.enableSubRowSelection(row)
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
return instance.options.enableSubRowSelection ?? true
|
|
393
|
+
},
|
|
394
|
+
|
|
395
|
+
getCanMultiSelect: () => {
|
|
396
|
+
if (typeof instance.options.enableMultiRowSelection === 'function') {
|
|
397
|
+
return instance.options.enableMultiRowSelection(row)
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
return instance.options.enableMultiRowSelection ?? true
|
|
401
|
+
},
|
|
402
|
+
getToggleSelectedHandler: () => {
|
|
403
|
+
const canSelect = row.getCanSelect()
|
|
404
|
+
|
|
405
|
+
return (e: unknown) => {
|
|
406
|
+
if (!canSelect) return
|
|
407
|
+
row.toggleSelected(
|
|
408
|
+
((e as MouseEvent).target as HTMLInputElement)?.checked
|
|
409
|
+
)
|
|
410
|
+
}
|
|
411
|
+
},
|
|
461
412
|
}
|
|
462
413
|
},
|
|
463
414
|
}
|
|
@@ -483,7 +434,7 @@ const mutateRowIsSelected = <TGenerics extends TableGenerics>(
|
|
|
483
434
|
}
|
|
484
435
|
// }
|
|
485
436
|
|
|
486
|
-
if (row.subRows?.length &&
|
|
437
|
+
if (row.subRows?.length && row.getCanSelectSubRows()) {
|
|
487
438
|
row.subRows.forEach(row =>
|
|
488
439
|
mutateRowIsSelected(selectedRowIds, row.id, value, instance)
|
|
489
440
|
)
|
package/src/features/Rows.ts
CHANGED
|
@@ -12,7 +12,8 @@ export type CoreRow<TGenerics extends TableGenerics> = {
|
|
|
12
12
|
index: number
|
|
13
13
|
original?: TGenerics['Row']
|
|
14
14
|
depth: number
|
|
15
|
-
|
|
15
|
+
valuesCache: Record<string, any>
|
|
16
|
+
getValue: (columnId: string) => any
|
|
16
17
|
subRows: Row<TGenerics>[]
|
|
17
18
|
getLeafRows: () => Row<TGenerics>[]
|
|
18
19
|
originalSubRows?: TGenerics['Row'][]
|
|
@@ -44,7 +45,7 @@ export type RowsInstance<TGenerics extends TableGenerics> = {
|
|
|
44
45
|
original: TGenerics['Row'] | undefined,
|
|
45
46
|
rowIndex: number,
|
|
46
47
|
depth: number,
|
|
47
|
-
|
|
48
|
+
subRows?: Row<TGenerics>[]
|
|
48
49
|
) => Row<TGenerics>
|
|
49
50
|
getCoreRowModel: () => RowModel<TGenerics>
|
|
50
51
|
_getCoreRowModel?: () => RowModel<TGenerics>
|
|
@@ -73,20 +74,34 @@ export const Rows = {
|
|
|
73
74
|
) =>
|
|
74
75
|
instance.options.getRowId?.(row, index, parent) ??
|
|
75
76
|
`${parent ? [parent.id, index].join('.') : index}`,
|
|
76
|
-
createRow: (id, original, rowIndex, depth,
|
|
77
|
+
createRow: (id, original, rowIndex, depth, subRows) => {
|
|
77
78
|
let row: CoreRow<TGenerics> = {
|
|
78
79
|
id,
|
|
79
80
|
index: rowIndex,
|
|
80
81
|
original,
|
|
81
82
|
depth,
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
valuesCache: {},
|
|
84
|
+
getValue: columnId => {
|
|
85
|
+
if (row.valuesCache.hasOwnProperty(columnId)) {
|
|
86
|
+
return row.valuesCache[columnId]
|
|
87
|
+
}
|
|
88
|
+
const column = instance.getColumn(columnId)
|
|
89
|
+
if (!column.accessorFn) {
|
|
90
|
+
throw new Error()
|
|
91
|
+
}
|
|
92
|
+
row.valuesCache[columnId] = column.accessorFn(
|
|
93
|
+
row.original,
|
|
94
|
+
rowIndex
|
|
95
|
+
)
|
|
96
|
+
return row.valuesCache[columnId]
|
|
97
|
+
},
|
|
98
|
+
subRows: subRows ?? [],
|
|
84
99
|
getLeafRows: () => flattenBy(row.subRows, d => d.subRows),
|
|
85
100
|
}
|
|
86
101
|
|
|
87
102
|
for (let i = 0; i < instance._features.length; i++) {
|
|
88
103
|
const feature = instance._features[i]
|
|
89
|
-
Object.assign(row, feature
|
|
104
|
+
Object.assign(row, feature?.createRow?.(row, instance))
|
|
90
105
|
}
|
|
91
106
|
|
|
92
107
|
return row as Row<TGenerics>
|
package/src/features/Sorting.ts
CHANGED
|
@@ -50,13 +50,14 @@ export type SortingColumnDef<TGenerics extends TableGenerics> = {
|
|
|
50
50
|
sortDescFirst?: boolean
|
|
51
51
|
enableSorting?: boolean
|
|
52
52
|
enableMultiSort?: boolean
|
|
53
|
-
defaultCanSort?: boolean
|
|
54
53
|
invertSorting?: boolean
|
|
55
54
|
sortUndefined?: false | -1 | 1
|
|
56
55
|
}
|
|
57
56
|
|
|
58
57
|
export type SortingColumn<TGenerics extends TableGenerics> = {
|
|
59
|
-
|
|
58
|
+
getAutoSortingFn: () => SortingFn<TGenerics>
|
|
59
|
+
getAutoSortDir: () => SortDirection
|
|
60
|
+
getSortingFn: () => SortingFn<TGenerics>
|
|
60
61
|
getCanSort: () => boolean
|
|
61
62
|
getCanMultiSort: () => boolean
|
|
62
63
|
getSortIndex: () => number
|
|
@@ -83,25 +84,7 @@ export type SortingOptions<TGenerics extends TableGenerics> = {
|
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
export type SortingInstance<TGenerics extends TableGenerics> = {
|
|
86
|
-
getColumnAutoSortingFn: (columnId: string) => SortingFn<TGenerics> | undefined
|
|
87
|
-
getColumnAutoSortDir: (columnId: string) => SortDirection
|
|
88
|
-
|
|
89
|
-
getColumnSortingFn: (columnId: string) => SortingFn<TGenerics> | undefined
|
|
90
|
-
|
|
91
87
|
setSorting: (updater: Updater<SortingState>) => void
|
|
92
|
-
toggleColumnSorting: (
|
|
93
|
-
columnId: string,
|
|
94
|
-
desc?: boolean,
|
|
95
|
-
multi?: boolean
|
|
96
|
-
) => void
|
|
97
|
-
resetSorting: (columnId?: string) => void
|
|
98
|
-
getColumnCanSort: (columnId: string) => boolean
|
|
99
|
-
getColumnCanMultiSort: (columnId: string) => boolean
|
|
100
|
-
getColumnIsSorted: (columnId: string) => false | 'asc' | 'desc'
|
|
101
|
-
getColumnSortIndex: (columnId: string) => number
|
|
102
|
-
getToggleSortingHandler: (
|
|
103
|
-
columnId: string
|
|
104
|
-
) => undefined | ((event: unknown) => void)
|
|
105
88
|
getPreSortedRowModel: () => RowModel<TGenerics>
|
|
106
89
|
getSortedRowModel: () => RowModel<TGenerics>
|
|
107
90
|
_getSortedRowModel?: () => RowModel<TGenerics>
|
|
@@ -141,34 +124,13 @@ export const Sorting: TableFeature = {
|
|
|
141
124
|
instance: TableInstance<TGenerics>
|
|
142
125
|
): SortingColumn<TGenerics> => {
|
|
143
126
|
return {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
getCanMultiSort: () => instance.getColumnCanMultiSort(column.id),
|
|
147
|
-
getSortIndex: () => instance.getColumnSortIndex(column.id),
|
|
148
|
-
getIsSorted: () => instance.getColumnIsSorted(column.id),
|
|
149
|
-
resetSorting: () => instance.resetSorting(column.id),
|
|
150
|
-
toggleSorting: (desc, isMulti) =>
|
|
151
|
-
instance.toggleColumnSorting(column.id, desc, isMulti),
|
|
152
|
-
getToggleSortingHandler: () =>
|
|
153
|
-
instance.getToggleSortingHandler(column.id)!,
|
|
154
|
-
}
|
|
155
|
-
},
|
|
156
|
-
|
|
157
|
-
createInstance: <TGenerics extends TableGenerics>(
|
|
158
|
-
instance: TableInstance<TGenerics>
|
|
159
|
-
): SortingInstance<TGenerics> => {
|
|
160
|
-
let registered = false
|
|
161
|
-
|
|
162
|
-
return {
|
|
163
|
-
getColumnAutoSortingFn: columnId => {
|
|
164
|
-
const firstRows = instance
|
|
165
|
-
.getGlobalFilteredRowModel()
|
|
166
|
-
.flatRows.slice(100)
|
|
127
|
+
getAutoSortingFn: () => {
|
|
128
|
+
const firstRows = instance.getFilteredRowModel().flatRows.slice(100)
|
|
167
129
|
|
|
168
130
|
let isString = false
|
|
169
131
|
|
|
170
132
|
for (const row of firstRows) {
|
|
171
|
-
const value = row?.
|
|
133
|
+
const value = row?.getValue(column.id)
|
|
172
134
|
|
|
173
135
|
if (Object.prototype.toString.call(value) === '[object Date]') {
|
|
174
136
|
return sortingFns.datetime
|
|
@@ -189,10 +151,10 @@ export const Sorting: TableFeature = {
|
|
|
189
151
|
|
|
190
152
|
return sortingFns.basic
|
|
191
153
|
},
|
|
192
|
-
|
|
193
|
-
const firstRow = instance.
|
|
154
|
+
getAutoSortDir: () => {
|
|
155
|
+
const firstRow = instance.getFilteredRowModel().flatRows[0]
|
|
194
156
|
|
|
195
|
-
const value = firstRow?.
|
|
157
|
+
const value = firstRow?.getValue(column.id)
|
|
196
158
|
|
|
197
159
|
if (typeof value === 'string') {
|
|
198
160
|
return 'asc'
|
|
@@ -200,8 +162,7 @@ export const Sorting: TableFeature = {
|
|
|
200
162
|
|
|
201
163
|
return 'desc'
|
|
202
164
|
},
|
|
203
|
-
|
|
204
|
-
const column = instance.getColumn(columnId)
|
|
165
|
+
getSortingFn: () => {
|
|
205
166
|
const userSortingFn = instance.options.sortingFns
|
|
206
167
|
|
|
207
168
|
if (!column) {
|
|
@@ -211,7 +172,7 @@ export const Sorting: TableFeature = {
|
|
|
211
172
|
return isFunction(column.sortingFn)
|
|
212
173
|
? column.sortingFn
|
|
213
174
|
: column.sortingFn === 'auto'
|
|
214
|
-
?
|
|
175
|
+
? column.getAutoSortingFn()
|
|
215
176
|
: (userSortingFn as Record<string, any>)?.[
|
|
216
177
|
column.sortingFn as string
|
|
217
178
|
] ??
|
|
@@ -219,16 +180,7 @@ export const Sorting: TableFeature = {
|
|
|
219
180
|
column.sortingFn as BuiltInSortingFn
|
|
220
181
|
] as SortingFn<TGenerics>)
|
|
221
182
|
},
|
|
222
|
-
|
|
223
|
-
setSorting: updater => instance.options.onSortingChange?.(updater),
|
|
224
|
-
|
|
225
|
-
toggleColumnSorting: (columnId, desc, multi) => {
|
|
226
|
-
const column = instance.getColumn(columnId)
|
|
227
|
-
|
|
228
|
-
if (!column) {
|
|
229
|
-
throw new Error()
|
|
230
|
-
}
|
|
231
|
-
|
|
183
|
+
toggleSorting: (desc, multi) => {
|
|
232
184
|
// if (column.columns.length) {
|
|
233
185
|
// column.columns.forEach((c, i) => {
|
|
234
186
|
// if (c.id) {
|
|
@@ -240,8 +192,8 @@ export const Sorting: TableFeature = {
|
|
|
240
192
|
|
|
241
193
|
instance.setSorting(old => {
|
|
242
194
|
// Find any existing sorting for this column
|
|
243
|
-
const existingSorting = old?.find(d => d.id ===
|
|
244
|
-
const existingIndex = old?.findIndex(d => d.id ===
|
|
195
|
+
const existingSorting = old?.find(d => d.id === column.id)
|
|
196
|
+
const existingIndex = old?.findIndex(d => d.id === column.id)
|
|
245
197
|
const hasDescDefined = typeof desc !== 'undefined' && desc !== null
|
|
246
198
|
|
|
247
199
|
let newSorting: SortingState = []
|
|
@@ -269,7 +221,7 @@ export const Sorting: TableFeature = {
|
|
|
269
221
|
const sortDescFirst =
|
|
270
222
|
column.sortDescFirst ??
|
|
271
223
|
instance.options.sortDescFirst ??
|
|
272
|
-
|
|
224
|
+
column.getAutoSortDir() === 'desc'
|
|
273
225
|
|
|
274
226
|
// Handle toggle states that will remove the sorting
|
|
275
227
|
if (
|
|
@@ -287,7 +239,7 @@ export const Sorting: TableFeature = {
|
|
|
287
239
|
if (sortAction === 'replace') {
|
|
288
240
|
newSorting = [
|
|
289
241
|
{
|
|
290
|
-
id:
|
|
242
|
+
id: column.id,
|
|
291
243
|
desc: hasDescDefined ? desc! : !!sortDescFirst,
|
|
292
244
|
},
|
|
293
245
|
]
|
|
@@ -295,7 +247,7 @@ export const Sorting: TableFeature = {
|
|
|
295
247
|
newSorting = [
|
|
296
248
|
...old,
|
|
297
249
|
{
|
|
298
|
-
id:
|
|
250
|
+
id: column.id,
|
|
299
251
|
desc: hasDescDefined ? desc! : !!sortDescFirst,
|
|
300
252
|
},
|
|
301
253
|
]
|
|
@@ -309,7 +261,7 @@ export const Sorting: TableFeature = {
|
|
|
309
261
|
} else if (sortAction === 'toggle' && old?.length) {
|
|
310
262
|
// This flips (or sets) the
|
|
311
263
|
newSorting = old.map(d => {
|
|
312
|
-
if (d.id ===
|
|
264
|
+
if (d.id === column.id) {
|
|
313
265
|
return {
|
|
314
266
|
...d,
|
|
315
267
|
desc: hasDescDefined ? desc! : !existingSorting?.desc,
|
|
@@ -318,38 +270,22 @@ export const Sorting: TableFeature = {
|
|
|
318
270
|
return d
|
|
319
271
|
})
|
|
320
272
|
} else if (sortAction === 'remove' && old?.length) {
|
|
321
|
-
newSorting = old.filter(d => d.id !==
|
|
273
|
+
newSorting = old.filter(d => d.id !== column.id)
|
|
322
274
|
}
|
|
323
275
|
|
|
324
276
|
return newSorting
|
|
325
277
|
})
|
|
326
278
|
},
|
|
327
279
|
|
|
328
|
-
|
|
329
|
-
const column = instance.getColumn(columnId)
|
|
330
|
-
|
|
331
|
-
if (!column) {
|
|
332
|
-
throw new Error()
|
|
333
|
-
}
|
|
334
|
-
|
|
280
|
+
getCanSort: () => {
|
|
335
281
|
return (
|
|
336
|
-
column.enableSorting ??
|
|
337
|
-
instance.options.enableSorting ??
|
|
338
|
-
column.defaultCanSort ??
|
|
282
|
+
(column.enableSorting ?? true) &&
|
|
283
|
+
(instance.options.enableSorting ?? true) &&
|
|
339
284
|
!!column.accessorFn
|
|
340
|
-
// (!!column.accessorFn ||
|
|
341
|
-
// column.columns?.some(c => c.id && instance.getColumnCanSort(c.id))) ??
|
|
342
|
-
// false
|
|
343
285
|
)
|
|
344
286
|
},
|
|
345
287
|
|
|
346
|
-
|
|
347
|
-
const column = instance.getColumn(columnId)
|
|
348
|
-
|
|
349
|
-
if (!column) {
|
|
350
|
-
throw new Error()
|
|
351
|
-
}
|
|
352
|
-
|
|
288
|
+
getCanMultiSort: () => {
|
|
353
289
|
return (
|
|
354
290
|
column.enableMultiSort ??
|
|
355
291
|
instance.options.enableMultiSort ??
|
|
@@ -357,16 +293,16 @@ export const Sorting: TableFeature = {
|
|
|
357
293
|
)
|
|
358
294
|
},
|
|
359
295
|
|
|
360
|
-
|
|
296
|
+
getIsSorted: () => {
|
|
361
297
|
const columnSort = instance
|
|
362
298
|
.getState()
|
|
363
|
-
.sorting?.find(d => d.id ===
|
|
299
|
+
.sorting?.find(d => d.id === column.id)
|
|
364
300
|
|
|
365
301
|
return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'
|
|
366
302
|
},
|
|
367
303
|
|
|
368
|
-
|
|
369
|
-
instance.getState().sorting?.findIndex(d => d.id ===
|
|
304
|
+
getSortIndex: () =>
|
|
305
|
+
instance.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,
|
|
370
306
|
|
|
371
307
|
resetSorting: (columnId?: string) => {
|
|
372
308
|
if (columnId) {
|
|
@@ -378,13 +314,7 @@ export const Sorting: TableFeature = {
|
|
|
378
314
|
}
|
|
379
315
|
},
|
|
380
316
|
|
|
381
|
-
getToggleSortingHandler:
|
|
382
|
-
const column = instance.getColumn(columnId)
|
|
383
|
-
|
|
384
|
-
if (!column) {
|
|
385
|
-
throw new Error()
|
|
386
|
-
}
|
|
387
|
-
|
|
317
|
+
getToggleSortingHandler: () => {
|
|
388
318
|
const canSort = column.getCanSort()
|
|
389
319
|
|
|
390
320
|
return (e: unknown) => {
|
|
@@ -398,8 +328,18 @@ export const Sorting: TableFeature = {
|
|
|
398
328
|
)
|
|
399
329
|
}
|
|
400
330
|
},
|
|
331
|
+
}
|
|
332
|
+
},
|
|
333
|
+
|
|
334
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
335
|
+
instance: TableInstance<TGenerics>
|
|
336
|
+
): SortingInstance<TGenerics> => {
|
|
337
|
+
let registered = false
|
|
338
|
+
|
|
339
|
+
return {
|
|
340
|
+
setSorting: updater => instance.options.onSortingChange?.(updater),
|
|
401
341
|
|
|
402
|
-
getPreSortedRowModel: () => instance.
|
|
342
|
+
getPreSortedRowModel: () => instance.getFilteredRowModel(),
|
|
403
343
|
getSortedRowModel: () => {
|
|
404
344
|
if (
|
|
405
345
|
!instance._getSortedRowModel &&
|