@tanstack/table-core 8.0.0-alpha.9 → 8.0.0-beta.2

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 (186) hide show
  1. package/build/cjs/aggregationFns.js +120 -0
  2. package/build/cjs/aggregationFns.js.map +1 -0
  3. package/build/cjs/core/cell.js +40 -0
  4. package/build/cjs/core/cell.js.map +1 -0
  5. package/build/cjs/core/column.js +88 -0
  6. package/build/cjs/core/column.js.map +1 -0
  7. package/build/cjs/core/headers.js +403 -0
  8. package/build/cjs/core/headers.js.map +1 -0
  9. package/build/cjs/core/instance.js +255 -0
  10. package/build/cjs/core/instance.js.map +1 -0
  11. package/build/cjs/core/row.js +77 -0
  12. package/build/cjs/core/row.js.map +1 -0
  13. package/build/cjs/createTable.js +36 -29
  14. package/build/cjs/createTable.js.map +1 -1
  15. package/build/cjs/features/ColumnSizing.js +157 -189
  16. package/build/cjs/features/ColumnSizing.js.map +1 -1
  17. package/build/cjs/features/Expanding.js +103 -155
  18. package/build/cjs/features/Expanding.js.map +1 -1
  19. package/build/cjs/features/Filters.js +155 -304
  20. package/build/cjs/features/Filters.js.map +1 -1
  21. package/build/cjs/features/Grouping.js +97 -157
  22. package/build/cjs/features/Grouping.js.map +1 -1
  23. package/build/cjs/features/Ordering.js +30 -41
  24. package/build/cjs/features/Ordering.js.map +1 -1
  25. package/build/cjs/features/Pagination.js +102 -105
  26. package/build/cjs/features/Pagination.js.map +1 -1
  27. package/build/cjs/features/Pinning.js +131 -89
  28. package/build/cjs/features/Pinning.js.map +1 -1
  29. package/build/cjs/features/RowSelection.js +138 -267
  30. package/build/cjs/features/RowSelection.js.map +1 -1
  31. package/build/cjs/features/Sorting.js +82 -167
  32. package/build/cjs/features/Sorting.js.map +1 -1
  33. package/build/cjs/features/Visibility.js +69 -115
  34. package/build/cjs/features/Visibility.js.map +1 -1
  35. package/build/cjs/filterFns.js +107 -0
  36. package/build/cjs/filterFns.js.map +1 -0
  37. package/build/cjs/index.js +36 -23
  38. package/build/cjs/index.js.map +1 -1
  39. package/build/cjs/sortingFns.js +124 -0
  40. package/build/cjs/sortingFns.js.map +1 -0
  41. package/build/cjs/utils/filterRowsUtils.js +117 -0
  42. package/build/cjs/utils/filterRowsUtils.js.map +1 -0
  43. package/build/cjs/utils/getCoreRowModel.js +79 -0
  44. package/build/cjs/utils/getCoreRowModel.js.map +1 -0
  45. package/build/cjs/utils/getExpandedRowModel.js +57 -0
  46. package/build/cjs/utils/getExpandedRowModel.js.map +1 -0
  47. package/build/cjs/utils/getFacetedMinMaxValues.js +54 -0
  48. package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -0
  49. package/build/cjs/utils/getFacetedRowModel.js +50 -0
  50. package/build/cjs/utils/getFacetedRowModel.js.map +1 -0
  51. package/build/cjs/utils/getFacetedUniqueValues.js +48 -0
  52. package/build/cjs/utils/getFacetedUniqueValues.js.map +1 -0
  53. package/build/cjs/utils/getFilteredRowModel.js +139 -0
  54. package/build/cjs/utils/getFilteredRowModel.js.map +1 -0
  55. package/build/cjs/utils/getGroupedRowModel.js +161 -0
  56. package/build/cjs/utils/getGroupedRowModel.js.map +1 -0
  57. package/build/cjs/utils/getPaginationRowModel.js +61 -0
  58. package/build/cjs/utils/getPaginationRowModel.js.map +1 -0
  59. package/build/cjs/utils/getSortedRowModel.js +110 -0
  60. package/build/cjs/utils/getSortedRowModel.js.map +1 -0
  61. package/build/cjs/utils.js +38 -107
  62. package/build/cjs/utils.js.map +1 -1
  63. package/build/esm/index.js +2976 -3853
  64. package/build/esm/index.js.map +1 -1
  65. package/build/stats-html.html +1 -1
  66. package/build/stats-react.json +586 -408
  67. package/build/types/aggregationFns.d.ts +13 -0
  68. package/build/types/core/cell.d.ts +9 -0
  69. package/build/types/core/column.d.ts +40 -0
  70. package/build/types/core/headers.d.ts +46 -0
  71. package/build/types/core/instance.d.ts +57 -0
  72. package/build/types/core/row.d.ts +15 -0
  73. package/build/types/createTable.d.ts +47 -26
  74. package/build/types/features/ColumnSizing.d.ts +32 -44
  75. package/build/types/features/Expanding.d.ts +15 -26
  76. package/build/types/features/Filters.d.ts +64 -63
  77. package/build/types/features/Grouping.d.ts +32 -46
  78. package/build/types/features/Ordering.d.ts +7 -10
  79. package/build/types/features/Pagination.d.ts +16 -15
  80. package/build/types/features/Pinning.d.ts +16 -17
  81. package/build/types/features/RowSelection.d.ts +13 -33
  82. package/build/types/features/Sorting.d.ts +25 -44
  83. package/build/types/features/Visibility.d.ts +16 -25
  84. package/build/types/filterFns.d.ts +13 -0
  85. package/build/types/index.d.ts +16 -10
  86. package/build/types/sortingFns.d.ts +11 -0
  87. package/build/types/types.d.ts +37 -122
  88. package/build/types/utils/filterRowsUtils.d.ts +4 -0
  89. package/build/types/utils/getCoreRowModel.d.ts +2 -0
  90. package/build/types/utils/getExpandedRowModel.d.ts +7 -0
  91. package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
  92. package/build/types/utils/getFacetedRowModel.d.ts +2 -0
  93. package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
  94. package/build/types/utils/getFilteredRowModel.d.ts +2 -0
  95. package/build/types/utils/getGroupedRowModel.d.ts +2 -0
  96. package/build/types/utils/getPaginationRowModel.d.ts +4 -0
  97. package/build/types/utils/getSortedRowModel.d.ts +2 -0
  98. package/build/types/utils.d.ts +7 -11
  99. package/build/umd/index.development.js +3024 -3893
  100. package/build/umd/index.development.js.map +1 -1
  101. package/build/umd/index.production.js +1 -1
  102. package/build/umd/index.production.js.map +1 -1
  103. package/package.json +9 -10
  104. package/src/aggregationFns.ts +123 -0
  105. package/src/core/cell.ts +48 -0
  106. package/src/core/column.ts +147 -0
  107. package/src/core/headers.ts +575 -0
  108. package/src/core/instance.ts +359 -0
  109. package/src/core/row.ts +85 -0
  110. package/src/createTable.ts +188 -0
  111. package/src/features/ColumnSizing.ts +170 -185
  112. package/src/features/Expanding.ts +120 -194
  113. package/src/features/Filters.ts +299 -381
  114. package/src/features/Grouping.ts +158 -220
  115. package/src/features/Ordering.ts +24 -25
  116. package/src/features/Pagination.ts +88 -73
  117. package/src/features/Pinning.ts +186 -63
  118. package/src/features/RowSelection.ts +107 -245
  119. package/src/features/Sorting.ts +125 -225
  120. package/src/features/Visibility.ts +116 -132
  121. package/src/filterFns.ts +135 -0
  122. package/src/index.ts +29 -0
  123. package/src/{sortTypes.ts → sortingFns.ts} +63 -85
  124. package/src/types.ts +62 -168
  125. package/src/utils/filterRowsUtils.ts +112 -0
  126. package/src/utils/getCoreRowModel.ts +84 -0
  127. package/src/utils/getExpandedRowModel.ts +54 -0
  128. package/src/utils/getFacetedMinMaxValues.ts +40 -0
  129. package/src/utils/getFacetedRowModel.ts +50 -0
  130. package/src/utils/getFacetedUniqueValues.ts +37 -0
  131. package/src/utils/getFilteredRowModel.ts +159 -0
  132. package/src/utils/getGroupedRowModel.ts +175 -0
  133. package/src/utils/getPaginationRowModel.ts +48 -0
  134. package/src/utils/getSortedRowModel.ts +116 -0
  135. package/src/utils.ts +126 -0
  136. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  137. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  138. package/build/cjs/aggregationTypes.js +0 -130
  139. package/build/cjs/aggregationTypes.js.map +0 -1
  140. package/build/cjs/core.js +0 -545
  141. package/build/cjs/core.js.map +0 -1
  142. package/build/cjs/features/Headers.js +0 -630
  143. package/build/cjs/features/Headers.js.map +0 -1
  144. package/build/cjs/filterTypes.js +0 -172
  145. package/build/cjs/filterTypes.js.map +0 -1
  146. package/build/cjs/sortTypes.js +0 -122
  147. package/build/cjs/sortTypes.js.map +0 -1
  148. package/build/cjs/types.js +0 -22
  149. package/build/cjs/types.js.map +0 -1
  150. package/build/cjs/utils/columnFilterRowsFn.js +0 -131
  151. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  152. package/build/cjs/utils/expandRowsFn.js +0 -38
  153. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  154. package/build/cjs/utils/globalFilterRowsFn.js +0 -101
  155. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  156. package/build/cjs/utils/groupRowsFn.js +0 -155
  157. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  158. package/build/cjs/utils/paginateRowsFn.js +0 -44
  159. package/build/cjs/utils/paginateRowsFn.js.map +0 -1
  160. package/build/cjs/utils/sortRowsFn.js +0 -94
  161. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  162. package/build/types/aggregationTypes.d.ts +0 -22
  163. package/build/types/core.d.ts +0 -105
  164. package/build/types/features/Headers.d.ts +0 -43
  165. package/build/types/filterTypes.d.ts +0 -50
  166. package/build/types/sortTypes.d.ts +0 -18
  167. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  168. package/build/types/utils/expandRowsFn.d.ts +0 -2
  169. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  170. package/build/types/utils/groupRowsFn.d.ts +0 -2
  171. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  172. package/build/types/utils/sortRowsFn.d.ts +0 -2
  173. package/src/.DS_Store +0 -0
  174. package/src/aggregationTypes.ts +0 -115
  175. package/src/core.tsx +0 -763
  176. package/src/createTable.tsx +0 -137
  177. package/src/features/Headers.ts +0 -747
  178. package/src/filterTypes.ts +0 -188
  179. package/src/index.tsx +0 -23
  180. package/src/utils/columnFilterRowsFn.ts +0 -113
  181. package/src/utils/expandRowsFn.ts +0 -30
  182. package/src/utils/globalFilterRowsFn.ts +0 -89
  183. package/src/utils/groupRowsFn.ts +0 -170
  184. package/src/utils/paginateRowsFn.ts +0 -28
  185. package/src/utils/sortRowsFn.ts +0 -95
  186. package/src/utils.tsx +0 -221
@@ -1,27 +1,21 @@
1
- import { MouseEvent, TouchEvent } from 'react'
2
1
  import { RowModel } from '..'
3
- import { BuiltInSortType, reSplitAlphaNumeric, sortTypes } from '../sortTypes'
2
+ import { TableFeature } from '../core/instance'
3
+ import {
4
+ BuiltInSortingFn,
5
+ reSplitAlphaNumeric,
6
+ sortingFns,
7
+ } from '../sortingFns'
4
8
 
5
9
  import {
6
10
  Column,
7
- Getter,
8
- Header,
9
11
  OnChangeFn,
10
- PartialGenerics,
11
- PropGetterValue,
12
+ TableGenerics,
12
13
  TableInstance,
13
14
  Row,
14
15
  Updater,
15
16
  } from '../types'
16
17
 
17
- import {
18
- functionalUpdate,
19
- isFunction,
20
- makeStateUpdater,
21
- memo,
22
- Overwrite,
23
- propGetter,
24
- } from '../utils'
18
+ import { isFunction, makeStateUpdater, Overwrite } from '../utils'
25
19
 
26
20
  export type SortDirection = 'asc' | 'desc'
27
21
 
@@ -32,197 +26,134 @@ export type ColumnSort = {
32
26
 
33
27
  export type SortingState = ColumnSort[]
34
28
 
35
- export type SortingFn<TGenerics extends PartialGenerics> = {
29
+ export type SortingTableState = {
30
+ sorting: SortingState
31
+ }
32
+
33
+ export type SortingFn<TGenerics extends TableGenerics> = {
36
34
  (rowA: Row<TGenerics>, rowB: Row<TGenerics>, columnId: string): number
37
35
  }
38
36
 
39
- export type CustomSortingTypes<TGenerics extends PartialGenerics> = Record<
37
+ export type CustomSortingFns<TGenerics extends TableGenerics> = Record<
40
38
  string,
41
39
  SortingFn<TGenerics>
42
40
  >
43
41
 
44
- export type SortingTableState = {
45
- sorting: SortingState
46
- }
47
-
48
- export type SortType<TGenerics extends PartialGenerics> =
42
+ export type SortingFnOption<TGenerics extends TableGenerics> =
49
43
  | 'auto'
50
- | BuiltInSortType
44
+ | BuiltInSortingFn
51
45
  | keyof TGenerics['SortingFns']
52
46
  | SortingFn<TGenerics>
53
47
 
54
- export type SortingColumnDef<TGenerics extends PartialGenerics> = {
55
- sortType?: SortType<Overwrite<TGenerics, { Value: any }>>
48
+ export type SortingColumnDef<TGenerics extends TableGenerics> = {
49
+ sortingFn?: SortingFnOption<Overwrite<TGenerics, { Value: any }>>
56
50
  sortDescFirst?: boolean
57
51
  enableSorting?: boolean
58
52
  enableMultiSort?: boolean
59
- defaultCanSort?: boolean
60
53
  invertSorting?: boolean
61
54
  sortUndefined?: false | -1 | 1
62
55
  }
63
56
 
64
- export type SortingColumn<TGenerics extends PartialGenerics> = {
65
- sortType: SortType<Overwrite<TGenerics, { Value: any }>>
57
+ export type SortingColumn<TGenerics extends TableGenerics> = {
58
+ getAutoSortingFn: () => SortingFn<TGenerics>
59
+ getAutoSortDir: () => SortDirection
60
+ getSortingFn: () => SortingFn<TGenerics>
66
61
  getCanSort: () => boolean
67
62
  getCanMultiSort: () => boolean
68
63
  getSortIndex: () => number
69
64
  getIsSorted: () => false | SortDirection
65
+ clearSorting: () => void
70
66
  toggleSorting: (desc?: boolean, isMulti?: boolean) => void
71
- getToggleSortingProps: <TGetter extends Getter<ToggleSortingProps>>(
72
- userProps?: TGetter
73
- ) => undefined | PropGetterValue<ToggleSortingProps, TGetter>
67
+ getToggleSortingHandler: () => undefined | ((event: unknown) => void)
74
68
  }
75
69
 
76
- export type SortingOptions<TGenerics extends PartialGenerics> = {
77
- sortTypes?: TGenerics['SortingFns']
70
+ export type SortingOptions<TGenerics extends TableGenerics> = {
71
+ manualSorting?: boolean
72
+ sortingFns?: TGenerics['SortingFns']
78
73
  onSortingChange?: OnChangeFn<SortingState>
79
- autoResetSorting?: boolean
80
74
  enableSorting?: boolean
81
75
  enableSortingRemoval?: boolean
82
76
  enableMultiRemove?: boolean
83
77
  enableMultiSort?: boolean
84
78
  sortDescFirst?: boolean
85
- sortRowsFn?: (
86
- instance: TableInstance<TGenerics>,
87
- rowModel: RowModel<TGenerics>
88
- ) => RowModel<TGenerics>
79
+ getSortedRowModel?: (instance: TableInstance<any>) => () => RowModel<any>
89
80
  maxMultiSortColCount?: number
90
- isMultiSortEvent?: (e: MouseEvent | TouchEvent) => boolean
81
+ isMultiSortEvent?: (e: unknown) => boolean
91
82
  }
92
83
 
93
- export type ToggleSortingProps = {
94
- title?: string
95
- onClick?: (event: MouseEvent | TouchEvent) => void
96
- }
97
-
98
- export type SortingInstance<TGenerics extends PartialGenerics> = {
99
- _notifySortingReset: () => void
100
- getColumnAutoSortingFn: (columnId: string) => SortingFn<TGenerics> | undefined
101
- getColumnAutoSortDir: (columnId: string) => SortDirection
102
-
103
- getColumnSortingFn: (columnId: string) => SortingFn<TGenerics> | undefined
104
-
84
+ export type SortingInstance<TGenerics extends TableGenerics> = {
105
85
  setSorting: (updater: Updater<SortingState>) => void
106
- toggleColumnSorting: (
107
- columnId: string,
108
- desc?: boolean,
109
- multi?: boolean
110
- ) => void
111
- resetSorting: () => void
112
- getColumnCanSort: (columnId: string) => boolean
113
- getColumnCanMultiSort: (columnId: string) => boolean
114
- getColumnIsSorted: (columnId: string) => false | 'asc' | 'desc'
115
- getColumnSortIndex: (columnId: string) => number
116
- getToggleSortingProps: <TGetter extends Getter<ToggleSortingProps>>(
117
- columnId: string,
118
- userProps?: TGetter
119
- ) => undefined | PropGetterValue<ToggleSortingProps, TGetter>
86
+ resetSorting: (defaultState?: boolean) => void
120
87
  getPreSortedRowModel: () => RowModel<TGenerics>
121
88
  getSortedRowModel: () => RowModel<TGenerics>
89
+ _getSortedRowModel?: () => RowModel<TGenerics>
122
90
  }
123
91
 
124
92
  //
125
93
 
126
- export const Sorting = {
127
- getDefaultColumn: <
128
- TGenerics extends PartialGenerics
129
- >(): SortingColumnDef<TGenerics> => {
94
+ export const Sorting: TableFeature = {
95
+ getInitialState: (state): SortingTableState => {
130
96
  return {
131
- sortType: 'auto',
97
+ sorting: [],
98
+ ...state,
132
99
  }
133
100
  },
134
101
 
135
- getInitialState: (): SortingTableState => {
102
+ getDefaultColumnDef: <
103
+ TGenerics extends TableGenerics
104
+ >(): SortingColumnDef<TGenerics> => {
136
105
  return {
137
- sorting: [],
106
+ sortingFn: 'auto',
138
107
  }
139
108
  },
140
109
 
141
- getDefaultOptions: <TGenerics extends PartialGenerics>(
110
+ getDefaultOptions: <TGenerics extends TableGenerics>(
142
111
  instance: TableInstance<TGenerics>
143
112
  ): SortingOptions<TGenerics> => {
144
113
  return {
145
114
  onSortingChange: makeStateUpdater('sorting', instance),
146
- autoResetSorting: true,
147
- isMultiSortEvent: (e: MouseEvent | TouchEvent) => {
148
- return e.shiftKey
115
+ isMultiSortEvent: (e: unknown) => {
116
+ return (e as MouseEvent).shiftKey
149
117
  },
150
118
  }
151
119
  },
152
120
 
153
- createColumn: <TGenerics extends PartialGenerics>(
121
+ createColumn: <TGenerics extends TableGenerics>(
154
122
  column: Column<TGenerics>,
155
123
  instance: TableInstance<TGenerics>
156
124
  ): SortingColumn<TGenerics> => {
157
125
  return {
158
- sortType: column.sortType,
159
- getCanSort: () => instance.getColumnCanSort(column.id),
160
- getCanMultiSort: () => instance.getColumnCanMultiSort(column.id),
161
- getSortIndex: () => instance.getColumnSortIndex(column.id),
162
- getIsSorted: () => instance.getColumnIsSorted(column.id),
163
- toggleSorting: (desc, isMulti) =>
164
- instance.toggleColumnSorting(column.id, desc, isMulti),
165
- getToggleSortingProps: userProps =>
166
- instance.getToggleSortingProps(column.id, userProps),
167
- }
168
- },
169
-
170
- getInstance: <TGenerics extends PartialGenerics>(
171
- instance: TableInstance<TGenerics>
172
- ): SortingInstance<TGenerics> => {
173
- let registered = false
174
-
175
- return {
176
- _notifySortingReset: () => {
177
- if (!registered) {
178
- registered = true
179
- return
180
- }
181
-
182
- if (instance.options.autoResetAll === false) {
183
- return
184
- }
185
-
186
- if (
187
- instance.options.autoResetAll === true ||
188
- instance.options.autoResetSorting
189
- ) {
190
- instance.resetSorting()
191
- }
192
- },
193
- getColumnAutoSortingFn: columnId => {
194
- const firstRows = instance
195
- .getGlobalFilteredRowModel()
196
- .flatRows.slice(100)
126
+ getAutoSortingFn: () => {
127
+ const firstRows = instance.getFilteredRowModel().flatRows.slice(10)
197
128
 
198
129
  let isString = false
199
130
 
200
131
  for (const row of firstRows) {
201
- const value = row?.values[columnId]
132
+ const value = row?.getValue(column.id)
202
133
 
203
134
  if (Object.prototype.toString.call(value) === '[object Date]') {
204
- return sortTypes.datetime
135
+ return sortingFns.datetime
205
136
  }
206
137
 
207
138
  if (typeof value === 'string') {
208
139
  isString = true
209
140
 
210
141
  if (value.split(reSplitAlphaNumeric).length > 1) {
211
- return sortTypes.alphanumeric
142
+ return sortingFns.alphanumeric
212
143
  }
213
144
  }
214
145
  }
215
146
 
216
147
  if (isString) {
217
- return sortTypes.text
148
+ return sortingFns.text
218
149
  }
219
150
 
220
- return sortTypes.basic
151
+ return sortingFns.basic
221
152
  },
222
- getColumnAutoSortDir: columnId => {
223
- const firstRow = instance.getGlobalFilteredRowModel().flatRows[0]
153
+ getAutoSortDir: () => {
154
+ const firstRow = instance.getFilteredRowModel().flatRows[0]
224
155
 
225
- const value = firstRow?.values[columnId]
156
+ const value = firstRow?.getValue(column.id)
226
157
 
227
158
  if (typeof value === 'string') {
228
159
  return 'asc'
@@ -230,39 +161,25 @@ export const Sorting = {
230
161
 
231
162
  return 'desc'
232
163
  },
233
- getColumnSortingFn: columnId => {
234
- const column = instance.getColumn(columnId)
235
- const userSortTypes = instance.options.sortTypes
164
+ getSortingFn: () => {
165
+ const userSortingFn = instance.options.sortingFns
236
166
 
237
167
  if (!column) {
238
168
  throw new Error()
239
169
  }
240
170
 
241
- return isFunction(column.sortType)
242
- ? column.sortType
243
- : column.sortType === 'auto'
244
- ? instance.getColumnAutoSortingFn(columnId)
245
- : (userSortTypes as Record<string, any>)?.[
246
- column.sortType as string
171
+ return isFunction(column.columnDef.sortingFn)
172
+ ? column.columnDef.sortingFn
173
+ : column.columnDef.sortingFn === 'auto'
174
+ ? column.getAutoSortingFn()
175
+ : (userSortingFn as Record<string, any>)?.[
176
+ column.columnDef.sortingFn as string
247
177
  ] ??
248
- (sortTypes[
249
- column.sortType as BuiltInSortType
178
+ (sortingFns[
179
+ column.columnDef.sortingFn as BuiltInSortingFn
250
180
  ] as SortingFn<TGenerics>)
251
181
  },
252
-
253
- setSorting: updater =>
254
- instance.options.onSortingChange?.(
255
- updater,
256
- functionalUpdate(updater, instance.getState().sorting)
257
- ),
258
-
259
- toggleColumnSorting: (columnId, desc, multi) => {
260
- const column = instance.getColumn(columnId)
261
-
262
- if (!column) {
263
- throw new Error()
264
- }
265
-
182
+ toggleSorting: (desc, multi) => {
266
183
  // if (column.columns.length) {
267
184
  // column.columns.forEach((c, i) => {
268
185
  // if (c.id) {
@@ -274,8 +191,8 @@ export const Sorting = {
274
191
 
275
192
  instance.setSorting(old => {
276
193
  // Find any existing sorting for this column
277
- const existingSorting = old?.find(d => d.id === columnId)
278
- const existingIndex = old?.findIndex(d => d.id === columnId)
194
+ const existingSorting = old?.find(d => d.id === column.id)
195
+ const existingIndex = old?.findIndex(d => d.id === column.id)
279
196
  const hasDescDefined = typeof desc !== 'undefined' && desc !== null
280
197
 
281
198
  let newSorting: SortingState = []
@@ -301,9 +218,9 @@ export const Sorting = {
301
218
  }
302
219
 
303
220
  const sortDescFirst =
304
- column.sortDescFirst ??
221
+ column.columnDef.sortDescFirst ??
305
222
  instance.options.sortDescFirst ??
306
- instance.getColumnAutoSortDir(columnId) === 'desc'
223
+ column.getAutoSortDir() === 'desc'
307
224
 
308
225
  // Handle toggle states that will remove the sorting
309
226
  if (
@@ -321,7 +238,7 @@ export const Sorting = {
321
238
  if (sortAction === 'replace') {
322
239
  newSorting = [
323
240
  {
324
- id: columnId,
241
+ id: column.id,
325
242
  desc: hasDescDefined ? desc! : !!sortDescFirst,
326
243
  },
327
244
  ]
@@ -329,7 +246,7 @@ export const Sorting = {
329
246
  newSorting = [
330
247
  ...old,
331
248
  {
332
- id: columnId,
249
+ id: column.id,
333
250
  desc: hasDescDefined ? desc! : !!sortDescFirst,
334
251
  },
335
252
  ]
@@ -343,7 +260,7 @@ export const Sorting = {
343
260
  } else if (sortAction === 'toggle' && old?.length) {
344
261
  // This flips (or sets) the
345
262
  newSorting = old.map(d => {
346
- if (d.id === columnId) {
263
+ if (d.id === column.id) {
347
264
  return {
348
265
  ...d,
349
266
  desc: hasDescDefined ? desc! : !existingSorting?.desc,
@@ -352,109 +269,92 @@ export const Sorting = {
352
269
  return d
353
270
  })
354
271
  } else if (sortAction === 'remove' && old?.length) {
355
- newSorting = old.filter(d => d.id !== columnId)
272
+ newSorting = old.filter(d => d.id !== column.id)
356
273
  }
357
274
 
358
275
  return newSorting
359
276
  })
360
277
  },
361
278
 
362
- getColumnCanSort: columnId => {
363
- const column = instance.getColumn(columnId)
364
-
365
- if (!column) {
366
- throw new Error()
367
- }
368
-
279
+ getCanSort: () => {
369
280
  return (
370
- column.enableSorting ??
371
- instance.options.enableSorting ??
372
- column.defaultCanSort ??
281
+ (column.columnDef.enableSorting ?? true) &&
282
+ (instance.options.enableSorting ?? true) &&
373
283
  !!column.accessorFn
374
- // (!!column.accessorFn ||
375
- // column.columns?.some(c => c.id && instance.getColumnCanSort(c.id))) ??
376
- // false
377
284
  )
378
285
  },
379
286
 
380
- getColumnCanMultiSort: columnId => {
381
- const column = instance.getColumn(columnId)
382
-
383
- if (!column) {
384
- throw new Error()
385
- }
386
-
287
+ getCanMultiSort: () => {
387
288
  return (
388
- column.enableMultiSort ??
289
+ column.columnDef.enableMultiSort ??
389
290
  instance.options.enableMultiSort ??
390
291
  !!column.accessorFn
391
292
  )
392
293
  },
393
294
 
394
- getColumnIsSorted: columnId => {
295
+ getIsSorted: () => {
395
296
  const columnSort = instance
396
297
  .getState()
397
- .sorting?.find(d => d.id === columnId)
298
+ .sorting?.find(d => d.id === column.id)
398
299
 
399
300
  return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'
400
301
  },
401
302
 
402
- getColumnSortIndex: columnId =>
403
- instance.getState().sorting?.findIndex(d => d.id === columnId) ?? -1,
303
+ getSortIndex: () =>
304
+ instance.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,
404
305
 
405
- resetSorting: () => {
406
- instance.setSorting(instance.initialState?.sorting ?? [])
306
+ clearSorting: () => {
307
+ //clear sorting for just 1 column
308
+ instance.setSorting(old =>
309
+ old?.length ? old.filter(d => d.id !== column.id) : []
310
+ )
407
311
  },
408
312
 
409
- getToggleSortingProps: (columnId, userProps) => {
410
- const column = instance.getColumn(columnId)
411
-
412
- if (!column) {
413
- throw new Error()
414
- }
415
-
313
+ getToggleSortingHandler: () => {
416
314
  const canSort = column.getCanSort()
417
315
 
418
- const initialProps: ToggleSortingProps = {
419
- title: canSort ? 'Toggle Sorting' : undefined,
420
- onClick: canSort
421
- ? (e: MouseEvent | TouchEvent) => {
422
- e.persist()
423
- column.toggleSorting?.(
424
- undefined,
425
- column.getCanMultiSort()
426
- ? instance.options.isMultiSortEvent?.(e)
427
- : false
428
- )
429
- }
430
- : undefined,
316
+ return (e: unknown) => {
317
+ if (!canSort) return
318
+ ;(e as any).persist?.()
319
+ column.toggleSorting?.(
320
+ undefined,
321
+ column.getCanMultiSort()
322
+ ? instance.options.isMultiSortEvent?.(e)
323
+ : false
324
+ )
431
325
  }
432
-
433
- return propGetter(initialProps, userProps)
434
326
  },
327
+ }
328
+ },
435
329
 
436
- getPreSortedRowModel: () => instance.getGlobalFilteredRowModel(),
437
- getSortedRowModel: memo(
438
- () => [
439
- instance.getState().sorting,
440
- instance.getGlobalFilteredRowModel(),
441
- instance.options.sortRowsFn,
442
- ],
443
- (sorting, rowModel, sortingFn) => {
444
- if (!sortingFn || !sorting?.length) {
445
- return rowModel
446
- }
330
+ createInstance: <TGenerics extends TableGenerics>(
331
+ instance: TableInstance<TGenerics>
332
+ ): SortingInstance<TGenerics> => {
333
+ let registered = false
447
334
 
448
- return sortingFn(instance, rowModel)
449
- },
450
- {
451
- key: 'getSortedRowModel',
452
- debug: () => instance.options.debugAll ?? instance.options.debugTable,
453
- onChange: () => {
454
- instance._notifyGroupingReset()
455
- },
335
+ return {
336
+ setSorting: updater => instance.options.onSortingChange?.(updater),
337
+ resetSorting: defaultState => {
338
+ instance.setSorting(
339
+ defaultState ? [] : instance.initialState?.sorting ?? []
340
+ )
341
+ },
342
+ getPreSortedRowModel: () => instance.getFilteredRowModel(),
343
+ getSortedRowModel: () => {
344
+ if (
345
+ !instance._getSortedRowModel &&
346
+ instance.options.getSortedRowModel
347
+ ) {
348
+ instance._getSortedRowModel =
349
+ instance.options.getSortedRowModel(instance)
456
350
  }
457
- ),
351
+
352
+ if (instance.options.manualSorting || !instance._getSortedRowModel) {
353
+ return instance.getPreSortedRowModel()
354
+ }
355
+
356
+ return instance._getSortedRowModel()
357
+ },
458
358
  }
459
359
  },
460
360
  }