@tanstack/table-core 8.0.0-alpha.65 → 8.0.0-alpha.67

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 (84) hide show
  1. package/build/cjs/core.js +0 -2
  2. package/build/cjs/core.js.map +1 -1
  3. package/build/cjs/features/Cells.js +1 -1
  4. package/build/cjs/features/Cells.js.map +1 -1
  5. package/build/cjs/features/ColumnSizing.js +65 -140
  6. package/build/cjs/features/ColumnSizing.js.map +1 -1
  7. package/build/cjs/features/Columns.js +5 -5
  8. package/build/cjs/features/Columns.js.map +1 -1
  9. package/build/cjs/features/Expanding.js +49 -87
  10. package/build/cjs/features/Expanding.js.map +1 -1
  11. package/build/cjs/features/Filters.js +89 -145
  12. package/build/cjs/features/Filters.js.map +1 -1
  13. package/build/cjs/features/Grouping.js +30 -58
  14. package/build/cjs/features/Grouping.js.map +1 -1
  15. package/build/cjs/features/Headers.js +16 -40
  16. package/build/cjs/features/Headers.js.map +1 -1
  17. package/build/cjs/features/Ordering.js +1 -1
  18. package/build/cjs/features/Ordering.js.map +1 -1
  19. package/build/cjs/features/Pagination.js +1 -1
  20. package/build/cjs/features/Pagination.js.map +1 -1
  21. package/build/cjs/features/Pinning.js +70 -95
  22. package/build/cjs/features/Pinning.js.map +1 -1
  23. package/build/cjs/features/RowSelection.js +60 -112
  24. package/build/cjs/features/RowSelection.js.map +1 -1
  25. package/build/cjs/features/Sorting.js +33 -83
  26. package/build/cjs/features/Sorting.js.map +1 -1
  27. package/build/cjs/features/Visibility.js +16 -39
  28. package/build/cjs/features/Visibility.js.map +1 -1
  29. package/build/cjs/utils/getCoreRowModelAsync.js +1 -1
  30. package/build/cjs/utils/getCoreRowModelAsync.js.map +1 -1
  31. package/build/cjs/utils/getCoreRowModelSync.js +1 -1
  32. package/build/cjs/utils/getCoreRowModelSync.js.map +1 -1
  33. package/build/cjs/utils/getExpandedRowModel.js +2 -2
  34. package/build/cjs/utils/getExpandedRowModel.js.map +1 -1
  35. package/build/cjs/utils/getFilteredRowModelSync.js +64 -69
  36. package/build/cjs/utils/getFilteredRowModelSync.js.map +1 -1
  37. package/build/cjs/utils/getGroupedRowModel.js +1 -1
  38. package/build/cjs/utils/getGroupedRowModel.js.map +1 -1
  39. package/build/cjs/utils/getPaginationRowModel.js +1 -1
  40. package/build/cjs/utils/getPaginationRowModel.js.map +1 -1
  41. package/build/cjs/utils/getSortedRowModelSync.js +3 -3
  42. package/build/cjs/utils/getSortedRowModelSync.js.map +1 -1
  43. package/build/esm/index.js +546 -924
  44. package/build/esm/index.js.map +1 -1
  45. package/build/stats-html.html +1 -1
  46. package/build/stats-react.json +354 -354
  47. package/build/types/features/ColumnSizing.d.ts +2 -13
  48. package/build/types/features/Expanding.d.ts +1 -6
  49. package/build/types/features/Filters.d.ts +12 -14
  50. package/build/types/features/Grouping.d.ts +0 -7
  51. package/build/types/features/Pinning.d.ts +0 -4
  52. package/build/types/features/RowSelection.d.ts +1 -7
  53. package/build/types/features/Sorting.d.ts +3 -14
  54. package/build/types/features/Visibility.d.ts +0 -4
  55. package/build/types/types.d.ts +0 -2
  56. package/build/umd/index.development.js +534 -912
  57. package/build/umd/index.development.js.map +1 -1
  58. package/build/umd/index.production.js +1 -1
  59. package/build/umd/index.production.js.map +1 -1
  60. package/package.json +1 -1
  61. package/src/core.ts +0 -2
  62. package/src/features/Cells.ts +1 -1
  63. package/src/features/ColumnSizing.ts +67 -125
  64. package/src/features/Columns.ts +6 -5
  65. package/src/features/Expanding.ts +58 -105
  66. package/src/features/Filters.ts +122 -172
  67. package/src/features/Grouping.ts +36 -60
  68. package/src/features/Headers.ts +18 -40
  69. package/src/features/Ordering.ts +1 -1
  70. package/src/features/Pagination.ts +1 -1
  71. package/src/features/Pinning.ts +66 -89
  72. package/src/features/RowSelection.ts +63 -115
  73. package/src/features/Sorting.ts +36 -94
  74. package/src/features/Visibility.ts +19 -49
  75. package/src/types.ts +0 -2
  76. package/src/utils/getCoreRowModelAsync.ts +1 -1
  77. package/src/utils/getCoreRowModelSync.ts +1 -1
  78. package/src/utils/getExpandedRowModel.ts +2 -2
  79. package/src/utils/getFilteredRowModelAsync.ts +118 -10
  80. package/src/utils/getFilteredRowModelSync.ts +95 -104
  81. package/src/utils/getGroupedRowModel.ts +1 -1
  82. package/src/utils/getPaginationRowModel.ts +1 -1
  83. package/src/utils/getSortedRowModelAsync.ts +1 -1
  84. package/src/utils/getSortedRowModelSync.ts +4 -4
@@ -50,10 +50,6 @@ export type ColumnPinningRow<TGenerics extends TableGenerics> = {
50
50
  export type ColumnPinningInstance<TGenerics extends TableGenerics> = {
51
51
  setColumnPinning: (updater: Updater<ColumnPinningState>) => void
52
52
  resetColumnPinning: () => void
53
- pinColumn: (columnId: string, position: ColumnPinningPosition) => void
54
- getColumnCanPin: (columnId: string) => boolean
55
- getColumnIsPinned: (columnId: string) => ColumnPinningPosition
56
- getColumnPinnedIndex: (columnId: string) => number
57
53
  getIsSomeColumnsPinned: () => boolean
58
54
  getLeftLeafColumns: () => Column<TGenerics>[]
59
55
  getRightLeafColumns: () => Column<TGenerics>[]
@@ -86,10 +82,69 @@ export const Pinning: TableFeature = {
86
82
  instance: TableInstance<TGenerics>
87
83
  ): ColumnPinningColumn => {
88
84
  return {
89
- getCanPin: () => instance.getColumnCanPin(column.id),
90
- getPinnedIndex: () => instance.getColumnPinnedIndex(column.id),
91
- getIsPinned: () => instance.getColumnIsPinned(column.id),
92
- pin: position => instance.pinColumn(column.id, position),
85
+ pin: position => {
86
+ const columnIds = column
87
+ .getLeafColumns()
88
+ .map(d => d.id)
89
+ .filter(Boolean) as string[]
90
+
91
+ instance.setColumnPinning(old => {
92
+ if (position === 'right') {
93
+ return {
94
+ left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
95
+ right: [
96
+ ...(old?.right ?? []).filter(d => !columnIds?.includes(d)),
97
+ ...columnIds,
98
+ ],
99
+ }
100
+ }
101
+
102
+ if (position === 'left') {
103
+ return {
104
+ left: [
105
+ ...(old?.left ?? []).filter(d => !columnIds?.includes(d)),
106
+ ...columnIds,
107
+ ],
108
+ right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
109
+ }
110
+ }
111
+
112
+ return {
113
+ left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
114
+ right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
115
+ }
116
+ })
117
+ },
118
+
119
+ getCanPin: () => {
120
+ const leafColumns = column.getLeafColumns()
121
+
122
+ return leafColumns.some(
123
+ d =>
124
+ (d.enablePinning ?? true) &&
125
+ (instance.options.enablePinning ?? true)
126
+ )
127
+ },
128
+
129
+ getIsPinned: () => {
130
+ const leafColumnIds = column.getLeafColumns().map(d => d.id)
131
+
132
+ const { left, right } = instance.getState().columnPinning
133
+
134
+ const isLeft = leafColumnIds.some(d => left?.includes(d))
135
+ const isRight = leafColumnIds.some(d => right?.includes(d))
136
+
137
+ return isLeft ? 'left' : isRight ? 'right' : false
138
+ },
139
+
140
+ getPinnedIndex: () => {
141
+ const position = column.getIsPinned()
142
+
143
+ return position
144
+ ? instance.getState().columnPinning?.[position]?.indexOf(column.id) ??
145
+ -1
146
+ : 0
147
+ },
93
148
  }
94
149
  },
95
150
 
@@ -168,84 +223,6 @@ export const Pinning: TableFeature = {
168
223
  resetColumnPinning: () =>
169
224
  instance.setColumnPinning(instance.initialState?.columnPinning ?? {}),
170
225
 
171
- pinColumn: (columnId, position) => {
172
- const column = instance.getColumn(columnId)
173
-
174
- const columnIds = column
175
- ?.getLeafColumns()
176
- .map(d => d.id)
177
- .filter(Boolean) as string[]
178
-
179
- instance.setColumnPinning(old => {
180
- if (position === 'right') {
181
- return {
182
- left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
183
- right: [
184
- ...(old?.right ?? []).filter(d => !columnIds?.includes(d)),
185
- ...columnIds,
186
- ],
187
- }
188
- }
189
-
190
- if (position === 'left') {
191
- return {
192
- left: [
193
- ...(old?.left ?? []).filter(d => !columnIds?.includes(d)),
194
- ...columnIds,
195
- ],
196
- right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
197
- }
198
- }
199
-
200
- return {
201
- left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
202
- right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
203
- }
204
- })
205
- },
206
-
207
- getColumnCanPin: columnId => {
208
- const column = instance.getColumn(columnId)
209
-
210
- if (!column) {
211
- throw new Error()
212
- }
213
-
214
- const leafColumns = column.getLeafColumns()
215
-
216
- return leafColumns.some(
217
- d =>
218
- (d.enablePinning ?? true) &&
219
- (instance.options.enablePinning ?? true)
220
- )
221
- },
222
-
223
- getColumnIsPinned: columnId => {
224
- const column = instance.getColumn(columnId)
225
-
226
- if (!column) {
227
- throw new Error()
228
- }
229
-
230
- const leafColumnIds = column.getLeafColumns().map(d => d.id)
231
-
232
- const { left, right } = instance.getState().columnPinning
233
-
234
- const isLeft = leafColumnIds.some(d => left?.includes(d))
235
- const isRight = leafColumnIds.some(d => right?.includes(d))
236
-
237
- return isLeft ? 'left' : isRight ? 'right' : false
238
- },
239
-
240
- getColumnPinnedIndex: columnId => {
241
- const position = instance.getColumnIsPinned(columnId)
242
-
243
- return position
244
- ? instance.getState().columnPinning?.[position]?.indexOf(columnId) ??
245
- -1
246
- : 0
247
- },
248
-
249
226
  getIsSomeColumnsPinned: () => {
250
227
  const { left, right } = instance.getState().columnPinning
251
228
 
@@ -263,7 +240,7 @@ export const Pinning: TableFeature = {
263
240
  .filter(Boolean)
264
241
  },
265
242
  {
266
- key: process.env.NODE_ENV === 'production' && 'getLeftLeafColumns',
243
+ key: process.env.NODE_ENV === 'development' && 'getLeftLeafColumns',
267
244
  debug: () =>
268
245
  instance.options.debugAll ?? instance.options.debugColumns,
269
246
  }
@@ -280,7 +257,7 @@ export const Pinning: TableFeature = {
280
257
  .filter(Boolean)
281
258
  },
282
259
  {
283
- key: process.env.NODE_ENV === 'production' && 'getRightLeafColumns',
260
+ key: process.env.NODE_ENV === 'development' && 'getRightLeafColumns',
284
261
  debug: () =>
285
262
  instance.options.debugAll ?? instance.options.debugColumns,
286
263
  }
@@ -298,7 +275,7 @@ export const Pinning: TableFeature = {
298
275
  return allColumns.filter(d => !leftAndRight.includes(d.id))
299
276
  },
300
277
  {
301
- key: process.env.NODE_ENV === 'production' && 'getCenterLeafColumns',
278
+ key: process.env.NODE_ENV === 'development' && 'getCenterLeafColumns',
302
279
  debug: () =>
303
280
  instance.options.debugAll ?? instance.options.debugColumns,
304
281
  }
@@ -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: process.env.NODE_ENV === 'production' && 'getSelectedRowModel',
216
+ key: process.env.NODE_ENV === 'development' && 'getSelectedRowModel',
243
217
  debug: () => instance.options.debugAll ?? instance.options.debugTable,
244
218
  }
245
219
  ),
@@ -291,70 +265,6 @@ export const RowSelection: TableFeature = {
291
265
 
292
266
  ///
293
267
 
294
- getRowIsSelected: rowId => {
295
- const { rowSelection } = instance.getState()
296
- const row = instance.getRow(rowId)
297
-
298
- if (!row) {
299
- throw new Error()
300
- }
301
-
302
- return isRowSelected(row, rowSelection, instance) === true
303
- },
304
-
305
- getRowIsSomeSelected: rowId => {
306
- const { rowSelection } = instance.getState()
307
- const row = instance.getRow(rowId)
308
-
309
- if (!row) {
310
- throw new Error()
311
- }
312
-
313
- return isRowSelected(row, rowSelection, instance) === 'some'
314
- },
315
-
316
- getRowCanSelect: rowId => {
317
- const row = instance.getRow(rowId)
318
-
319
- if (!row) {
320
- throw new Error()
321
- }
322
-
323
- if (typeof instance.options.enableRowSelection === 'function') {
324
- return instance.options.enableRowSelection(row)
325
- }
326
-
327
- return instance.options.enableRowSelection ?? true
328
- },
329
-
330
- getRowCanSelectSubRows: rowId => {
331
- const row = instance.getRow(rowId)
332
-
333
- if (!row) {
334
- throw new Error()
335
- }
336
-
337
- if (typeof instance.options.enableSubRowSelection === 'function') {
338
- return instance.options.enableSubRowSelection(row)
339
- }
340
-
341
- return instance.options.enableSubRowSelection ?? true
342
- },
343
-
344
- getRowCanMultiSelect: rowId => {
345
- const row = instance.getRow(rowId)
346
-
347
- if (!row) {
348
- throw new Error()
349
- }
350
-
351
- if (typeof instance.options.enableMultiRowSelection === 'function') {
352
- return instance.options.enableMultiRowSelection(row)
353
- }
354
-
355
- return instance.options.enableMultiRowSelection ?? true
356
- },
357
-
358
268
  // getGroupingRowCanSelect: rowId => {
359
269
  // const row = instance.getRow(rowId)
360
270
 
@@ -416,21 +326,6 @@ export const RowSelection: TableFeature = {
416
326
  : !!paginationFlatRows?.length
417
327
  },
418
328
 
419
- getToggleRowSelectedHandler: rowId => {
420
- const row = instance.getRow(rowId)
421
-
422
- const isSelected = row.getIsSelected()
423
- const isSomeSelected = row.getIsSomeSelected()
424
- const canSelect = row.getCanSelect()
425
-
426
- return (e: unknown) => {
427
- if (!canSelect) return
428
- row.toggleSelected(
429
- ((e as MouseEvent).target as HTMLInputElement)?.checked
430
- )
431
- }
432
- },
433
-
434
329
  getToggleAllRowsSelectedHandler: () => {
435
330
  return (e: unknown) => {
436
331
  instance.toggleAllRowsSelected(
@@ -454,13 +349,66 @@ export const RowSelection: TableFeature = {
454
349
  instance: TableInstance<TGenerics>
455
350
  ): RowSelectionRow => {
456
351
  return {
457
- getIsSelected: () => instance.getRowIsSelected(row.id),
458
- getIsSomeSelected: () => instance.getRowIsSomeSelected(row.id),
459
- toggleSelected: value => instance.toggleRowSelected(row.id, value),
460
- getToggleSelectedHandler: () =>
461
- instance.getToggleRowSelectedHandler(row.id)!,
462
- getCanMultiSelect: () => instance.getRowCanMultiSelect(row.id),
463
- 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
+ },
464
412
  }
465
413
  },
466
414
  }
@@ -486,7 +434,7 @@ const mutateRowIsSelected = <TGenerics extends TableGenerics>(
486
434
  }
487
435
  // }
488
436
 
489
- if (row.subRows?.length && instance.getRowCanSelectSubRows(row.id)) {
437
+ if (row.subRows?.length && row.getCanSelectSubRows()) {
490
438
  row.subRows.forEach(row =>
491
439
  mutateRowIsSelected(selectedRowIds, row.id, value, instance)
492
440
  )
@@ -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,32 +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 => {
127
+ getAutoSortingFn: () => {
164
128
  const firstRows = instance.getFilteredRowModel().flatRows.slice(100)
165
129
 
166
130
  let isString = false
167
131
 
168
132
  for (const row of firstRows) {
169
- const value = row?.values[columnId]
133
+ const value = row?.values[column.id]
170
134
 
171
135
  if (Object.prototype.toString.call(value) === '[object Date]') {
172
136
  return sortingFns.datetime
@@ -187,10 +151,10 @@ export const Sorting: TableFeature = {
187
151
 
188
152
  return sortingFns.basic
189
153
  },
190
- getColumnAutoSortDir: columnId => {
154
+ getAutoSortDir: () => {
191
155
  const firstRow = instance.getFilteredRowModel().flatRows[0]
192
156
 
193
- const value = firstRow?.values[columnId]
157
+ const value = firstRow?.values[column.id]
194
158
 
195
159
  if (typeof value === 'string') {
196
160
  return 'asc'
@@ -198,8 +162,7 @@ export const Sorting: TableFeature = {
198
162
 
199
163
  return 'desc'
200
164
  },
201
- getColumnSortingFn: columnId => {
202
- const column = instance.getColumn(columnId)
165
+ getSortingFn: () => {
203
166
  const userSortingFn = instance.options.sortingFns
204
167
 
205
168
  if (!column) {
@@ -209,7 +172,7 @@ export const Sorting: TableFeature = {
209
172
  return isFunction(column.sortingFn)
210
173
  ? column.sortingFn
211
174
  : column.sortingFn === 'auto'
212
- ? instance.getColumnAutoSortingFn(columnId)
175
+ ? column.getAutoSortingFn()
213
176
  : (userSortingFn as Record<string, any>)?.[
214
177
  column.sortingFn as string
215
178
  ] ??
@@ -217,16 +180,7 @@ export const Sorting: TableFeature = {
217
180
  column.sortingFn as BuiltInSortingFn
218
181
  ] as SortingFn<TGenerics>)
219
182
  },
220
-
221
- setSorting: updater => instance.options.onSortingChange?.(updater),
222
-
223
- toggleColumnSorting: (columnId, desc, multi) => {
224
- const column = instance.getColumn(columnId)
225
-
226
- if (!column) {
227
- throw new Error()
228
- }
229
-
183
+ toggleSorting: (desc, multi) => {
230
184
  // if (column.columns.length) {
231
185
  // column.columns.forEach((c, i) => {
232
186
  // if (c.id) {
@@ -238,8 +192,8 @@ export const Sorting: TableFeature = {
238
192
 
239
193
  instance.setSorting(old => {
240
194
  // Find any existing sorting for this column
241
- const existingSorting = old?.find(d => d.id === columnId)
242
- 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)
243
197
  const hasDescDefined = typeof desc !== 'undefined' && desc !== null
244
198
 
245
199
  let newSorting: SortingState = []
@@ -267,7 +221,7 @@ export const Sorting: TableFeature = {
267
221
  const sortDescFirst =
268
222
  column.sortDescFirst ??
269
223
  instance.options.sortDescFirst ??
270
- instance.getColumnAutoSortDir(columnId) === 'desc'
224
+ column.getAutoSortDir() === 'desc'
271
225
 
272
226
  // Handle toggle states that will remove the sorting
273
227
  if (
@@ -285,7 +239,7 @@ export const Sorting: TableFeature = {
285
239
  if (sortAction === 'replace') {
286
240
  newSorting = [
287
241
  {
288
- id: columnId,
242
+ id: column.id,
289
243
  desc: hasDescDefined ? desc! : !!sortDescFirst,
290
244
  },
291
245
  ]
@@ -293,7 +247,7 @@ export const Sorting: TableFeature = {
293
247
  newSorting = [
294
248
  ...old,
295
249
  {
296
- id: columnId,
250
+ id: column.id,
297
251
  desc: hasDescDefined ? desc! : !!sortDescFirst,
298
252
  },
299
253
  ]
@@ -307,7 +261,7 @@ export const Sorting: TableFeature = {
307
261
  } else if (sortAction === 'toggle' && old?.length) {
308
262
  // This flips (or sets) the
309
263
  newSorting = old.map(d => {
310
- if (d.id === columnId) {
264
+ if (d.id === column.id) {
311
265
  return {
312
266
  ...d,
313
267
  desc: hasDescDefined ? desc! : !existingSorting?.desc,
@@ -316,38 +270,22 @@ export const Sorting: TableFeature = {
316
270
  return d
317
271
  })
318
272
  } else if (sortAction === 'remove' && old?.length) {
319
- newSorting = old.filter(d => d.id !== columnId)
273
+ newSorting = old.filter(d => d.id !== column.id)
320
274
  }
321
275
 
322
276
  return newSorting
323
277
  })
324
278
  },
325
279
 
326
- getColumnCanSort: columnId => {
327
- const column = instance.getColumn(columnId)
328
-
329
- if (!column) {
330
- throw new Error()
331
- }
332
-
280
+ getCanSort: () => {
333
281
  return (
334
- column.enableSorting ??
335
- instance.options.enableSorting ??
336
- column.defaultCanSort ??
282
+ (column.enableSorting ?? true) &&
283
+ (instance.options.enableSorting ?? true) &&
337
284
  !!column.accessorFn
338
- // (!!column.accessorFn ||
339
- // column.columns?.some(c => c.id && instance.getColumnCanSort(c.id))) ??
340
- // false
341
285
  )
342
286
  },
343
287
 
344
- getColumnCanMultiSort: columnId => {
345
- const column = instance.getColumn(columnId)
346
-
347
- if (!column) {
348
- throw new Error()
349
- }
350
-
288
+ getCanMultiSort: () => {
351
289
  return (
352
290
  column.enableMultiSort ??
353
291
  instance.options.enableMultiSort ??
@@ -355,16 +293,16 @@ export const Sorting: TableFeature = {
355
293
  )
356
294
  },
357
295
 
358
- getColumnIsSorted: columnId => {
296
+ getIsSorted: () => {
359
297
  const columnSort = instance
360
298
  .getState()
361
- .sorting?.find(d => d.id === columnId)
299
+ .sorting?.find(d => d.id === column.id)
362
300
 
363
301
  return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'
364
302
  },
365
303
 
366
- getColumnSortIndex: columnId =>
367
- instance.getState().sorting?.findIndex(d => d.id === columnId) ?? -1,
304
+ getSortIndex: () =>
305
+ instance.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,
368
306
 
369
307
  resetSorting: (columnId?: string) => {
370
308
  if (columnId) {
@@ -376,13 +314,7 @@ export const Sorting: TableFeature = {
376
314
  }
377
315
  },
378
316
 
379
- getToggleSortingHandler: columnId => {
380
- const column = instance.getColumn(columnId)
381
-
382
- if (!column) {
383
- throw new Error()
384
- }
385
-
317
+ getToggleSortingHandler: () => {
386
318
  const canSort = column.getCanSort()
387
319
 
388
320
  return (e: unknown) => {
@@ -396,6 +328,16 @@ export const Sorting: TableFeature = {
396
328
  )
397
329
  }
398
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),
399
341
 
400
342
  getPreSortedRowModel: () => instance.getFilteredRowModel(),
401
343
  getSortedRowModel: () => {