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

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 (144) hide show
  1. package/build/cjs/aggregationFns.js +25 -37
  2. package/build/cjs/aggregationFns.js.map +1 -1
  3. package/build/cjs/core.js +167 -48
  4. package/build/cjs/core.js.map +1 -1
  5. package/build/cjs/createTable.js +24 -40
  6. package/build/cjs/createTable.js.map +1 -1
  7. package/build/cjs/features/Cells.js +28 -34
  8. package/build/cjs/features/Cells.js.map +1 -1
  9. package/build/cjs/features/ColumnSizing.js +136 -225
  10. package/build/cjs/features/ColumnSizing.js.map +1 -1
  11. package/build/cjs/features/Columns.js +57 -84
  12. package/build/cjs/features/Columns.js.map +1 -1
  13. package/build/cjs/features/Expanding.js +79 -126
  14. package/build/cjs/features/Expanding.js.map +1 -1
  15. package/build/cjs/features/Filters.js +137 -288
  16. package/build/cjs/features/Filters.js.map +1 -1
  17. package/build/cjs/features/Grouping.js +71 -117
  18. package/build/cjs/features/Grouping.js.map +1 -1
  19. package/build/cjs/features/Headers.js +125 -205
  20. package/build/cjs/features/Headers.js.map +1 -1
  21. package/build/cjs/features/Ordering.js +32 -44
  22. package/build/cjs/features/Ordering.js.map +1 -1
  23. package/build/cjs/features/Pagination.js +79 -82
  24. package/build/cjs/features/Pagination.js.map +1 -1
  25. package/build/cjs/features/Pinning.js +99 -178
  26. package/build/cjs/features/Pinning.js.map +1 -1
  27. package/build/cjs/features/RowSelection.js +133 -204
  28. package/build/cjs/features/RowSelection.js.map +1 -1
  29. package/build/cjs/features/Rows.js +32 -22
  30. package/build/cjs/features/Rows.js.map +1 -1
  31. package/build/cjs/features/Sorting.js +67 -136
  32. package/build/cjs/features/Sorting.js.map +1 -1
  33. package/build/cjs/features/Visibility.js +56 -118
  34. package/build/cjs/features/Visibility.js.map +1 -1
  35. package/build/cjs/filterFns.js +48 -72
  36. package/build/cjs/filterFns.js.map +1 -1
  37. package/build/cjs/index.js +13 -13
  38. package/build/cjs/sortingFns.js +21 -21
  39. package/build/cjs/sortingFns.js.map +1 -1
  40. package/build/cjs/utils/filterRowsUtils.js +49 -55
  41. package/build/cjs/utils/filterRowsUtils.js.map +1 -1
  42. package/build/cjs/utils/getCoreRowModel.js +98 -0
  43. package/build/cjs/utils/getCoreRowModel.js.map +1 -0
  44. package/build/cjs/utils/getExpandedRowModel.js +18 -22
  45. package/build/cjs/utils/getExpandedRowModel.js.map +1 -1
  46. package/build/cjs/utils/getFacetedMinMaxValues.js +48 -0
  47. package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -0
  48. package/build/cjs/utils/getFacetedRowModel.js +50 -0
  49. package/build/cjs/utils/getFacetedRowModel.js.map +1 -0
  50. package/build/cjs/utils/getFacetedUniqueValues.js +48 -0
  51. package/build/cjs/utils/getFacetedUniqueValues.js.map +1 -0
  52. package/build/cjs/utils/getFilteredRowModel.js +130 -0
  53. package/build/cjs/utils/getFilteredRowModel.js.map +1 -0
  54. package/build/cjs/utils/getGroupedRowModel.js +126 -136
  55. package/build/cjs/utils/getGroupedRowModel.js.map +1 -1
  56. package/build/cjs/utils/getPaginationRowModel.js +39 -39
  57. package/build/cjs/utils/getPaginationRowModel.js.map +1 -1
  58. package/build/cjs/utils/getSortedRowModel.js +112 -0
  59. package/build/cjs/utils/getSortedRowModel.js.map +1 -0
  60. package/build/cjs/utils.js +36 -207
  61. package/build/cjs/utils.js.map +1 -1
  62. package/build/esm/index.js +2024 -2971
  63. package/build/esm/index.js.map +1 -1
  64. package/build/stats-html.html +1 -1
  65. package/build/stats-react.json +421 -481
  66. package/build/types/core.d.ts +3 -5
  67. package/build/types/features/Cells.d.ts +1 -1
  68. package/build/types/features/ColumnSizing.d.ts +4 -15
  69. package/build/types/features/Columns.d.ts +1 -1
  70. package/build/types/features/Expanding.d.ts +2 -7
  71. package/build/types/features/Filters.d.ts +24 -21
  72. package/build/types/features/Grouping.d.ts +5 -11
  73. package/build/types/features/Ordering.d.ts +1 -1
  74. package/build/types/features/Pagination.d.ts +3 -3
  75. package/build/types/features/Pinning.d.ts +1 -5
  76. package/build/types/features/RowSelection.d.ts +2 -8
  77. package/build/types/features/Rows.d.ts +4 -3
  78. package/build/types/features/Sorting.d.ts +5 -15
  79. package/build/types/features/Visibility.d.ts +1 -4
  80. package/build/types/index.d.ts +6 -4
  81. package/build/types/types.d.ts +3 -15
  82. package/build/types/utils/filterRowsUtils.d.ts +3 -3
  83. package/build/types/utils/getCoreRowModel.d.ts +2 -0
  84. package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
  85. package/build/types/utils/getFacetedRowModel.d.ts +2 -0
  86. package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
  87. package/build/types/utils/{getCoreRowModelSync.d.ts → getFilteredRowModel.d.ts} +1 -1
  88. package/build/types/utils/getGroupedRowModel.d.ts +1 -1
  89. package/build/types/utils/getSortedRowModel.d.ts +2 -0
  90. package/build/types/utils.d.ts +1 -17
  91. package/build/umd/index.development.js +2053 -3002
  92. package/build/umd/index.development.js.map +1 -1
  93. package/build/umd/index.production.js +1 -1
  94. package/build/umd/index.production.js.map +1 -1
  95. package/package.json +1 -1
  96. package/src/core.ts +197 -47
  97. package/src/features/Cells.ts +7 -11
  98. package/src/features/ColumnSizing.ts +89 -139
  99. package/src/features/Columns.ts +10 -13
  100. package/src/features/Expanding.ts +62 -107
  101. package/src/features/Filters.ts +201 -308
  102. package/src/features/Grouping.ts +55 -81
  103. package/src/features/Headers.ts +18 -40
  104. package/src/features/Ordering.ts +6 -4
  105. package/src/features/Pagination.ts +31 -17
  106. package/src/features/Pinning.ts +79 -96
  107. package/src/features/RowSelection.ts +68 -118
  108. package/src/features/Rows.ts +21 -6
  109. package/src/features/Sorting.ts +47 -103
  110. package/src/features/Visibility.ts +24 -47
  111. package/src/filterFns.ts +9 -9
  112. package/src/index.ts +12 -4
  113. package/src/sortingFns.ts +11 -11
  114. package/src/types.ts +3 -18
  115. package/src/utils/filterRowsUtils.ts +47 -68
  116. package/src/utils/{getCoreRowModelSync.ts → getCoreRowModel.ts} +3 -9
  117. package/src/utils/getExpandedRowModel.ts +2 -2
  118. package/src/utils/getFacetedMinMaxValues.ts +37 -0
  119. package/src/utils/getFacetedRowModel.ts +50 -0
  120. package/src/utils/getFacetedUniqueValues.ts +37 -0
  121. package/src/utils/getFilteredRowModel.ts +150 -0
  122. package/src/utils/getGroupedRowModel.ts +53 -62
  123. package/src/utils/getPaginationRowModel.ts +1 -1
  124. package/src/utils/{getSortedRowModelSync.ts → getSortedRowModel.ts} +7 -7
  125. package/src/utils.ts +28 -236
  126. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  127. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  128. package/build/cjs/utils/getCoreRowModelAsync.js +0 -125
  129. package/build/cjs/utils/getCoreRowModelAsync.js.map +0 -1
  130. package/build/cjs/utils/getCoreRowModelSync.js +0 -102
  131. package/build/cjs/utils/getCoreRowModelSync.js.map +0 -1
  132. package/build/cjs/utils/getFilteredRowModelSync.js +0 -130
  133. package/build/cjs/utils/getFilteredRowModelSync.js.map +0 -1
  134. package/build/cjs/utils/getSortedRowModelSync.js +0 -118
  135. package/build/cjs/utils/getSortedRowModelSync.js.map +0 -1
  136. package/build/types/utils/getCoreRowModelAsync.d.ts +0 -4
  137. package/build/types/utils/getFilteredRowModelAsync.d.ts +0 -4
  138. package/build/types/utils/getFilteredRowModelSync.d.ts +0 -2
  139. package/build/types/utils/getSortedRowModelAsync.d.ts +0 -13
  140. package/build/types/utils/getSortedRowModelSync.d.ts +0 -2
  141. package/src/utils/getCoreRowModelAsync.ts +0 -104
  142. package/src/utils/getFilteredRowModelAsync.ts +0 -49
  143. package/src/utils/getFilteredRowModelSync.ts +0 -150
  144. package/src/utils/getSortedRowModelAsync.ts +0 -200
@@ -49,11 +49,7 @@ export type ColumnPinningRow<TGenerics extends TableGenerics> = {
49
49
 
50
50
  export type ColumnPinningInstance<TGenerics extends TableGenerics> = {
51
51
  setColumnPinning: (updater: Updater<ColumnPinningState>) => void
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
52
+ resetColumnPinning: (defaultState?: boolean) => void
57
53
  getIsSomeColumnsPinned: () => boolean
58
54
  getLeftLeafColumns: () => Column<TGenerics>[]
59
55
  getRightLeafColumns: () => Column<TGenerics>[]
@@ -62,13 +58,15 @@ export type ColumnPinningInstance<TGenerics extends TableGenerics> = {
62
58
 
63
59
  //
64
60
 
61
+ const getDefaultPinningState = (): ColumnPinningState => ({
62
+ left: [],
63
+ right: [],
64
+ })
65
+
65
66
  export const Pinning: TableFeature = {
66
67
  getInitialState: (state): ColumnPinningTableState => {
67
68
  return {
68
- columnPinning: {
69
- left: [],
70
- right: [],
71
- },
69
+ columnPinning: getDefaultPinningState(),
72
70
  ...state,
73
71
  }
74
72
  },
@@ -86,10 +84,69 @@ export const Pinning: TableFeature = {
86
84
  instance: TableInstance<TGenerics>
87
85
  ): ColumnPinningColumn => {
88
86
  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),
87
+ pin: position => {
88
+ const columnIds = column
89
+ .getLeafColumns()
90
+ .map(d => d.id)
91
+ .filter(Boolean) as string[]
92
+
93
+ instance.setColumnPinning(old => {
94
+ if (position === 'right') {
95
+ return {
96
+ left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
97
+ right: [
98
+ ...(old?.right ?? []).filter(d => !columnIds?.includes(d)),
99
+ ...columnIds,
100
+ ],
101
+ }
102
+ }
103
+
104
+ if (position === 'left') {
105
+ return {
106
+ left: [
107
+ ...(old?.left ?? []).filter(d => !columnIds?.includes(d)),
108
+ ...columnIds,
109
+ ],
110
+ right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
111
+ }
112
+ }
113
+
114
+ return {
115
+ left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
116
+ right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
117
+ }
118
+ })
119
+ },
120
+
121
+ getCanPin: () => {
122
+ const leafColumns = column.getLeafColumns()
123
+
124
+ return leafColumns.some(
125
+ d =>
126
+ (d.enablePinning ?? true) &&
127
+ (instance.options.enablePinning ?? true)
128
+ )
129
+ },
130
+
131
+ getIsPinned: () => {
132
+ const leafColumnIds = column.getLeafColumns().map(d => d.id)
133
+
134
+ const { left, right } = instance.getState().columnPinning
135
+
136
+ const isLeft = leafColumnIds.some(d => left?.includes(d))
137
+ const isRight = leafColumnIds.some(d => right?.includes(d))
138
+
139
+ return isLeft ? 'left' : isRight ? 'right' : false
140
+ },
141
+
142
+ getPinnedIndex: () => {
143
+ const position = column.getIsPinned()
144
+
145
+ return position
146
+ ? instance.getState().columnPinning?.[position]?.indexOf(column.id) ??
147
+ -1
148
+ : 0
149
+ },
93
150
  }
94
151
  },
95
152
 
@@ -165,86 +222,12 @@ export const Pinning: TableFeature = {
165
222
  setColumnPinning: updater =>
166
223
  instance.options.onColumnPinningChange?.(updater),
167
224
 
168
- resetColumnPinning: () =>
169
- instance.setColumnPinning(instance.initialState?.columnPinning ?? {}),
170
-
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
- },
225
+ resetColumnPinning: defaultState =>
226
+ instance.setColumnPinning(
227
+ defaultState
228
+ ? getDefaultPinningState()
229
+ : instance.initialState?.columnPinning ?? getDefaultPinningState()
230
+ ),
248
231
 
249
232
  getIsSomeColumnsPinned: () => {
250
233
  const { left, right } = instance.getState().columnPinning
@@ -263,7 +246,7 @@ export const Pinning: TableFeature = {
263
246
  .filter(Boolean)
264
247
  },
265
248
  {
266
- key: process.env.NODE_ENV === 'production' && 'getLeftLeafColumns',
249
+ key: process.env.NODE_ENV === 'development' && 'getLeftLeafColumns',
267
250
  debug: () =>
268
251
  instance.options.debugAll ?? instance.options.debugColumns,
269
252
  }
@@ -280,7 +263,7 @@ export const Pinning: TableFeature = {
280
263
  .filter(Boolean)
281
264
  },
282
265
  {
283
- key: process.env.NODE_ENV === 'production' && 'getRightLeafColumns',
266
+ key: process.env.NODE_ENV === 'development' && 'getRightLeafColumns',
284
267
  debug: () =>
285
268
  instance.options.debugAll ?? instance.options.debugColumns,
286
269
  }
@@ -298,7 +281,7 @@ export const Pinning: TableFeature = {
298
281
  return allColumns.filter(d => !leftAndRight.includes(d.id))
299
282
  },
300
283
  {
301
- key: process.env.NODE_ENV === 'production' && 'getCenterLeafColumns',
284
+ key: process.env.NODE_ENV === 'development' && 'getCenterLeafColumns',
302
285
  debug: () =>
303
286
  instance.options.debugAll ?? instance.options.debugColumns,
304
287
  }
@@ -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
- 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
56
+ resetRowSelection: (defaultState?: boolean) => void
66
57
  getIsAllRowsSelected: () => boolean
67
58
  getIsAllPageRowsSelected: () => boolean
68
59
  getIsSomeRowsSelected: () => boolean
@@ -105,8 +96,10 @@ export const RowSelection: TableFeature = {
105
96
  return {
106
97
  setRowSelection: updater =>
107
98
  instance.options.onRowSelectionChange?.(updater),
108
- resetRowSelection: () =>
109
- instance.setRowSelection(instance.initialState.rowSelection ?? {}),
99
+ resetRowSelection: defaultState =>
100
+ instance.setRowSelection(
101
+ defaultState ? {} : instance.initialState.rowSelection ?? {}
102
+ ),
110
103
  toggleAllRowsSelected: value => {
111
104
  instance.setRowSelection(old => {
112
105
  value =
@@ -148,24 +141,7 @@ export const RowSelection: TableFeature = {
148
141
 
149
142
  return rowSelection
150
143
  }),
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
144
 
162
- const selectedRowIds = { ...old }
163
-
164
- mutateRowIsSelected(selectedRowIds, rowId, value, instance)
165
-
166
- return selectedRowIds
167
- })
168
- },
169
145
  // addRowSelectionRange: rowId => {
170
146
  // const {
171
147
  // rows,
@@ -239,7 +215,7 @@ export const RowSelection: TableFeature = {
239
215
  return selectRowsFn(instance, rowModel)
240
216
  },
241
217
  {
242
- key: process.env.NODE_ENV === 'production' && 'getSelectedRowModel',
218
+ key: process.env.NODE_ENV === 'development' && 'getSelectedRowModel',
243
219
  debug: () => instance.options.debugAll ?? instance.options.debugTable,
244
220
  }
245
221
  ),
@@ -291,70 +267,6 @@ export const RowSelection: TableFeature = {
291
267
 
292
268
  ///
293
269
 
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
270
  // getGroupingRowCanSelect: rowId => {
359
271
  // const row = instance.getRow(rowId)
360
272
 
@@ -416,21 +328,6 @@ export const RowSelection: TableFeature = {
416
328
  : !!paginationFlatRows?.length
417
329
  },
418
330
 
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
331
  getToggleAllRowsSelectedHandler: () => {
435
332
  return (e: unknown) => {
436
333
  instance.toggleAllRowsSelected(
@@ -454,13 +351,66 @@ export const RowSelection: TableFeature = {
454
351
  instance: TableInstance<TGenerics>
455
352
  ): RowSelectionRow => {
456
353
  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),
354
+ toggleSelected: value => {
355
+ const isSelected = row.getIsSelected()
356
+
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)
384
+ }
385
+
386
+ return instance.options.enableRowSelection ?? true
387
+ },
388
+
389
+ getCanSelectSubRows: () => {
390
+ if (typeof instance.options.enableSubRowSelection === 'function') {
391
+ return instance.options.enableSubRowSelection(row)
392
+ }
393
+
394
+ return instance.options.enableSubRowSelection ?? true
395
+ },
396
+
397
+ getCanMultiSelect: () => {
398
+ if (typeof instance.options.enableMultiRowSelection === 'function') {
399
+ return instance.options.enableMultiRowSelection(row)
400
+ }
401
+
402
+ return instance.options.enableMultiRowSelection ?? true
403
+ },
404
+ getToggleSelectedHandler: () => {
405
+ const canSelect = row.getCanSelect()
406
+
407
+ return (e: unknown) => {
408
+ if (!canSelect) return
409
+ row.toggleSelected(
410
+ ((e as MouseEvent).target as HTMLInputElement)?.checked
411
+ )
412
+ }
413
+ },
464
414
  }
465
415
  },
466
416
  }
@@ -486,7 +436,7 @@ const mutateRowIsSelected = <TGenerics extends TableGenerics>(
486
436
  }
487
437
  // }
488
438
 
489
- if (row.subRows?.length && instance.getRowCanSelectSubRows(row.id)) {
439
+ if (row.subRows?.length && row.getCanSelectSubRows()) {
490
440
  row.subRows.forEach(row =>
491
441
  mutateRowIsSelected(selectedRowIds, row.id, value, instance)
492
442
  )
@@ -12,7 +12,8 @@ export type CoreRow<TGenerics extends TableGenerics> = {
12
12
  index: number
13
13
  original?: TGenerics['Row']
14
14
  depth: number
15
- values: RowValues
15
+ valuesCache: Record<string, any>
16
+ getValue: (columnId: string) => any
16
17
  subRows: Row<TGenerics>[]
17
18
  getLeafRows: () => Row<TGenerics>[]
18
19
  originalSubRows?: TGenerics['Row'][]
@@ -44,7 +45,7 @@ export type RowsInstance<TGenerics extends TableGenerics> = {
44
45
  original: TGenerics['Row'] | undefined,
45
46
  rowIndex: number,
46
47
  depth: number,
47
- values: Record<string, any>
48
+ subRows?: Row<TGenerics>[]
48
49
  ) => Row<TGenerics>
49
50
  getCoreRowModel: () => RowModel<TGenerics>
50
51
  _getCoreRowModel?: () => RowModel<TGenerics>
@@ -73,20 +74,34 @@ export const Rows = {
73
74
  ) =>
74
75
  instance.options.getRowId?.(row, index, parent) ??
75
76
  `${parent ? [parent.id, index].join('.') : index}`,
76
- createRow: (id, original, rowIndex, depth, values) => {
77
+ createRow: (id, original, rowIndex, depth, subRows) => {
77
78
  let row: CoreRow<TGenerics> = {
78
79
  id,
79
80
  index: rowIndex,
80
81
  original,
81
82
  depth,
82
- values,
83
- subRows: [],
83
+ valuesCache: {},
84
+ getValue: columnId => {
85
+ if (row.valuesCache.hasOwnProperty(columnId)) {
86
+ return row.valuesCache[columnId]
87
+ }
88
+ const column = instance.getColumn(columnId)
89
+ if (!column.accessorFn) {
90
+ throw new Error()
91
+ }
92
+ row.valuesCache[columnId] = column.accessorFn(
93
+ row.original,
94
+ rowIndex
95
+ )
96
+ return row.valuesCache[columnId]
97
+ },
98
+ subRows: subRows ?? [],
84
99
  getLeafRows: () => flattenBy(row.subRows, d => d.subRows),
85
100
  }
86
101
 
87
102
  for (let i = 0; i < instance._features.length; i++) {
88
103
  const feature = instance._features[i]
89
- Object.assign(row, feature.createRow?.(row, instance))
104
+ Object.assign(row, feature?.createRow?.(row, instance))
90
105
  }
91
106
 
92
107
  return row as Row<TGenerics>