@tanstack/table-core 8.0.0-alpha.64 → 8.0.0-alpha.68

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 (149) 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 -47
  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 +29 -35
  8. package/build/cjs/features/Cells.js.map +1 -1
  9. package/build/cjs/features/ColumnSizing.js +126 -218
  10. package/build/cjs/features/ColumnSizing.js.map +1 -1
  11. package/build/cjs/features/Columns.js +59 -86
  12. package/build/cjs/features/Columns.js.map +1 -1
  13. package/build/cjs/features/Expanding.js +78 -125
  14. package/build/cjs/features/Expanding.js.map +1 -1
  15. package/build/cjs/features/Filters.js +143 -218
  16. package/build/cjs/features/Filters.js.map +1 -1
  17. package/build/cjs/features/Grouping.js +70 -116
  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 +31 -43
  22. package/build/cjs/features/Ordering.js.map +1 -1
  23. package/build/cjs/features/Pagination.js +64 -72
  24. package/build/cjs/features/Pagination.js.map +1 -1
  25. package/build/cjs/features/Pinning.js +96 -177
  26. package/build/cjs/features/Pinning.js.map +1 -1
  27. package/build/cjs/features/RowSelection.js +134 -205
  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 +62 -131
  32. package/build/cjs/features/Sorting.js.map +1 -1
  33. package/build/cjs/features/Visibility.js +53 -120
  34. package/build/cjs/features/Visibility.js.map +1 -1
  35. package/build/cjs/filterFns.js +52 -133
  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 +56 -41
  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 -211
  61. package/build/cjs/utils.js.map +1 -1
  62. package/build/esm/index.js +1970 -2956
  63. package/build/esm/index.js.map +1 -1
  64. package/build/stats-html.html +1 -1
  65. package/build/stats-react.json +390 -482
  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 +2 -13
  69. package/build/types/features/Columns.d.ts +1 -1
  70. package/build/types/features/Expanding.d.ts +1 -6
  71. package/build/types/features/Filters.d.ts +42 -30
  72. package/build/types/features/Grouping.d.ts +4 -10
  73. package/build/types/features/Pinning.d.ts +0 -4
  74. package/build/types/features/RowSelection.d.ts +1 -7
  75. package/build/types/features/Rows.d.ts +4 -3
  76. package/build/types/features/Sorting.d.ts +3 -14
  77. package/build/types/features/Visibility.d.ts +0 -4
  78. package/build/types/filterFns.d.ts +10 -52
  79. package/build/types/index.d.ts +6 -5
  80. package/build/types/types.d.ts +5 -17
  81. package/build/types/utils/filterRowsUtils.d.ts +3 -2
  82. package/build/types/utils/getCoreRowModel.d.ts +2 -0
  83. package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
  84. package/build/types/utils/getFacetedRowModel.d.ts +2 -0
  85. package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
  86. package/build/types/utils/{getCoreRowModelSync.d.ts → getFilteredRowModel.d.ts} +1 -1
  87. package/build/types/utils/getGroupedRowModel.d.ts +1 -1
  88. package/build/types/utils/getSortedRowModel.d.ts +2 -0
  89. package/build/types/utils.d.ts +2 -18
  90. package/build/umd/index.development.js +1948 -2935
  91. package/build/umd/index.development.js.map +1 -1
  92. package/build/umd/index.production.js +1 -1
  93. package/build/umd/index.production.js.map +1 -1
  94. package/package.json +2 -1
  95. package/src/core.ts +197 -46
  96. package/src/features/Cells.ts +10 -12
  97. package/src/features/ColumnSizing.ts +72 -129
  98. package/src/features/Columns.ts +16 -15
  99. package/src/features/Expanding.ts +58 -105
  100. package/src/features/Filters.ts +223 -226
  101. package/src/features/Grouping.ts +51 -79
  102. package/src/features/Headers.ts +18 -40
  103. package/src/features/Ordering.ts +1 -1
  104. package/src/features/Pagination.ts +1 -1
  105. package/src/features/Pinning.ts +73 -92
  106. package/src/features/RowSelection.ts +71 -120
  107. package/src/features/Rows.ts +21 -6
  108. package/src/features/Sorting.ts +39 -99
  109. package/src/features/Visibility.ts +21 -50
  110. package/src/filterFns.ts +74 -147
  111. package/src/index.ts +12 -5
  112. package/src/sortingFns.ts +11 -11
  113. package/src/types.ts +5 -18
  114. package/src/utils/filterRowsUtils.ts +59 -56
  115. package/src/utils/{getCoreRowModelSync.ts → getCoreRowModel.ts} +3 -9
  116. package/src/utils/getExpandedRowModel.ts +2 -2
  117. package/src/utils/getFacetedMinMaxValues.ts +37 -0
  118. package/src/utils/getFacetedRowModel.ts +50 -0
  119. package/src/utils/getFacetedUniqueValues.ts +37 -0
  120. package/src/utils/getFilteredRowModel.ts +150 -0
  121. package/src/utils/getGroupedRowModel.ts +53 -62
  122. package/src/utils/getPaginationRowModel.ts +1 -1
  123. package/src/utils/{getSortedRowModelSync.ts → getSortedRowModel.ts} +7 -7
  124. package/src/utils.ts +29 -239
  125. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  126. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  127. package/build/cjs/utils/getColumnFilteredRowModelSync.js +0 -115
  128. package/build/cjs/utils/getColumnFilteredRowModelSync.js.map +0 -1
  129. package/build/cjs/utils/getCoreRowModelAsync.js +0 -125
  130. package/build/cjs/utils/getCoreRowModelAsync.js.map +0 -1
  131. package/build/cjs/utils/getCoreRowModelSync.js +0 -102
  132. package/build/cjs/utils/getCoreRowModelSync.js.map +0 -1
  133. package/build/cjs/utils/getGlobalFilteredRowModelSync.js +0 -91
  134. package/build/cjs/utils/getGlobalFilteredRowModelSync.js.map +0 -1
  135. package/build/cjs/utils/getSortedRowModelSync.js +0 -118
  136. package/build/cjs/utils/getSortedRowModelSync.js.map +0 -1
  137. package/build/types/utils/getColumnFilteredRowModelAsync.d.ts +0 -4
  138. package/build/types/utils/getColumnFilteredRowModelSync.d.ts +0 -2
  139. package/build/types/utils/getCoreRowModelAsync.d.ts +0 -4
  140. package/build/types/utils/getGlobalFilteredRowModelAsync.d.ts +0 -4
  141. package/build/types/utils/getGlobalFilteredRowModelSync.d.ts +0 -2
  142. package/build/types/utils/getSortedRowModelAsync.d.ts +0 -13
  143. package/build/types/utils/getSortedRowModelSync.d.ts +0 -2
  144. package/src/utils/getColumnFilteredRowModelAsync.ts +0 -118
  145. package/src/utils/getColumnFilteredRowModelSync.ts +0 -102
  146. package/src/utils/getCoreRowModelAsync.ts +0 -104
  147. package/src/utils/getGlobalFilteredRowModelAsync.ts +0 -96
  148. package/src/utils/getGlobalFilteredRowModelSync.ts +0 -79
  149. package/src/utils/getSortedRowModelAsync.ts +0 -200
@@ -44,19 +44,10 @@ export type ColumnSizingDefaultOptions = {
44
44
  }
45
45
 
46
46
  export type ColumnSizingInstance<TGenerics extends TableGenerics> = {
47
- getColumnSize: (columnId: string) => number
48
- getColumnStart: (columnId: string, position?: ColumnPinningPosition) => number
49
47
  setColumnSizing: (updater: Updater<ColumnSizingState>) => void
50
48
  setColumnSizingInfo: (updater: Updater<ColumnSizingInfoState>) => void
51
49
  resetColumnSizing: () => void
52
- resetColumnSize: (columnId: string) => void
53
- resetHeaderSize: (headerId: string) => void
54
50
  resetHeaderSizeInfo: () => void
55
- getColumnCanResize: (columnId: string) => boolean
56
- getHeaderCanResize: (headerId: string) => boolean
57
- getResizeHandler: (headerId: string) => (event: unknown) => void
58
- getColumnIsResizing: (columnId: string) => boolean
59
- getHeaderIsResizing: (headerId: string) => boolean
60
51
  getTotalSize: () => number
61
52
  getLeftTotalSize: () => number
62
53
  getCenterTotalSize: () => number
@@ -65,7 +56,6 @@ export type ColumnSizingInstance<TGenerics extends TableGenerics> = {
65
56
 
66
57
  export type ColumnSizingColumnDef = {
67
58
  enableResizing?: boolean
68
- defaultCanResize?: boolean
69
59
  size?: number
70
60
  minSize?: number
71
61
  maxSize?: number
@@ -80,10 +70,9 @@ export type ColumnSizingColumn<TGenerics extends TableGenerics> = {
80
70
  }
81
71
 
82
72
  export type ColumnSizingHeader<TGenerics extends TableGenerics> = {
83
- getCanResize: () => boolean
84
- getIsResizing: () => boolean
73
+ getSize: () => number
74
+ getStart: (position?: ColumnPinningPosition) => number
85
75
  getResizeHandler: () => (event: unknown) => void
86
- resetSize: () => void
87
76
  }
88
77
 
89
78
  //
@@ -128,37 +117,7 @@ export const ColumnSizing: TableFeature = {
128
117
  instance: TableInstance<TGenerics>
129
118
  ): ColumnSizingColumn<TGenerics> => {
130
119
  return {
131
- getSize: () => instance.getColumnSize(column.id),
132
- getStart: position => instance.getColumnStart(column.id, position),
133
- getIsResizing: () => instance.getColumnIsResizing(column.id),
134
- getCanResize: () => instance.getColumnCanResize(column.id),
135
- resetSize: () => instance.resetColumnSize(column.id),
136
- }
137
- },
138
-
139
- createHeader: <TGenerics extends TableGenerics>(
140
- header: Header<TGenerics>,
141
- instance: TableInstance<TGenerics>
142
- ): ColumnSizingHeader<TGenerics> => {
143
- return {
144
- getIsResizing: () => instance.getColumnIsResizing(header.column.id),
145
- getCanResize: () => instance.getColumnCanResize(header.column.id),
146
- resetSize: () => instance.resetColumnSize(header.column.id),
147
- getResizeHandler: () => instance.getResizeHandler(header.id),
148
- }
149
- },
150
-
151
- createInstance: <TGenerics extends TableGenerics>(
152
- instance: TableInstance<TGenerics>
153
- ): ColumnSizingInstance<TGenerics> => {
154
- return {
155
- getColumnSize: (columnId: string) => {
156
- const column = instance.getColumn(columnId)
157
-
158
- if (!column) {
159
- throw new Error()
160
- }
161
-
120
+ getSize: () => {
162
121
  const columnSize = instance.getState().columnSizing[column.id]
163
122
 
164
123
  return Math.min(
@@ -169,99 +128,74 @@ export const ColumnSizing: TableFeature = {
169
128
  column.maxSize ?? defaultColumnSizing.maxSize
170
129
  )
171
130
  },
172
- getColumnStart: (columnId, position) => {
173
- const column = instance.getColumn(columnId)
174
-
175
- if (!column) {
176
- throw new Error()
177
- }
178
-
131
+ getStart: position => {
179
132
  const columns = !position
180
133
  ? instance.getVisibleLeafColumns()
181
134
  : position === 'left'
182
135
  ? instance.getLeftVisibleLeafColumns()
183
136
  : instance.getRightVisibleLeafColumns()
184
137
 
185
- const index = columns.findIndex(d => d.id === columnId)
138
+ const index = columns.findIndex(d => d.id === column.id)
186
139
 
187
140
  if (index > 0) {
188
- const prevSiblingColumn = columns[index - 1]
141
+ const prevSiblingColumn = columns[index - 1]!
189
142
 
190
143
  return (
191
- instance.getColumnStart(prevSiblingColumn.id, position) +
192
- prevSiblingColumn.getSize()
144
+ prevSiblingColumn.getStart(position) + prevSiblingColumn.getSize()
193
145
  )
194
146
  }
195
147
 
196
148
  return 0
197
149
  },
198
- setColumnSizing: updater =>
199
- instance.options.onColumnSizingChange?.(updater),
200
- setColumnSizingInfo: updater =>
201
- instance.options.onColumnSizingInfoChange?.(updater),
202
- resetColumnSizing: () => {
203
- instance.setColumnSizing(instance.initialState.columnSizing ?? {})
204
- },
205
- resetHeaderSizeInfo: () => {
206
- instance.setColumnSizingInfo(
207
- instance.initialState.columnSizingInfo ?? {}
208
- )
209
- },
210
- resetColumnSize: columnId => {
211
- instance.setColumnSizing(({ [columnId]: _, ...rest }) => {
150
+ resetSize: () => {
151
+ instance.setColumnSizing(({ [column.id]: _, ...rest }) => {
212
152
  return rest
213
153
  })
214
154
  },
215
- resetHeaderSize: headerId => {
216
- const header = instance.getHeader(headerId)
217
-
218
- return instance.resetColumnSize(header.column.id)
219
- },
220
- getHeaderCanResize: headerId => {
221
- const header = instance.getHeader(headerId)
222
-
223
- if (!header) {
224
- throw new Error()
225
- }
226
-
227
- return instance.getColumnCanResize(header.column.id)
155
+ getCanResize: () => {
156
+ return (
157
+ (column.enableResizing ?? true) &&
158
+ (instance.options.enableColumnResizing ?? true)
159
+ )
228
160
  },
229
- getColumnCanResize: columnId => {
230
- const column = instance.getColumn(columnId)
231
-
232
- if (!column) {
233
- throw new Error()
234
- }
235
-
161
+ getIsResizing: () => {
236
162
  return (
237
- column.enableResizing ??
238
- instance.options.enableColumnResizing ??
239
- column.defaultCanResize ??
240
- true
163
+ instance.getState().columnSizingInfo.isResizingColumn === column.id
241
164
  )
242
165
  },
243
- getColumnIsResizing: columnId => {
244
- const column = instance.getColumn(columnId)
166
+ }
167
+ },
168
+
169
+ createHeader: <TGenerics extends TableGenerics>(
170
+ header: Header<TGenerics>,
171
+ instance: TableInstance<TGenerics>
172
+ ): ColumnSizingHeader<TGenerics> => {
173
+ return {
174
+ getSize: () => {
175
+ let sum = 0
245
176
 
246
- if (!column) {
247
- throw new Error()
177
+ const recurse = (header: Header<TGenerics>) => {
178
+ if (header.subHeaders.length) {
179
+ header.subHeaders.forEach(recurse)
180
+ } else {
181
+ sum += header.column.getSize() ?? 0
182
+ }
248
183
  }
249
184
 
250
- return (
251
- instance.getState().columnSizingInfo.isResizingColumn === columnId
252
- )
253
- },
254
- getHeaderIsResizing: headerId => {
255
- const header = instance.getHeader(headerId)
185
+ recurse(header)
256
186
 
257
- if (!header) {
258
- throw new Error()
187
+ return sum
188
+ },
189
+ getStart: () => {
190
+ if (header.index > 0) {
191
+ const prevSiblingHeader =
192
+ header.headerGroup.headers[header.index - 1]!
193
+ return prevSiblingHeader.getStart() + prevSiblingHeader.getSize()
259
194
  }
260
195
 
261
- return instance.getColumnIsResizing(header.column.id)
196
+ return 0
262
197
  },
263
- getResizeHandler: (headerId: string) => {
264
- const header = instance.getHeader(headerId)
198
+ getResizeHandler: () => {
265
199
  const column = instance.getColumn(header.column.id)
266
200
  const canResize = column.getCanResize()
267
201
 
@@ -279,16 +213,16 @@ export const ColumnSizing: TableFeature = {
279
213
  }
280
214
  }
281
215
 
282
- const header = headerId ? instance.getHeader(headerId) : undefined
283
-
284
- const startSize = header ? header.getSize() : column.getSize()
216
+ const startSize = column.getSize()
285
217
 
286
218
  const columnSizingStart: [string, number][] = header
287
- ? header.getLeafHeaders().map(d => [d.column.id, d.getSize()])
219
+ ? header
220
+ .getLeafHeaders()
221
+ .map(d => [d.column.id, d.column.getSize()])
288
222
  : [[column.id, column.getSize()]]
289
223
 
290
224
  const clientX = isTouchStartEvent(e)
291
- ? Math.round(e.touches[0].clientX)
225
+ ? Math.round(e.touches[0]!.clientX)
292
226
  : (e as MouseEvent).clientX
293
227
 
294
228
  const updateOffset = (
@@ -365,7 +299,7 @@ export const ColumnSizing: TableFeature = {
365
299
  e.preventDefault()
366
300
  e.stopPropagation()
367
301
  }
368
- onMove(e.touches[0].clientX)
302
+ onMove(e.touches[0]!.clientX)
369
303
  return false
370
304
  },
371
305
  upHandler: (e: TouchEvent) => {
@@ -375,7 +309,7 @@ export const ColumnSizing: TableFeature = {
375
309
  e.preventDefault()
376
310
  e.stopPropagation()
377
311
  }
378
- onEnd(e.touches[0].clientX)
312
+ onEnd(e.touches[0]!.clientX)
379
313
  },
380
314
  }
381
315
 
@@ -384,16 +318,6 @@ export const ColumnSizing: TableFeature = {
384
318
  : false
385
319
 
386
320
  if (isTouchStartEvent(e)) {
387
- document.addEventListener(
388
- 'touchmove',
389
- touchEvents.moveHandler,
390
- passiveIfSupported
391
- )
392
- document.addEventListener(
393
- 'touchend',
394
- touchEvents.upHandler,
395
- passiveIfSupported
396
- )
397
321
  } else {
398
322
  document.addEventListener(
399
323
  'mousemove',
@@ -418,21 +342,40 @@ export const ColumnSizing: TableFeature = {
418
342
  }))
419
343
  }
420
344
  },
345
+ }
346
+ },
347
+
348
+ createInstance: <TGenerics extends TableGenerics>(
349
+ instance: TableInstance<TGenerics>
350
+ ): ColumnSizingInstance<TGenerics> => {
351
+ return {
352
+ setColumnSizing: updater =>
353
+ instance.options.onColumnSizingChange?.(updater),
354
+ setColumnSizingInfo: updater =>
355
+ instance.options.onColumnSizingInfoChange?.(updater),
356
+ resetColumnSizing: () => {
357
+ instance.setColumnSizing(instance.initialState.columnSizing ?? {})
358
+ },
359
+ resetHeaderSizeInfo: () => {
360
+ instance.setColumnSizingInfo(
361
+ instance.initialState.columnSizingInfo ?? {}
362
+ )
363
+ },
421
364
  getTotalSize: () =>
422
365
  instance.getHeaderGroups()[0]?.headers.reduce((sum, header) => {
423
- return sum + header.getSize()
366
+ return sum + header.column.getSize()
424
367
  }, 0) ?? 0,
425
368
  getLeftTotalSize: () =>
426
369
  instance.getLeftHeaderGroups()[0]?.headers.reduce((sum, header) => {
427
- return sum + header.getSize()
370
+ return sum + header.column.getSize()
428
371
  }, 0) ?? 0,
429
372
  getCenterTotalSize: () =>
430
373
  instance.getCenterHeaderGroups()[0]?.headers.reduce((sum, header) => {
431
- return sum + header.getSize()
374
+ return sum + header.column.getSize()
432
375
  }, 0) ?? 0,
433
376
  getRightTotalSize: () =>
434
377
  instance.getRightHeaderGroups()[0]?.headers.reduce((sum, header) => {
435
- return sum + header.getSize()
378
+ return sum + header.column.getSize()
436
379
  }, 0) ?? 0,
437
380
  }
438
381
  },
@@ -8,7 +8,6 @@ import {
8
8
  AccessorFn,
9
9
  ColumnDef,
10
10
  Renderable,
11
- HeaderRenderProps,
12
11
  } from '../types'
13
12
  import { memo } from '../utils'
14
13
 
@@ -42,7 +41,7 @@ export type CoreColumnDef<TGenerics extends TableGenerics> = {
42
41
  row: Row<TGenerics>
43
42
  column: Column<TGenerics>
44
43
  cell: Cell<TGenerics>
45
- value: TGenerics['Value']
44
+ getValue: () => TGenerics['Value']
46
45
  }
47
46
  >
48
47
  meta?: TGenerics['ColumnMeta']
@@ -93,12 +92,9 @@ export const Columns = {
93
92
  defaultColumn = (defaultColumn ?? {}) as Partial<ColumnDef<TGenerics>>
94
93
 
95
94
  return {
96
- header: (props: HeaderRenderProps<Header<TGenerics>>) =>
97
- props.header.column.id,
98
- footer: (props: HeaderRenderProps<Header<TGenerics>>) =>
99
- props.header.column.id,
100
- cell: ({ value = '' }: { value: any }): JSX.Element =>
101
- typeof value === 'boolean' ? value.toString() : value,
95
+ header: props => props.header.column.id,
96
+ footer: props => props.header.column.id,
97
+ cell: props => props.getValue().toString?.() ?? null,
102
98
  ...instance._features.reduce((obj, feature) => {
103
99
  return Object.assign(obj, feature.getDefaultColumn?.())
104
100
  }, {}),
@@ -108,7 +104,7 @@ export const Columns = {
108
104
  {
109
105
  debug: () =>
110
106
  instance.options.debugAll ?? instance.options.debugColumns,
111
- key: 'getDefaultColumn',
107
+ key: process.env.NODE_ENV === 'development' && 'getDefaultColumn',
112
108
  }
113
109
  ),
114
110
 
@@ -165,7 +161,9 @@ export const Columns = {
165
161
  ]
166
162
  },
167
163
  {
168
- key: 'column.getFlatColumns',
164
+ key:
165
+ process.env.NODE_ENV === 'production' &&
166
+ 'column.getFlatColumns',
169
167
  debug: () =>
170
168
  instance.options.debugAll ?? instance.options.debugColumns,
171
169
  }
@@ -184,7 +182,9 @@ export const Columns = {
184
182
  return [column as Column<TGenerics>]
185
183
  },
186
184
  {
187
- key: 'column.getLeafColumns',
185
+ key:
186
+ process.env.NODE_ENV === 'production' &&
187
+ 'column.getLeafColumns',
188
188
  debug: () =>
189
189
  instance.options.debugAll ?? instance.options.debugColumns,
190
190
  }
@@ -221,7 +221,7 @@ export const Columns = {
221
221
  return recurseColumns(columnDefs)
222
222
  },
223
223
  {
224
- key: 'getAllColumns',
224
+ key: process.env.NODE_ENV === 'development' && 'getAllColumns',
225
225
  debug: () =>
226
226
  instance.options.debugAll ?? instance.options.debugColumns,
227
227
  }
@@ -235,7 +235,7 @@ export const Columns = {
235
235
  })
236
236
  },
237
237
  {
238
- key: 'getAllFlatColumns',
238
+ key: process.env.NODE_ENV === 'development' && 'getAllFlatColumns',
239
239
  debug: () =>
240
240
  instance.options.debugAll ?? instance.options.debugColumns,
241
241
  }
@@ -250,7 +250,8 @@ export const Columns = {
250
250
  }, {} as Record<string, Column<TGenerics>>)
251
251
  },
252
252
  {
253
- key: 'getAllFlatColumnsById',
253
+ key:
254
+ process.env.NODE_ENV === 'development' && 'getAllFlatColumnsById',
254
255
  debug: () =>
255
256
  instance.options.debugAll ?? instance.options.debugColumns,
256
257
  }
@@ -265,7 +266,7 @@ export const Columns = {
265
266
  return orderColumns(leafColumns)
266
267
  },
267
268
  {
268
- key: 'getAllLeafColumns',
269
+ key: process.env.NODE_ENV === 'development' && 'getAllLeafColumns',
269
270
  debug: () =>
270
271
  instance.options.debugAll ?? instance.options.debugColumns,
271
272
  }
@@ -8,6 +8,7 @@ import {
8
8
  TableFeature,
9
9
  } from '../types'
10
10
  import { makeStateUpdater } from '../utils'
11
+ import { Rows } from './Rows'
11
12
 
12
13
  export type ExpandedStateList = Record<string, boolean>
13
14
  export type ExpandedState = true | Record<string, boolean>
@@ -26,12 +27,11 @@ export type ExpandedOptions<TGenerics extends TableGenerics> = {
26
27
  manualExpanding?: boolean
27
28
  onExpandedChange?: OnChangeFn<ExpandedState>
28
29
  autoResetExpanded?: boolean
29
- enableExpanded?: boolean
30
+ enableExpanding?: boolean
30
31
  getExpandedRowModel?: (
31
32
  instance: TableInstance<TGenerics>
32
33
  ) => () => RowModel<TGenerics>
33
34
  expandSubRows?: boolean
34
- defaultCanExpand?: boolean
35
35
  getIsRowExpanded?: (row: Row<TGenerics>) => boolean
36
36
  getRowCanExpand?: (row: Row<TGenerics>) => boolean
37
37
  paginateExpandedRows?: boolean
@@ -40,13 +40,9 @@ export type ExpandedOptions<TGenerics extends TableGenerics> = {
40
40
  export type ExpandedInstance<TGenerics extends TableGenerics> = {
41
41
  _autoResetExpanded: () => void
42
42
  setExpanded: (updater: Updater<ExpandedState>) => void
43
- toggleRowExpanded: (rowId: string, expanded?: boolean) => void
44
43
  toggleAllRowsExpanded: (expanded?: boolean) => void
45
44
  resetExpanded: () => void
46
- getRowCanExpand: (rowId: string) => boolean
47
45
  getCanSomeRowsExpand: () => boolean
48
- getIsRowExpanded: (rowId: string) => boolean
49
- getToggleExpandedHandler: (rowId: string) => undefined | (() => void)
50
46
  getToggleAllRowsExpandedHandler: () => (event: unknown) => void
51
47
  getIsSomeRowsExpanded: () => boolean
52
48
  getIsAllRowsExpanded: () => boolean
@@ -101,39 +97,6 @@ export const Expanding: TableFeature = {
101
97
  }
102
98
  },
103
99
  setExpanded: updater => instance.options.onExpandedChange?.(updater),
104
- toggleRowExpanded: (rowId, expanded) => {
105
- if (!rowId) return
106
-
107
- instance.setExpanded(old => {
108
- const exists = old === true ? true : !!old?.[rowId]
109
-
110
- let oldExpanded: ExpandedStateList = {}
111
-
112
- if (old === true) {
113
- Object.keys(instance.getRowModel().rowsById).forEach(rowId => {
114
- oldExpanded[rowId] = true
115
- })
116
- } else {
117
- oldExpanded = old
118
- }
119
-
120
- expanded = expanded ?? !exists
121
-
122
- if (!exists && expanded) {
123
- return {
124
- ...oldExpanded,
125
- [rowId]: true,
126
- }
127
- }
128
-
129
- if (exists && !expanded) {
130
- const { [rowId]: _, ...rest } = oldExpanded
131
- return rest
132
- }
133
-
134
- return old
135
- })
136
- },
137
100
  toggleAllRowsExpanded: expanded => {
138
101
  if (expanded ?? !instance.getIsAllRowsExpanded()) {
139
102
  instance.setExpanded(true)
@@ -144,62 +107,8 @@ export const Expanding: TableFeature = {
144
107
  resetExpanded: () => {
145
108
  instance.setExpanded(instance.initialState?.expanded ?? {})
146
109
  },
147
- getIsRowExpanded: rowId => {
148
- const row = instance.getPreExpandedRowModel().rowsById[rowId]
149
-
150
- if (!row) {
151
- if (process.env.NODE_ENV !== 'production') {
152
- console.warn(
153
- `[Table] getIsRowExpanded: no row found with id ${rowId}`
154
- )
155
- }
156
- throw new Error()
157
- }
158
-
159
- const expanded = instance.getState().expanded
160
-
161
- return !!(
162
- instance.options.getIsRowExpanded?.(row) ??
163
- (expanded === true || expanded?.[rowId])
164
- )
165
- },
166
- getRowCanExpand: rowId => {
167
- const row = instance.getRow(rowId)
168
-
169
- if (!row) {
170
- if (process.env.NODE_ENV !== 'production') {
171
- console.warn(
172
- `[Table] getRowCanExpand: no row found with id ${rowId}`
173
- )
174
- }
175
- throw new Error()
176
- }
177
-
178
- return (
179
- instance.options.getRowCanExpand?.(row) ??
180
- instance.options.enableExpanded ??
181
- instance.options.defaultCanExpand ??
182
- !!row.subRows?.length
183
- )
184
- },
185
110
  getCanSomeRowsExpand: () => {
186
- return Object.keys(instance.getRowModel().rowsById).some(id =>
187
- instance.getRowCanExpand(id)
188
- )
189
- },
190
- getToggleExpandedHandler: rowId => {
191
- const row = instance.getRow(rowId)
192
-
193
- if (!row) {
194
- return
195
- }
196
-
197
- const canExpand = instance.getRowCanExpand(rowId)
198
-
199
- return () => {
200
- if (!canExpand) return
201
- instance.toggleRowExpanded(rowId)
202
- }
111
+ return instance.getRowModel().flatRows.some(row => row.getCanExpand())
203
112
  },
204
113
  getToggleAllRowsExpandedHandler: () => {
205
114
  return (e: unknown) => {
@@ -220,11 +129,7 @@ export const Expanding: TableFeature = {
220
129
  }
221
130
 
222
131
  // If any row is not expanded, return false
223
- if (
224
- Object.keys(instance.getRowModel().rowsById).some(
225
- id => !instance.getIsRowExpanded(id)
226
- )
227
- ) {
132
+ if (instance.getRowModel().flatRows.some(row => row.getIsExpanded())) {
228
133
  return false
229
134
  }
230
135
 
@@ -273,12 +178,60 @@ export const Expanding: TableFeature = {
273
178
  instance: TableInstance<TGenerics>
274
179
  ): ExpandedRow => {
275
180
  return {
276
- toggleExpanded: expanded =>
277
- void instance.toggleRowExpanded(row.id, expanded),
278
- getIsExpanded: () => instance.getIsRowExpanded(row.id),
279
- getCanExpand: () => row.subRows && !!row.subRows.length,
280
- getToggleExpandedHandler: () =>
281
- instance.getToggleExpandedHandler(row.id)!,
181
+ toggleExpanded: expanded => {
182
+ instance.setExpanded(old => {
183
+ const exists = old === true ? true : !!old?.[row.id]
184
+
185
+ let oldExpanded: ExpandedStateList = {}
186
+
187
+ if (old === true) {
188
+ Object.keys(instance.getRowModel().rowsById).forEach(rowId => {
189
+ oldExpanded[rowId] = true
190
+ })
191
+ } else {
192
+ oldExpanded = old
193
+ }
194
+
195
+ expanded = expanded ?? !exists
196
+
197
+ if (!exists && expanded) {
198
+ return {
199
+ ...oldExpanded,
200
+ [row.id]: true,
201
+ }
202
+ }
203
+
204
+ if (exists && !expanded) {
205
+ const { [row.id]: _, ...rest } = oldExpanded
206
+ return rest
207
+ }
208
+
209
+ return old
210
+ })
211
+ },
212
+ getIsExpanded: () => {
213
+ const expanded = instance.getState().expanded
214
+
215
+ return !!(
216
+ instance.options.getIsRowExpanded?.(row) ??
217
+ (expanded === true || expanded?.[row.id])
218
+ )
219
+ },
220
+ getCanExpand: () => {
221
+ return (
222
+ (instance.options.getRowCanExpand?.(row) ?? true) &&
223
+ (instance.options.enableExpanding ?? true) &&
224
+ !!row.subRows?.length
225
+ )
226
+ },
227
+ getToggleExpandedHandler: () => {
228
+ const canExpand = row.getCanExpand()
229
+
230
+ return () => {
231
+ if (!canExpand) return
232
+ row.toggleExpanded()
233
+ }
234
+ },
282
235
  }
283
236
  },
284
237
  }