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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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/.DS_Store +0 -0
  105. package/src/aggregationFns.ts +123 -0
  106. package/src/core/cell.ts +48 -0
  107. package/src/core/column.ts +147 -0
  108. package/src/core/headers.ts +575 -0
  109. package/src/core/instance.ts +361 -0
  110. package/src/core/row.ts +85 -0
  111. package/src/createTable.ts +188 -0
  112. package/src/features/ColumnSizing.ts +170 -185
  113. package/src/features/Expanding.ts +122 -194
  114. package/src/features/Filters.ts +301 -381
  115. package/src/features/Grouping.ts +160 -220
  116. package/src/features/Ordering.ts +24 -25
  117. package/src/features/Pagination.ts +90 -73
  118. package/src/features/Pinning.ts +186 -63
  119. package/src/features/RowSelection.ts +107 -245
  120. package/src/features/Sorting.ts +127 -225
  121. package/src/features/Visibility.ts +116 -132
  122. package/src/filterFns.ts +135 -0
  123. package/src/index.ts +29 -0
  124. package/src/{sortTypes.ts → sortingFns.ts} +63 -85
  125. package/src/types.ts +62 -168
  126. package/src/utils/filterRowsUtils.ts +112 -0
  127. package/src/utils/getCoreRowModel.ts +84 -0
  128. package/src/utils/getExpandedRowModel.ts +54 -0
  129. package/src/utils/getFacetedMinMaxValues.ts +40 -0
  130. package/src/utils/getFacetedRowModel.ts +50 -0
  131. package/src/utils/getFacetedUniqueValues.ts +37 -0
  132. package/src/utils/getFilteredRowModel.ts +159 -0
  133. package/src/utils/getGroupedRowModel.ts +175 -0
  134. package/src/utils/getPaginationRowModel.ts +48 -0
  135. package/src/utils/getSortedRowModel.ts +116 -0
  136. package/src/utils.ts +126 -0
  137. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  138. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  139. package/build/cjs/aggregationTypes.js +0 -130
  140. package/build/cjs/aggregationTypes.js.map +0 -1
  141. package/build/cjs/core.js +0 -545
  142. package/build/cjs/core.js.map +0 -1
  143. package/build/cjs/features/Headers.js +0 -630
  144. package/build/cjs/features/Headers.js.map +0 -1
  145. package/build/cjs/filterTypes.js +0 -172
  146. package/build/cjs/filterTypes.js.map +0 -1
  147. package/build/cjs/sortTypes.js +0 -122
  148. package/build/cjs/sortTypes.js.map +0 -1
  149. package/build/cjs/types.js +0 -22
  150. package/build/cjs/types.js.map +0 -1
  151. package/build/cjs/utils/columnFilterRowsFn.js +0 -131
  152. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  153. package/build/cjs/utils/expandRowsFn.js +0 -38
  154. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  155. package/build/cjs/utils/globalFilterRowsFn.js +0 -101
  156. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  157. package/build/cjs/utils/groupRowsFn.js +0 -155
  158. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  159. package/build/cjs/utils/paginateRowsFn.js +0 -44
  160. package/build/cjs/utils/paginateRowsFn.js.map +0 -1
  161. package/build/cjs/utils/sortRowsFn.js +0 -94
  162. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  163. package/build/types/aggregationTypes.d.ts +0 -22
  164. package/build/types/core.d.ts +0 -105
  165. package/build/types/features/Headers.d.ts +0 -43
  166. package/build/types/filterTypes.d.ts +0 -50
  167. package/build/types/sortTypes.d.ts +0 -18
  168. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  169. package/build/types/utils/expandRowsFn.d.ts +0 -2
  170. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  171. package/build/types/utils/groupRowsFn.d.ts +0 -2
  172. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  173. package/build/types/utils/sortRowsFn.d.ts +0 -2
  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,136 @@ 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?: (
80
+ instance: TableInstance<TGenerics>
81
+ ) => () => RowModel<TGenerics>
89
82
  maxMultiSortColCount?: number
90
- isMultiSortEvent?: (e: MouseEvent | TouchEvent) => boolean
91
- }
92
-
93
- export type ToggleSortingProps = {
94
- title?: string
95
- onClick?: (event: MouseEvent | TouchEvent) => void
83
+ isMultiSortEvent?: (e: unknown) => boolean
96
84
  }
97
85
 
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
-
86
+ export type SortingInstance<TGenerics extends TableGenerics> = {
105
87
  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>
88
+ resetSorting: (defaultState?: boolean) => void
120
89
  getPreSortedRowModel: () => RowModel<TGenerics>
121
90
  getSortedRowModel: () => RowModel<TGenerics>
91
+ _getSortedRowModel?: () => RowModel<TGenerics>
122
92
  }
123
93
 
124
94
  //
125
95
 
126
- export const Sorting = {
127
- getDefaultColumn: <
128
- TGenerics extends PartialGenerics
129
- >(): SortingColumnDef<TGenerics> => {
96
+ export const Sorting: TableFeature = {
97
+ getInitialState: (state): SortingTableState => {
130
98
  return {
131
- sortType: 'auto',
99
+ sorting: [],
100
+ ...state,
132
101
  }
133
102
  },
134
103
 
135
- getInitialState: (): SortingTableState => {
104
+ getDefaultColumnDef: <
105
+ TGenerics extends TableGenerics
106
+ >(): SortingColumnDef<TGenerics> => {
136
107
  return {
137
- sorting: [],
108
+ sortingFn: 'auto',
138
109
  }
139
110
  },
140
111
 
141
- getDefaultOptions: <TGenerics extends PartialGenerics>(
112
+ getDefaultOptions: <TGenerics extends TableGenerics>(
142
113
  instance: TableInstance<TGenerics>
143
114
  ): SortingOptions<TGenerics> => {
144
115
  return {
145
116
  onSortingChange: makeStateUpdater('sorting', instance),
146
- autoResetSorting: true,
147
- isMultiSortEvent: (e: MouseEvent | TouchEvent) => {
148
- return e.shiftKey
117
+ isMultiSortEvent: (e: unknown) => {
118
+ return (e as MouseEvent).shiftKey
149
119
  },
150
120
  }
151
121
  },
152
122
 
153
- createColumn: <TGenerics extends PartialGenerics>(
123
+ createColumn: <TGenerics extends TableGenerics>(
154
124
  column: Column<TGenerics>,
155
125
  instance: TableInstance<TGenerics>
156
126
  ): SortingColumn<TGenerics> => {
157
127
  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)
128
+ getAutoSortingFn: () => {
129
+ const firstRows = instance.getFilteredRowModel().flatRows.slice(10)
197
130
 
198
131
  let isString = false
199
132
 
200
133
  for (const row of firstRows) {
201
- const value = row?.values[columnId]
134
+ const value = row?.getValue(column.id)
202
135
 
203
136
  if (Object.prototype.toString.call(value) === '[object Date]') {
204
- return sortTypes.datetime
137
+ return sortingFns.datetime
205
138
  }
206
139
 
207
140
  if (typeof value === 'string') {
208
141
  isString = true
209
142
 
210
143
  if (value.split(reSplitAlphaNumeric).length > 1) {
211
- return sortTypes.alphanumeric
144
+ return sortingFns.alphanumeric
212
145
  }
213
146
  }
214
147
  }
215
148
 
216
149
  if (isString) {
217
- return sortTypes.text
150
+ return sortingFns.text
218
151
  }
219
152
 
220
- return sortTypes.basic
153
+ return sortingFns.basic
221
154
  },
222
- getColumnAutoSortDir: columnId => {
223
- const firstRow = instance.getGlobalFilteredRowModel().flatRows[0]
155
+ getAutoSortDir: () => {
156
+ const firstRow = instance.getFilteredRowModel().flatRows[0]
224
157
 
225
- const value = firstRow?.values[columnId]
158
+ const value = firstRow?.getValue(column.id)
226
159
 
227
160
  if (typeof value === 'string') {
228
161
  return 'asc'
@@ -230,39 +163,25 @@ export const Sorting = {
230
163
 
231
164
  return 'desc'
232
165
  },
233
- getColumnSortingFn: columnId => {
234
- const column = instance.getColumn(columnId)
235
- const userSortTypes = instance.options.sortTypes
166
+ getSortingFn: () => {
167
+ const userSortingFn = instance.options.sortingFns
236
168
 
237
169
  if (!column) {
238
170
  throw new Error()
239
171
  }
240
172
 
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
173
+ return isFunction(column.columnDef.sortingFn)
174
+ ? column.columnDef.sortingFn
175
+ : column.columnDef.sortingFn === 'auto'
176
+ ? column.getAutoSortingFn()
177
+ : (userSortingFn as Record<string, any>)?.[
178
+ column.columnDef.sortingFn as string
247
179
  ] ??
248
- (sortTypes[
249
- column.sortType as BuiltInSortType
180
+ (sortingFns[
181
+ column.columnDef.sortingFn as BuiltInSortingFn
250
182
  ] as SortingFn<TGenerics>)
251
183
  },
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
-
184
+ toggleSorting: (desc, multi) => {
266
185
  // if (column.columns.length) {
267
186
  // column.columns.forEach((c, i) => {
268
187
  // if (c.id) {
@@ -274,8 +193,8 @@ export const Sorting = {
274
193
 
275
194
  instance.setSorting(old => {
276
195
  // 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)
196
+ const existingSorting = old?.find(d => d.id === column.id)
197
+ const existingIndex = old?.findIndex(d => d.id === column.id)
279
198
  const hasDescDefined = typeof desc !== 'undefined' && desc !== null
280
199
 
281
200
  let newSorting: SortingState = []
@@ -301,9 +220,9 @@ export const Sorting = {
301
220
  }
302
221
 
303
222
  const sortDescFirst =
304
- column.sortDescFirst ??
223
+ column.columnDef.sortDescFirst ??
305
224
  instance.options.sortDescFirst ??
306
- instance.getColumnAutoSortDir(columnId) === 'desc'
225
+ column.getAutoSortDir() === 'desc'
307
226
 
308
227
  // Handle toggle states that will remove the sorting
309
228
  if (
@@ -321,7 +240,7 @@ export const Sorting = {
321
240
  if (sortAction === 'replace') {
322
241
  newSorting = [
323
242
  {
324
- id: columnId,
243
+ id: column.id,
325
244
  desc: hasDescDefined ? desc! : !!sortDescFirst,
326
245
  },
327
246
  ]
@@ -329,7 +248,7 @@ export const Sorting = {
329
248
  newSorting = [
330
249
  ...old,
331
250
  {
332
- id: columnId,
251
+ id: column.id,
333
252
  desc: hasDescDefined ? desc! : !!sortDescFirst,
334
253
  },
335
254
  ]
@@ -343,7 +262,7 @@ export const Sorting = {
343
262
  } else if (sortAction === 'toggle' && old?.length) {
344
263
  // This flips (or sets) the
345
264
  newSorting = old.map(d => {
346
- if (d.id === columnId) {
265
+ if (d.id === column.id) {
347
266
  return {
348
267
  ...d,
349
268
  desc: hasDescDefined ? desc! : !existingSorting?.desc,
@@ -352,109 +271,92 @@ export const Sorting = {
352
271
  return d
353
272
  })
354
273
  } else if (sortAction === 'remove' && old?.length) {
355
- newSorting = old.filter(d => d.id !== columnId)
274
+ newSorting = old.filter(d => d.id !== column.id)
356
275
  }
357
276
 
358
277
  return newSorting
359
278
  })
360
279
  },
361
280
 
362
- getColumnCanSort: columnId => {
363
- const column = instance.getColumn(columnId)
364
-
365
- if (!column) {
366
- throw new Error()
367
- }
368
-
281
+ getCanSort: () => {
369
282
  return (
370
- column.enableSorting ??
371
- instance.options.enableSorting ??
372
- column.defaultCanSort ??
283
+ (column.columnDef.enableSorting ?? true) &&
284
+ (instance.options.enableSorting ?? true) &&
373
285
  !!column.accessorFn
374
- // (!!column.accessorFn ||
375
- // column.columns?.some(c => c.id && instance.getColumnCanSort(c.id))) ??
376
- // false
377
286
  )
378
287
  },
379
288
 
380
- getColumnCanMultiSort: columnId => {
381
- const column = instance.getColumn(columnId)
382
-
383
- if (!column) {
384
- throw new Error()
385
- }
386
-
289
+ getCanMultiSort: () => {
387
290
  return (
388
- column.enableMultiSort ??
291
+ column.columnDef.enableMultiSort ??
389
292
  instance.options.enableMultiSort ??
390
293
  !!column.accessorFn
391
294
  )
392
295
  },
393
296
 
394
- getColumnIsSorted: columnId => {
297
+ getIsSorted: () => {
395
298
  const columnSort = instance
396
299
  .getState()
397
- .sorting?.find(d => d.id === columnId)
300
+ .sorting?.find(d => d.id === column.id)
398
301
 
399
302
  return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'
400
303
  },
401
304
 
402
- getColumnSortIndex: columnId =>
403
- instance.getState().sorting?.findIndex(d => d.id === columnId) ?? -1,
305
+ getSortIndex: () =>
306
+ instance.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,
404
307
 
405
- resetSorting: () => {
406
- instance.setSorting(instance.initialState?.sorting ?? [])
308
+ clearSorting: () => {
309
+ //clear sorting for just 1 column
310
+ instance.setSorting(old =>
311
+ old?.length ? old.filter(d => d.id !== column.id) : []
312
+ )
407
313
  },
408
314
 
409
- getToggleSortingProps: (columnId, userProps) => {
410
- const column = instance.getColumn(columnId)
411
-
412
- if (!column) {
413
- throw new Error()
414
- }
415
-
315
+ getToggleSortingHandler: () => {
416
316
  const canSort = column.getCanSort()
417
317
 
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,
318
+ return (e: unknown) => {
319
+ if (!canSort) return
320
+ ;(e as any).persist?.()
321
+ column.toggleSorting?.(
322
+ undefined,
323
+ column.getCanMultiSort()
324
+ ? instance.options.isMultiSortEvent?.(e)
325
+ : false
326
+ )
431
327
  }
432
-
433
- return propGetter(initialProps, userProps)
434
328
  },
329
+ }
330
+ },
435
331
 
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
- }
332
+ createInstance: <TGenerics extends TableGenerics>(
333
+ instance: TableInstance<TGenerics>
334
+ ): SortingInstance<TGenerics> => {
335
+ let registered = false
447
336
 
448
- return sortingFn(instance, rowModel)
449
- },
450
- {
451
- key: 'getSortedRowModel',
452
- debug: () => instance.options.debugAll ?? instance.options.debugTable,
453
- onChange: () => {
454
- instance._notifyGroupingReset()
455
- },
337
+ return {
338
+ setSorting: updater => instance.options.onSortingChange?.(updater),
339
+ resetSorting: defaultState => {
340
+ instance.setSorting(
341
+ defaultState ? [] : instance.initialState?.sorting ?? []
342
+ )
343
+ },
344
+ getPreSortedRowModel: () => instance.getFilteredRowModel(),
345
+ getSortedRowModel: () => {
346
+ if (
347
+ !instance._getSortedRowModel &&
348
+ instance.options.getSortedRowModel
349
+ ) {
350
+ instance._getSortedRowModel =
351
+ instance.options.getSortedRowModel(instance)
456
352
  }
457
- ),
353
+
354
+ if (instance.options.manualSorting || !instance._getSortedRowModel) {
355
+ return instance.getPreSortedRowModel()
356
+ }
357
+
358
+ return instance._getSortedRowModel()
359
+ },
458
360
  }
459
361
  },
460
362
  }