@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,15 +1,13 @@
1
- import React, { MouseEvent, TouchEvent } from 'react'
1
+ import { TableFeature } from '../core/instance'
2
2
  import {
3
- Getter,
4
3
  OnChangeFn,
5
- PartialGenerics,
6
- PropGetterValue,
4
+ TableGenerics,
7
5
  TableInstance,
8
6
  Row,
9
7
  RowModel,
10
8
  Updater,
11
9
  } from '../types'
12
- import { functionalUpdate, makeStateUpdater, memo, propGetter } from '../utils'
10
+ import { makeStateUpdater, memo } from '../utils'
13
11
 
14
12
  export type RowSelectionState = Record<string, boolean>
15
13
 
@@ -17,19 +15,18 @@ export type RowSelectionTableState = {
17
15
  rowSelection: RowSelectionState
18
16
  }
19
17
 
20
- export type RowSelectionOptions<TGenerics extends PartialGenerics> = {
21
- onRowSelectionChange?: OnChangeFn<RowSelectionState>
22
- autoResetRowSelection?: boolean
18
+ export type RowSelectionOptions<TGenerics extends TableGenerics> = {
23
19
  enableRowSelection?: boolean | ((row: Row<TGenerics>) => boolean)
24
20
  enableMultiRowSelection?: boolean | ((row: Row<TGenerics>) => boolean)
25
21
  enableSubRowSelection?: boolean | ((row: Row<TGenerics>) => boolean)
22
+ onRowSelectionChange?: OnChangeFn<RowSelectionState>
26
23
  // enableGroupingRowSelection?:
27
24
  // | boolean
28
25
  // | ((
29
26
  // row: Row<TGenerics>
30
27
  // ) => boolean)
31
- // isAdditiveSelectEvent?: (e: MouseEvent | TouchEvent) => boolean
32
- // isInclusiveSelectEvent?: (e: MouseEvent | TouchEvent) => boolean
28
+ // isAdditiveSelectEvent?: (e: unknown) => boolean
29
+ // isInclusiveSelectEvent?: (e: unknown) => boolean
33
30
  // selectRowsFn?: (
34
31
  // instance: TableInstance<
35
32
  // TData,
@@ -42,49 +39,21 @@ export type RowSelectionOptions<TGenerics extends PartialGenerics> = {
42
39
  // ) => RowModel<TGenerics>
43
40
  }
44
41
 
45
- type ToggleRowSelectedProps = {
46
- onChange?: (e: MouseEvent | TouchEvent) => void
47
- checked?: boolean
48
- title?: string
49
- indeterminate?: boolean
50
- }
51
-
52
42
  export type RowSelectionRow = {
53
43
  getIsSelected: () => boolean
54
44
  getIsSomeSelected: () => boolean
55
45
  getCanSelect: () => boolean
56
46
  getCanMultiSelect: () => boolean
47
+ getCanSelectSubRows: () => boolean
57
48
  toggleSelected: (value?: boolean) => void
58
- getToggleSelectedProps: <TGetter extends Getter<ToggleRowSelectedProps>>(
59
- userProps?: TGetter
60
- ) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
49
+ getToggleSelectedHandler: () => (event: unknown) => void
61
50
  }
62
51
 
63
- export type RowSelectionInstance<TGenerics extends PartialGenerics> = {
64
- _notifyRowSelectionReset: () => void
65
- getToggleRowSelectedProps: <TGetter extends Getter<ToggleRowSelectedProps>>(
66
- rowId: string,
67
- userProps?: TGetter
68
- ) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
69
- getToggleAllRowsSelectedProps: <
70
- TGetter extends Getter<ToggleRowSelectedProps>
71
- >(
72
- userProps?: TGetter
73
- ) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
74
- getToggleAllPageRowsSelectedProps: <
75
- TGetter extends Getter<ToggleRowSelectedProps>
76
- >(
77
- userProps?: TGetter
78
- ) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
52
+ export type RowSelectionInstance<TGenerics extends TableGenerics> = {
53
+ getToggleAllRowsSelectedHandler: () => (event: unknown) => void
54
+ getToggleAllPageRowsSelectedHandler: () => (event: unknown) => void
79
55
  setRowSelection: (updater: Updater<RowSelectionState>) => void
80
- resetRowSelection: () => void
81
- toggleRowSelected: (rowId: string, value?: boolean) => void
82
- getRowCanSelect: (rowId: string) => boolean
83
- getRowCanSelectSubRows: (rowId: string) => boolean
84
- getRowCanMultiSelect: (rowId: string) => boolean
85
- // getGroupingRowCanSelect: (rowId: string) => boolean
86
- getRowIsSelected: (rowId: string) => boolean
87
- getRowIsSomeSelected: (rowId: string) => boolean
56
+ resetRowSelection: (defaultState?: boolean) => void
88
57
  getIsAllRowsSelected: () => boolean
89
58
  getIsAllPageRowsSelected: () => boolean
90
59
  getIsSomeRowsSelected: () => boolean
@@ -99,60 +68,38 @@ export type RowSelectionInstance<TGenerics extends PartialGenerics> = {
99
68
 
100
69
  //
101
70
 
102
- export const RowSelection = {
103
- getInitialState: (): RowSelectionTableState => {
71
+ export const RowSelection: TableFeature = {
72
+ getInitialState: (state): RowSelectionTableState => {
104
73
  return {
105
74
  rowSelection: {},
75
+ ...state,
106
76
  }
107
77
  },
108
78
 
109
- getDefaultOptions: <TGenerics extends PartialGenerics>(
79
+ getDefaultOptions: <TGenerics extends TableGenerics>(
110
80
  instance: TableInstance<TGenerics>
111
81
  ): RowSelectionOptions<TGenerics> => {
112
82
  return {
113
83
  onRowSelectionChange: makeStateUpdater('rowSelection', instance),
114
- autoResetRowSelection: true,
115
84
  enableRowSelection: true,
116
85
  enableMultiRowSelection: true,
117
86
  enableSubRowSelection: true,
118
87
  // enableGroupingRowSelection: false,
119
- // isAdditiveSelectEvent: (e: MouseEvent | TouchEvent) => !!e.metaKey,
120
- // isInclusiveSelectEvent: (e: MouseEvent | TouchEvent) => !!e.shiftKey,
88
+ // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,
89
+ // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,
121
90
  }
122
91
  },
123
92
 
124
- getInstance: <TGenerics extends PartialGenerics>(
93
+ createInstance: <TGenerics extends TableGenerics>(
125
94
  instance: TableInstance<TGenerics>
126
95
  ): RowSelectionInstance<TGenerics> => {
127
- let registered = false
128
-
129
- // const pageRows = instance.getPageRows()
130
-
131
96
  return {
132
- _notifyRowSelectionReset: () => {
133
- if (!registered) {
134
- registered = true
135
- return
136
- }
137
-
138
- if (instance.options.autoResetAll === false) {
139
- return
140
- }
141
-
142
- if (
143
- instance.options.autoResetAll === true ||
144
- instance.options.autoResetRowSelection
145
- ) {
146
- instance.resetRowSelection()
147
- }
148
- },
149
97
  setRowSelection: updater =>
150
- instance.options.onRowSelectionChange?.(
151
- updater,
152
- functionalUpdate(updater, instance.getState().rowSelection)
98
+ instance.options.onRowSelectionChange?.(updater),
99
+ resetRowSelection: defaultState =>
100
+ instance.setRowSelection(
101
+ defaultState ? {} : instance.initialState.rowSelection ?? {}
153
102
  ),
154
- resetRowSelection: () =>
155
- instance.setRowSelection(instance.initialState.rowSelection ?? {}),
156
103
  toggleAllRowsSelected: value => {
157
104
  instance.setRowSelection(old => {
158
105
  value =
@@ -160,9 +107,7 @@ export const RowSelection = {
160
107
  ? value
161
108
  : !instance.getIsAllRowsSelected()
162
109
 
163
- // Only remove/add the rows that are visible on the screen
164
- // Leave all the other rows that are selected alone.
165
- const rowSelection = Object.assign({}, old)
110
+ const rowSelection = { ...old }
166
111
 
167
112
  const preGroupedFlatRows = instance.getPreGroupedRowModel().flatRows
168
113
 
@@ -196,24 +141,7 @@ export const RowSelection = {
196
141
 
197
142
  return rowSelection
198
143
  }),
199
- toggleRowSelected: (rowId, value) => {
200
- const row = instance.getRow(rowId)
201
- const isSelected = row.getIsSelected()
202
144
 
203
- instance.setRowSelection(old => {
204
- value = typeof value !== 'undefined' ? value : !isSelected
205
-
206
- if (isSelected === value) {
207
- return old
208
- }
209
-
210
- const selectedRowIds = { ...old }
211
-
212
- mutateRowIsSelected(selectedRowIds, rowId, value, instance)
213
-
214
- return selectedRowIds
215
- })
216
- },
217
145
  // addRowSelectionRange: rowId => {
218
146
  // const {
219
147
  // rows,
@@ -287,16 +215,15 @@ export const RowSelection = {
287
215
  return selectRowsFn(instance, rowModel)
288
216
  },
289
217
  {
290
- key: 'getSelectedRowModel',
218
+ key: process.env.NODE_ENV === 'development' && 'getSelectedRowModel',
291
219
  debug: () => instance.options.debugAll ?? instance.options.debugTable,
292
- onChange: () => instance._notifyExpandedReset(),
293
220
  }
294
221
  ),
295
222
 
296
223
  getFilteredSelectedRowModel: memo(
297
224
  () => [
298
225
  instance.getState().rowSelection,
299
- instance.getGlobalFilteredRowModel(),
226
+ instance.getFilteredRowModel(),
300
227
  ],
301
228
  (rowSelection, rowModel) => {
302
229
  if (!Object.keys(rowSelection).length) {
@@ -310,9 +237,10 @@ export const RowSelection = {
310
237
  return selectRowsFn(instance, rowModel)
311
238
  },
312
239
  {
313
- key: 'getFilteredSelectedRowModel',
240
+ key:
241
+ process.env.NODE_ENV === 'production' &&
242
+ 'getFilteredSelectedRowModel',
314
243
  debug: () => instance.options.debugAll ?? instance.options.debugTable,
315
- onChange: () => instance._notifyExpandedReset(),
316
244
  }
317
245
  ),
318
246
 
@@ -330,78 +258,15 @@ export const RowSelection = {
330
258
  return selectRowsFn(instance, rowModel)
331
259
  },
332
260
  {
333
- key: 'getGroupedSelectedRowModel',
261
+ key:
262
+ process.env.NODE_ENV === 'production' &&
263
+ 'getGroupedSelectedRowModel',
334
264
  debug: () => instance.options.debugAll ?? instance.options.debugTable,
335
- onChange: () => instance._notifyExpandedReset(),
336
265
  }
337
266
  ),
338
267
 
339
268
  ///
340
269
 
341
- getRowIsSelected: rowId => {
342
- const { rowSelection } = instance.getState()
343
- const row = instance.getRow(rowId)
344
-
345
- if (!row) {
346
- throw new Error()
347
- }
348
-
349
- return isRowSelected(row, rowSelection, instance) === true
350
- },
351
-
352
- getRowIsSomeSelected: rowId => {
353
- const { rowSelection } = instance.getState()
354
- const row = instance.getRow(rowId)
355
-
356
- if (!row) {
357
- throw new Error()
358
- }
359
-
360
- return isRowSelected(row, rowSelection, instance) === 'some'
361
- },
362
-
363
- getRowCanSelect: rowId => {
364
- const row = instance.getRow(rowId)
365
-
366
- if (!row) {
367
- throw new Error()
368
- }
369
-
370
- if (typeof instance.options.enableRowSelection === 'function') {
371
- return instance.options.enableRowSelection(row)
372
- }
373
-
374
- return instance.options.enableRowSelection ?? true
375
- },
376
-
377
- getRowCanSelectSubRows: rowId => {
378
- const row = instance.getRow(rowId)
379
-
380
- if (!row) {
381
- throw new Error()
382
- }
383
-
384
- if (typeof instance.options.enableSubRowSelection === 'function') {
385
- return instance.options.enableSubRowSelection(row)
386
- }
387
-
388
- return instance.options.enableSubRowSelection ?? true
389
- },
390
-
391
- getRowCanMultiSelect: rowId => {
392
- const row = instance.getRow(rowId)
393
-
394
- if (!row) {
395
- throw new Error()
396
- }
397
-
398
- if (typeof instance.options.enableMultiRowSelection === 'function') {
399
- return instance.options.enableMultiRowSelection(row)
400
- }
401
-
402
- return instance.options.enableMultiRowSelection ?? true
403
- },
404
-
405
270
  // getGroupingRowCanSelect: rowId => {
406
271
  // const row = instance.getRow(rowId)
407
272
 
@@ -417,8 +282,7 @@ export const RowSelection = {
417
282
  // },
418
283
 
419
284
  getIsAllRowsSelected: () => {
420
- const preFilteredFlatRows =
421
- instance.getPreGlobalFilteredRowModel().flatRows
285
+ const preFilteredFlatRows = instance.getPreFilteredRowModel().flatRows
422
286
  const { rowSelection } = instance.getState()
423
287
 
424
288
  let isAllRowsSelected = Boolean(
@@ -464,96 +328,94 @@ export const RowSelection = {
464
328
  : !!paginationFlatRows?.length
465
329
  },
466
330
 
467
- getToggleRowSelectedProps: (rowId, userProps) => {
468
- const row = instance.getRow(rowId)
331
+ getToggleAllRowsSelectedHandler: () => {
332
+ return (e: unknown) => {
333
+ instance.toggleAllRowsSelected(
334
+ ((e as MouseEvent).target as HTMLInputElement).checked
335
+ )
336
+ }
337
+ },
469
338
 
339
+ getToggleAllPageRowsSelectedHandler: () => {
340
+ return (e: unknown) => {
341
+ instance.toggleAllPageRowsSelected(
342
+ ((e as MouseEvent).target as HTMLInputElement).checked
343
+ )
344
+ }
345
+ },
346
+ }
347
+ },
348
+
349
+ createRow: <TGenerics extends TableGenerics>(
350
+ row: Row<TGenerics>,
351
+ instance: TableInstance<TGenerics>
352
+ ): RowSelectionRow => {
353
+ return {
354
+ toggleSelected: value => {
470
355
  const isSelected = row.getIsSelected()
471
- const isSomeSelected = row.getIsSomeSelected()
472
- const canSelect = row.getCanSelect()
473
356
 
474
- const initialProps: ToggleRowSelectedProps = {
475
- onChange: canSelect
476
- ? (e: MouseEvent | TouchEvent) => {
477
- row.toggleSelected((e.target as HTMLInputElement).checked)
478
- }
479
- : undefined,
480
- checked: isSelected,
481
- title: 'Toggle Row Selected',
482
- indeterminate: isSomeSelected,
483
- // onChange: forInput
484
- // ? (e: Event) => e.stopPropagation()
485
- // : (e: Event) => {
486
- // if (instance.options.isAdditiveSelectEvent(e)) {
487
- // row.toggleSelected()
488
- // } else if (instance.options.isInclusiveSelectEvent(e)) {
489
- // instance.addRowSelectionRange(row.id)
490
- // } else {
491
- // instance.setRowSelection({})
492
- // row.toggleSelected()
493
- // }
494
-
495
- // if (props.onClick) props.onClick(e)
496
- // },
357
+ instance.setRowSelection(old => {
358
+ value = typeof value !== 'undefined' ? value : !isSelected
359
+
360
+ if (isSelected === value) {
361
+ return old
362
+ }
363
+
364
+ const selectedRowIds = { ...old }
365
+
366
+ mutateRowIsSelected(selectedRowIds, row.id, value, instance)
367
+
368
+ return selectedRowIds
369
+ })
370
+ },
371
+ getIsSelected: () => {
372
+ const { rowSelection } = instance.getState()
373
+ return isRowSelected(row, rowSelection, instance) === true
374
+ },
375
+
376
+ getIsSomeSelected: () => {
377
+ const { rowSelection } = instance.getState()
378
+ return isRowSelected(row, rowSelection, instance) === 'some'
379
+ },
380
+
381
+ getCanSelect: () => {
382
+ if (typeof instance.options.enableRowSelection === 'function') {
383
+ return instance.options.enableRowSelection(row)
497
384
  }
498
385
 
499
- return propGetter(initialProps, userProps)
386
+ return instance.options.enableRowSelection ?? true
500
387
  },
501
388
 
502
- getToggleAllRowsSelectedProps: userProps => {
503
- const isSomeRowsSelected = instance.getIsSomeRowsSelected()
504
- const isAllRowsSelected = instance.getIsAllRowsSelected()
505
-
506
- const initialProps: ToggleRowSelectedProps = {
507
- onChange: (e: MouseEvent | TouchEvent) => {
508
- instance.toggleAllRowsSelected(
509
- (e.target as HTMLInputElement).checked
510
- )
511
- },
512
- checked: isAllRowsSelected,
513
- title: 'Toggle All Rows Selected',
514
- indeterminate: isSomeRowsSelected,
389
+ getCanSelectSubRows: () => {
390
+ if (typeof instance.options.enableSubRowSelection === 'function') {
391
+ return instance.options.enableSubRowSelection(row)
515
392
  }
516
393
 
517
- return propGetter(initialProps, userProps)
394
+ return instance.options.enableSubRowSelection ?? true
518
395
  },
519
396
 
520
- getToggleAllPageRowsSelectedProps: userProps => {
521
- const isSomePageRowsSelected = instance.getIsSomePageRowsSelected()
522
- const isAllPageRowsSelected = instance.getIsAllPageRowsSelected()
523
-
524
- const initialProps: ToggleRowSelectedProps = {
525
- onChange: (e: MouseEvent | TouchEvent) => {
526
- instance.toggleAllPageRowsSelected(
527
- (e.target as HTMLInputElement).checked
528
- )
529
- },
530
- checked: isAllPageRowsSelected,
531
- title: 'Toggle All Current Page Rows Selected',
532
- indeterminate: isSomePageRowsSelected,
397
+ getCanMultiSelect: () => {
398
+ if (typeof instance.options.enableMultiRowSelection === 'function') {
399
+ return instance.options.enableMultiRowSelection(row)
533
400
  }
534
401
 
535
- return propGetter(initialProps, userProps)
402
+ return instance.options.enableMultiRowSelection ?? true
536
403
  },
537
- }
538
- },
404
+ getToggleSelectedHandler: () => {
405
+ const canSelect = row.getCanSelect()
539
406
 
540
- createRow: <TGenerics extends PartialGenerics>(
541
- row: Row<TGenerics>,
542
- instance: TableInstance<TGenerics>
543
- ): RowSelectionRow => {
544
- return {
545
- getIsSelected: () => instance.getRowIsSelected(row.id),
546
- getIsSomeSelected: () => instance.getRowIsSomeSelected(row.id),
547
- toggleSelected: value => instance.toggleRowSelected(row.id, value),
548
- getToggleSelectedProps: userProps =>
549
- instance.getToggleRowSelectedProps(row.id, userProps),
550
- getCanMultiSelect: () => instance.getRowCanMultiSelect(row.id),
551
- getCanSelect: () => instance.getRowCanSelect(row.id),
407
+ return (e: unknown) => {
408
+ if (!canSelect) return
409
+ row.toggleSelected(
410
+ ((e as MouseEvent).target as HTMLInputElement)?.checked
411
+ )
412
+ }
413
+ },
552
414
  }
553
415
  },
554
416
  }
555
417
 
556
- const mutateRowIsSelected = <TGenerics extends PartialGenerics>(
418
+ const mutateRowIsSelected = <TGenerics extends TableGenerics>(
557
419
  selectedRowIds: Record<string, boolean>,
558
420
  id: string,
559
421
  value: boolean,
@@ -574,14 +436,14 @@ const mutateRowIsSelected = <TGenerics extends PartialGenerics>(
574
436
  }
575
437
  // }
576
438
 
577
- if (row.subRows?.length && instance.getRowCanSelectSubRows(row.id)) {
439
+ if (row.subRows?.length && row.getCanSelectSubRows()) {
578
440
  row.subRows.forEach(row =>
579
441
  mutateRowIsSelected(selectedRowIds, row.id, value, instance)
580
442
  )
581
443
  }
582
444
  }
583
445
 
584
- export function selectRowsFn<TGenerics extends PartialGenerics>(
446
+ export function selectRowsFn<TGenerics extends TableGenerics>(
585
447
  instance: TableInstance<TGenerics>,
586
448
  rowModel: RowModel<TGenerics>
587
449
  ): RowModel<TGenerics> {
@@ -591,7 +453,7 @@ export function selectRowsFn<TGenerics extends PartialGenerics>(
591
453
  const newSelectedRowsById: Record<string, Row<TGenerics>> = {}
592
454
 
593
455
  // Filters top level and nested rows
594
- const recurseRows = (rows: Row<TGenerics>[], depth = 0) => {
456
+ const recurseRows = (rows: Row<TGenerics>[], depth = 0): Row<TGenerics>[] => {
595
457
  return rows
596
458
  .map(row => {
597
459
  const isSelected = isRowSelected(row, rowSelection, instance) === true
@@ -622,7 +484,7 @@ export function selectRowsFn<TGenerics extends PartialGenerics>(
622
484
  }
623
485
  }
624
486
 
625
- export function isRowSelected<TGenerics extends PartialGenerics>(
487
+ export function isRowSelected<TGenerics extends TableGenerics>(
626
488
  row: Row<TGenerics>,
627
489
  selection: Record<string, boolean>,
628
490
  instance: TableInstance<TGenerics>