@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.
Files changed (149) hide show
  1. package/build/cjs/aggregationFns.js +25 -37
  2. package/build/cjs/aggregationFns.js.map +1 -1
  3. package/build/cjs/core.js +167 -47
  4. package/build/cjs/core.js.map +1 -1
  5. package/build/cjs/createTable.js +24 -40
  6. package/build/cjs/createTable.js.map +1 -1
  7. package/build/cjs/features/Cells.js +29 -35
  8. package/build/cjs/features/Cells.js.map +1 -1
  9. package/build/cjs/features/ColumnSizing.js +126 -218
  10. package/build/cjs/features/ColumnSizing.js.map +1 -1
  11. package/build/cjs/features/Columns.js +59 -86
  12. package/build/cjs/features/Columns.js.map +1 -1
  13. package/build/cjs/features/Expanding.js +78 -125
  14. package/build/cjs/features/Expanding.js.map +1 -1
  15. package/build/cjs/features/Filters.js +143 -218
  16. package/build/cjs/features/Filters.js.map +1 -1
  17. package/build/cjs/features/Grouping.js +70 -116
  18. package/build/cjs/features/Grouping.js.map +1 -1
  19. package/build/cjs/features/Headers.js +125 -205
  20. package/build/cjs/features/Headers.js.map +1 -1
  21. package/build/cjs/features/Ordering.js +31 -43
  22. package/build/cjs/features/Ordering.js.map +1 -1
  23. package/build/cjs/features/Pagination.js +64 -72
  24. package/build/cjs/features/Pagination.js.map +1 -1
  25. package/build/cjs/features/Pinning.js +96 -177
  26. package/build/cjs/features/Pinning.js.map +1 -1
  27. package/build/cjs/features/RowSelection.js +134 -205
  28. package/build/cjs/features/RowSelection.js.map +1 -1
  29. package/build/cjs/features/Rows.js +32 -22
  30. package/build/cjs/features/Rows.js.map +1 -1
  31. package/build/cjs/features/Sorting.js +62 -131
  32. package/build/cjs/features/Sorting.js.map +1 -1
  33. package/build/cjs/features/Visibility.js +53 -120
  34. package/build/cjs/features/Visibility.js.map +1 -1
  35. package/build/cjs/filterFns.js +52 -133
  36. package/build/cjs/filterFns.js.map +1 -1
  37. package/build/cjs/index.js +13 -13
  38. package/build/cjs/sortingFns.js +21 -21
  39. package/build/cjs/sortingFns.js.map +1 -1
  40. package/build/cjs/utils/filterRowsUtils.js +56 -41
  41. package/build/cjs/utils/filterRowsUtils.js.map +1 -1
  42. package/build/cjs/utils/getCoreRowModel.js +98 -0
  43. package/build/cjs/utils/getCoreRowModel.js.map +1 -0
  44. package/build/cjs/utils/getExpandedRowModel.js +18 -22
  45. package/build/cjs/utils/getExpandedRowModel.js.map +1 -1
  46. package/build/cjs/utils/getFacetedMinMaxValues.js +48 -0
  47. package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -0
  48. package/build/cjs/utils/getFacetedRowModel.js +50 -0
  49. package/build/cjs/utils/getFacetedRowModel.js.map +1 -0
  50. package/build/cjs/utils/getFacetedUniqueValues.js +48 -0
  51. package/build/cjs/utils/getFacetedUniqueValues.js.map +1 -0
  52. package/build/cjs/utils/getFilteredRowModel.js +130 -0
  53. package/build/cjs/utils/getFilteredRowModel.js.map +1 -0
  54. package/build/cjs/utils/getGroupedRowModel.js +126 -136
  55. package/build/cjs/utils/getGroupedRowModel.js.map +1 -1
  56. package/build/cjs/utils/getPaginationRowModel.js +39 -39
  57. package/build/cjs/utils/getPaginationRowModel.js.map +1 -1
  58. package/build/cjs/utils/getSortedRowModel.js +112 -0
  59. package/build/cjs/utils/getSortedRowModel.js.map +1 -0
  60. package/build/cjs/utils.js +36 -211
  61. package/build/cjs/utils.js.map +1 -1
  62. package/build/esm/index.js +1970 -2956
  63. package/build/esm/index.js.map +1 -1
  64. package/build/stats-html.html +1 -1
  65. package/build/stats-react.json +390 -482
  66. package/build/types/core.d.ts +3 -5
  67. package/build/types/features/Cells.d.ts +1 -1
  68. package/build/types/features/ColumnSizing.d.ts +2 -13
  69. package/build/types/features/Columns.d.ts +1 -1
  70. package/build/types/features/Expanding.d.ts +1 -6
  71. package/build/types/features/Filters.d.ts +42 -30
  72. package/build/types/features/Grouping.d.ts +4 -10
  73. package/build/types/features/Pinning.d.ts +0 -4
  74. package/build/types/features/RowSelection.d.ts +1 -7
  75. package/build/types/features/Rows.d.ts +4 -3
  76. package/build/types/features/Sorting.d.ts +3 -14
  77. package/build/types/features/Visibility.d.ts +0 -4
  78. package/build/types/filterFns.d.ts +10 -52
  79. package/build/types/index.d.ts +6 -5
  80. package/build/types/types.d.ts +5 -17
  81. package/build/types/utils/filterRowsUtils.d.ts +3 -2
  82. package/build/types/utils/getCoreRowModel.d.ts +2 -0
  83. package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
  84. package/build/types/utils/getFacetedRowModel.d.ts +2 -0
  85. package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
  86. package/build/types/utils/{getCoreRowModelSync.d.ts → getFilteredRowModel.d.ts} +1 -1
  87. package/build/types/utils/getGroupedRowModel.d.ts +1 -1
  88. package/build/types/utils/getSortedRowModel.d.ts +2 -0
  89. package/build/types/utils.d.ts +2 -18
  90. package/build/umd/index.development.js +1948 -2935
  91. package/build/umd/index.development.js.map +1 -1
  92. package/build/umd/index.production.js +1 -1
  93. package/build/umd/index.production.js.map +1 -1
  94. package/package.json +2 -1
  95. package/src/core.ts +197 -46
  96. package/src/features/Cells.ts +10 -12
  97. package/src/features/ColumnSizing.ts +72 -129
  98. package/src/features/Columns.ts +16 -15
  99. package/src/features/Expanding.ts +58 -105
  100. package/src/features/Filters.ts +223 -226
  101. package/src/features/Grouping.ts +51 -79
  102. package/src/features/Headers.ts +18 -40
  103. package/src/features/Ordering.ts +1 -1
  104. package/src/features/Pagination.ts +1 -1
  105. package/src/features/Pinning.ts +73 -92
  106. package/src/features/RowSelection.ts +71 -120
  107. package/src/features/Rows.ts +21 -6
  108. package/src/features/Sorting.ts +39 -99
  109. package/src/features/Visibility.ts +21 -50
  110. package/src/filterFns.ts +74 -147
  111. package/src/index.ts +12 -5
  112. package/src/sortingFns.ts +11 -11
  113. package/src/types.ts +5 -18
  114. package/src/utils/filterRowsUtils.ts +59 -56
  115. package/src/utils/{getCoreRowModelSync.ts → getCoreRowModel.ts} +3 -9
  116. package/src/utils/getExpandedRowModel.ts +2 -2
  117. package/src/utils/getFacetedMinMaxValues.ts +37 -0
  118. package/src/utils/getFacetedRowModel.ts +50 -0
  119. package/src/utils/getFacetedUniqueValues.ts +37 -0
  120. package/src/utils/getFilteredRowModel.ts +150 -0
  121. package/src/utils/getGroupedRowModel.ts +53 -62
  122. package/src/utils/getPaginationRowModel.ts +1 -1
  123. package/src/utils/{getSortedRowModelSync.ts → getSortedRowModel.ts} +7 -7
  124. package/src/utils.ts +29 -239
  125. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  126. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  127. package/build/cjs/utils/getColumnFilteredRowModelSync.js +0 -115
  128. package/build/cjs/utils/getColumnFilteredRowModelSync.js.map +0 -1
  129. package/build/cjs/utils/getCoreRowModelAsync.js +0 -125
  130. package/build/cjs/utils/getCoreRowModelAsync.js.map +0 -1
  131. package/build/cjs/utils/getCoreRowModelSync.js +0 -102
  132. package/build/cjs/utils/getCoreRowModelSync.js.map +0 -1
  133. package/build/cjs/utils/getGlobalFilteredRowModelSync.js +0 -91
  134. package/build/cjs/utils/getGlobalFilteredRowModelSync.js.map +0 -1
  135. package/build/cjs/utils/getSortedRowModelSync.js +0 -118
  136. package/build/cjs/utils/getSortedRowModelSync.js.map +0 -1
  137. package/build/types/utils/getColumnFilteredRowModelAsync.d.ts +0 -4
  138. package/build/types/utils/getColumnFilteredRowModelSync.d.ts +0 -2
  139. package/build/types/utils/getCoreRowModelAsync.d.ts +0 -4
  140. package/build/types/utils/getGlobalFilteredRowModelAsync.d.ts +0 -4
  141. package/build/types/utils/getGlobalFilteredRowModelSync.d.ts +0 -2
  142. package/build/types/utils/getSortedRowModelAsync.d.ts +0 -13
  143. package/build/types/utils/getSortedRowModelSync.d.ts +0 -2
  144. package/src/utils/getColumnFilteredRowModelAsync.ts +0 -118
  145. package/src/utils/getColumnFilteredRowModelSync.ts +0 -102
  146. package/src/utils/getCoreRowModelAsync.ts +0 -104
  147. package/src/utils/getGlobalFilteredRowModelAsync.ts +0 -96
  148. package/src/utils/getGlobalFilteredRowModelSync.ts +0 -79
  149. 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.getGlobalFilteredRowModel(),
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: 'getFilteredSelectedRowModel',
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: 'getGroupedSelectedRowModel',
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
- getIsSelected: () => instance.getRowIsSelected(row.id),
455
- getIsSomeSelected: () => instance.getRowIsSomeSelected(row.id),
456
- toggleSelected: value => instance.toggleRowSelected(row.id, value),
457
- getToggleSelectedHandler: () =>
458
- instance.getToggleRowSelectedHandler(row.id)!,
459
- getCanMultiSelect: () => instance.getRowCanMultiSelect(row.id),
460
- getCanSelect: () => instance.getRowCanSelect(row.id),
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 && instance.getRowCanSelectSubRows(row.id)) {
437
+ if (row.subRows?.length && row.getCanSelectSubRows()) {
487
438
  row.subRows.forEach(row =>
488
439
  mutateRowIsSelected(selectedRowIds, row.id, value, instance)
489
440
  )
@@ -12,7 +12,8 @@ export type CoreRow<TGenerics extends TableGenerics> = {
12
12
  index: number
13
13
  original?: TGenerics['Row']
14
14
  depth: number
15
- values: RowValues
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
- values: Record<string, any>
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, values) => {
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
- values,
83
- subRows: [],
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.createRow?.(row, instance))
104
+ Object.assign(row, feature?.createRow?.(row, instance))
90
105
  }
91
106
 
92
107
  return row as Row<TGenerics>
@@ -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
- sortingFn: SortingFnOption<Overwrite<TGenerics, { Value: any }>>
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
- sortingFn: column.sortingFn,
145
- getCanSort: () => instance.getColumnCanSort(column.id),
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?.values[columnId]
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
- getColumnAutoSortDir: columnId => {
193
- const firstRow = instance.getGlobalFilteredRowModel().flatRows[0]
154
+ getAutoSortDir: () => {
155
+ const firstRow = instance.getFilteredRowModel().flatRows[0]
194
156
 
195
- const value = firstRow?.values[columnId]
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
- getColumnSortingFn: columnId => {
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
- ? instance.getColumnAutoSortingFn(columnId)
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 === columnId)
244
- const existingIndex = old?.findIndex(d => d.id === columnId)
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
- instance.getColumnAutoSortDir(columnId) === 'desc'
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: columnId,
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: columnId,
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 === columnId) {
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 !== columnId)
273
+ newSorting = old.filter(d => d.id !== column.id)
322
274
  }
323
275
 
324
276
  return newSorting
325
277
  })
326
278
  },
327
279
 
328
- getColumnCanSort: columnId => {
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
- getColumnCanMultiSort: columnId => {
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
- getColumnIsSorted: columnId => {
296
+ getIsSorted: () => {
361
297
  const columnSort = instance
362
298
  .getState()
363
- .sorting?.find(d => d.id === columnId)
299
+ .sorting?.find(d => d.id === column.id)
364
300
 
365
301
  return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'
366
302
  },
367
303
 
368
- getColumnSortIndex: columnId =>
369
- instance.getState().sorting?.findIndex(d => d.id === columnId) ?? -1,
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: columnId => {
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.getGlobalFilteredRowModel(),
342
+ getPreSortedRowModel: () => instance.getFilteredRowModel(),
403
343
  getSortedRowModel: () => {
404
344
  if (
405
345
  !instance._getSortedRowModel &&