@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
@@ -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
- resetColumnSizing: () => void
52
- resetColumnSize: (columnId: string) => void
53
- resetHeaderSize: (headerId: string) => void
54
- 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
49
+ resetColumnSizing: (defaultState?: boolean) => void
50
+ resetHeaderSizeInfo: (defaultState?: boolean) => void
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
  //
@@ -94,6 +83,15 @@ export const defaultColumnSizing = {
94
83
  maxSize: Number.MAX_SAFE_INTEGER,
95
84
  }
96
85
 
86
+ const getDefaultColumnSizingInfoState = (): ColumnSizingInfoState => ({
87
+ startOffset: null,
88
+ startSize: null,
89
+ deltaOffset: null,
90
+ deltaPercentage: null,
91
+ isResizingColumn: false,
92
+ columnSizingStart: [],
93
+ })
94
+
97
95
  export const ColumnSizing: TableFeature = {
98
96
  getDefaultColumn: (): ColumnSizingColumnDef => {
99
97
  return defaultColumnSizing
@@ -101,14 +99,7 @@ export const ColumnSizing: TableFeature = {
101
99
  getInitialState: (state): ColumnSizingTableState => {
102
100
  return {
103
101
  columnSizing: {},
104
- columnSizingInfo: {
105
- startOffset: null,
106
- startSize: null,
107
- deltaOffset: null,
108
- deltaPercentage: null,
109
- isResizingColumn: false,
110
- columnSizingStart: [],
111
- },
102
+ columnSizingInfo: getDefaultColumnSizingInfoState(),
112
103
  ...state,
113
104
  }
114
105
  },
@@ -128,37 +119,7 @@ export const ColumnSizing: TableFeature = {
128
119
  instance: TableInstance<TGenerics>
129
120
  ): ColumnSizingColumn<TGenerics> => {
130
121
  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
-
122
+ getSize: () => {
162
123
  const columnSize = instance.getState().columnSizing[column.id]
163
124
 
164
125
  return Math.min(
@@ -169,99 +130,74 @@ export const ColumnSizing: TableFeature = {
169
130
  column.maxSize ?? defaultColumnSizing.maxSize
170
131
  )
171
132
  },
172
- getColumnStart: (columnId, position) => {
173
- const column = instance.getColumn(columnId)
174
-
175
- if (!column) {
176
- throw new Error()
177
- }
178
-
133
+ getStart: position => {
179
134
  const columns = !position
180
135
  ? instance.getVisibleLeafColumns()
181
136
  : position === 'left'
182
137
  ? instance.getLeftVisibleLeafColumns()
183
138
  : instance.getRightVisibleLeafColumns()
184
139
 
185
- const index = columns.findIndex(d => d.id === columnId)
140
+ const index = columns.findIndex(d => d.id === column.id)
186
141
 
187
142
  if (index > 0) {
188
- const prevSiblingColumn = columns[index - 1]
143
+ const prevSiblingColumn = columns[index - 1]!
189
144
 
190
145
  return (
191
- instance.getColumnStart(prevSiblingColumn.id, position) +
192
- prevSiblingColumn.getSize()
146
+ prevSiblingColumn.getStart(position) + prevSiblingColumn.getSize()
193
147
  )
194
148
  }
195
149
 
196
150
  return 0
197
151
  },
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 }) => {
152
+ resetSize: () => {
153
+ instance.setColumnSizing(({ [column.id]: _, ...rest }) => {
212
154
  return rest
213
155
  })
214
156
  },
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)
157
+ getCanResize: () => {
158
+ return (
159
+ (column.enableResizing ?? true) &&
160
+ (instance.options.enableColumnResizing ?? true)
161
+ )
228
162
  },
229
- getColumnCanResize: columnId => {
230
- const column = instance.getColumn(columnId)
231
-
232
- if (!column) {
233
- throw new Error()
234
- }
235
-
163
+ getIsResizing: () => {
236
164
  return (
237
- column.enableResizing ??
238
- instance.options.enableColumnResizing ??
239
- column.defaultCanResize ??
240
- true
165
+ instance.getState().columnSizingInfo.isResizingColumn === column.id
241
166
  )
242
167
  },
243
- getColumnIsResizing: columnId => {
244
- const column = instance.getColumn(columnId)
168
+ }
169
+ },
245
170
 
246
- if (!column) {
247
- throw new Error()
171
+ createHeader: <TGenerics extends TableGenerics>(
172
+ header: Header<TGenerics>,
173
+ instance: TableInstance<TGenerics>
174
+ ): ColumnSizingHeader<TGenerics> => {
175
+ return {
176
+ getSize: () => {
177
+ let sum = 0
178
+
179
+ const recurse = (header: Header<TGenerics>) => {
180
+ if (header.subHeaders.length) {
181
+ header.subHeaders.forEach(recurse)
182
+ } else {
183
+ sum += header.column.getSize() ?? 0
184
+ }
248
185
  }
249
186
 
250
- return (
251
- instance.getState().columnSizingInfo.isResizingColumn === columnId
252
- )
253
- },
254
- getHeaderIsResizing: headerId => {
255
- const header = instance.getHeader(headerId)
187
+ recurse(header)
256
188
 
257
- if (!header) {
258
- throw new Error()
189
+ return sum
190
+ },
191
+ getStart: () => {
192
+ if (header.index > 0) {
193
+ const prevSiblingHeader =
194
+ header.headerGroup.headers[header.index - 1]!
195
+ return prevSiblingHeader.getStart() + prevSiblingHeader.getSize()
259
196
  }
260
197
 
261
- return instance.getColumnIsResizing(header.column.id)
198
+ return 0
262
199
  },
263
- getResizeHandler: (headerId: string) => {
264
- const header = instance.getHeader(headerId)
200
+ getResizeHandler: () => {
265
201
  const column = instance.getColumn(header.column.id)
266
202
  const canResize = column.getCanResize()
267
203
 
@@ -279,16 +215,16 @@ export const ColumnSizing: TableFeature = {
279
215
  }
280
216
  }
281
217
 
282
- const header = headerId ? instance.getHeader(headerId) : undefined
283
-
284
- const startSize = header ? header.getSize() : column.getSize()
218
+ const startSize = column.getSize()
285
219
 
286
220
  const columnSizingStart: [string, number][] = header
287
- ? header.getLeafHeaders().map(d => [d.column.id, d.getSize()])
221
+ ? header
222
+ .getLeafHeaders()
223
+ .map(d => [d.column.id, d.column.getSize()])
288
224
  : [[column.id, column.getSize()]]
289
225
 
290
226
  const clientX = isTouchStartEvent(e)
291
- ? Math.round(e.touches[0].clientX)
227
+ ? Math.round(e.touches[0]!.clientX)
292
228
  : (e as MouseEvent).clientX
293
229
 
294
230
  const updateOffset = (
@@ -365,7 +301,7 @@ export const ColumnSizing: TableFeature = {
365
301
  e.preventDefault()
366
302
  e.stopPropagation()
367
303
  }
368
- onMove(e.touches[0].clientX)
304
+ onMove(e.touches[0]!.clientX)
369
305
  return false
370
306
  },
371
307
  upHandler: (e: TouchEvent) => {
@@ -375,7 +311,7 @@ export const ColumnSizing: TableFeature = {
375
311
  e.preventDefault()
376
312
  e.stopPropagation()
377
313
  }
378
- onEnd(e.touches[0].clientX)
314
+ onEnd(e.touches[0]!.clientX)
379
315
  },
380
316
  }
381
317
 
@@ -384,16 +320,6 @@ export const ColumnSizing: TableFeature = {
384
320
  : false
385
321
 
386
322
  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
323
  } else {
398
324
  document.addEventListener(
399
325
  'mousemove',
@@ -418,21 +344,45 @@ export const ColumnSizing: TableFeature = {
418
344
  }))
419
345
  }
420
346
  },
347
+ }
348
+ },
349
+
350
+ createInstance: <TGenerics extends TableGenerics>(
351
+ instance: TableInstance<TGenerics>
352
+ ): ColumnSizingInstance<TGenerics> => {
353
+ return {
354
+ setColumnSizing: updater =>
355
+ instance.options.onColumnSizingChange?.(updater),
356
+ setColumnSizingInfo: updater =>
357
+ instance.options.onColumnSizingInfoChange?.(updater),
358
+ resetColumnSizing: defaultState => {
359
+ instance.setColumnSizing(
360
+ defaultState ? {} : instance.initialState.columnSizing ?? {}
361
+ )
362
+ },
363
+ resetHeaderSizeInfo: defaultState => {
364
+ instance.setColumnSizingInfo(
365
+ defaultState
366
+ ? getDefaultColumnSizingInfoState()
367
+ : instance.initialState.columnSizingInfo ??
368
+ getDefaultColumnSizingInfoState()
369
+ )
370
+ },
421
371
  getTotalSize: () =>
422
372
  instance.getHeaderGroups()[0]?.headers.reduce((sum, header) => {
423
- return sum + header.getSize()
373
+ return sum + header.column.getSize()
424
374
  }, 0) ?? 0,
425
375
  getLeftTotalSize: () =>
426
376
  instance.getLeftHeaderGroups()[0]?.headers.reduce((sum, header) => {
427
- return sum + header.getSize()
377
+ return sum + header.column.getSize()
428
378
  }, 0) ?? 0,
429
379
  getCenterTotalSize: () =>
430
380
  instance.getCenterHeaderGroups()[0]?.headers.reduce((sum, header) => {
431
- return sum + header.getSize()
381
+ return sum + header.column.getSize()
432
382
  }, 0) ?? 0,
433
383
  getRightTotalSize: () =>
434
384
  instance.getRightHeaderGroups()[0]?.headers.reduce((sum, header) => {
435
- return sum + header.getSize()
385
+ return sum + header.column.getSize()
436
386
  }, 0) ?? 0,
437
387
  }
438
388
  },
@@ -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: process.env.NODE_ENV === 'production' && 'getDefaultColumn',
107
+ key: process.env.NODE_ENV === 'development' && 'getDefaultColumn',
112
108
  }
113
109
  ),
114
110
 
@@ -225,7 +221,7 @@ export const Columns = {
225
221
  return recurseColumns(columnDefs)
226
222
  },
227
223
  {
228
- key: process.env.NODE_ENV === 'production' && 'getAllColumns',
224
+ key: process.env.NODE_ENV === 'development' && 'getAllColumns',
229
225
  debug: () =>
230
226
  instance.options.debugAll ?? instance.options.debugColumns,
231
227
  }
@@ -239,7 +235,7 @@ export const Columns = {
239
235
  })
240
236
  },
241
237
  {
242
- key: process.env.NODE_ENV === 'production' && 'getAllFlatColumns',
238
+ key: process.env.NODE_ENV === 'development' && 'getAllFlatColumns',
243
239
  debug: () =>
244
240
  instance.options.debugAll ?? instance.options.debugColumns,
245
241
  }
@@ -254,7 +250,8 @@ export const Columns = {
254
250
  }, {} as Record<string, Column<TGenerics>>)
255
251
  },
256
252
  {
257
- key: process.env.NODE_ENV === 'production' && 'getAllFlatColumnsById',
253
+ key:
254
+ process.env.NODE_ENV === 'development' && 'getAllFlatColumnsById',
258
255
  debug: () =>
259
256
  instance.options.debugAll ?? instance.options.debugColumns,
260
257
  }
@@ -269,7 +266,7 @@ export const Columns = {
269
266
  return orderColumns(leafColumns)
270
267
  },
271
268
  {
272
- key: process.env.NODE_ENV === 'production' && 'getAllLeafColumns',
269
+ key: process.env.NODE_ENV === 'development' && 'getAllLeafColumns',
273
270
  debug: () =>
274
271
  instance.options.debugAll ?? instance.options.debugColumns,
275
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
- resetExpanded: () => void
46
- getRowCanExpand: (rowId: string) => boolean
44
+ resetExpanded: (defaultState?: boolean) => void
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)
@@ -141,65 +104,13 @@ export const Expanding: TableFeature = {
141
104
  instance.setExpanded({})
142
105
  }
143
106
  },
144
- resetExpanded: () => {
145
- instance.setExpanded(instance.initialState?.expanded ?? {})
146
- },
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
107
+ resetExpanded: defaultState => {
108
+ instance.setExpanded(
109
+ defaultState ? {} : instance.initialState?.expanded ?? {}
183
110
  )
184
111
  },
185
112
  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
- }
113
+ return instance.getRowModel().flatRows.some(row => row.getCanExpand())
203
114
  },
204
115
  getToggleAllRowsExpandedHandler: () => {
205
116
  return (e: unknown) => {
@@ -220,11 +131,7 @@ export const Expanding: TableFeature = {
220
131
  }
221
132
 
222
133
  // If any row is not expanded, return false
223
- if (
224
- Object.keys(instance.getRowModel().rowsById).some(
225
- id => !instance.getIsRowExpanded(id)
226
- )
227
- ) {
134
+ if (instance.getRowModel().flatRows.some(row => row.getIsExpanded())) {
228
135
  return false
229
136
  }
230
137
 
@@ -273,12 +180,60 @@ export const Expanding: TableFeature = {
273
180
  instance: TableInstance<TGenerics>
274
181
  ): ExpandedRow => {
275
182
  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)!,
183
+ toggleExpanded: expanded => {
184
+ instance.setExpanded(old => {
185
+ const exists = old === true ? true : !!old?.[row.id]
186
+
187
+ let oldExpanded: ExpandedStateList = {}
188
+
189
+ if (old === true) {
190
+ Object.keys(instance.getRowModel().rowsById).forEach(rowId => {
191
+ oldExpanded[rowId] = true
192
+ })
193
+ } else {
194
+ oldExpanded = old
195
+ }
196
+
197
+ expanded = expanded ?? !exists
198
+
199
+ if (!exists && expanded) {
200
+ return {
201
+ ...oldExpanded,
202
+ [row.id]: true,
203
+ }
204
+ }
205
+
206
+ if (exists && !expanded) {
207
+ const { [row.id]: _, ...rest } = oldExpanded
208
+ return rest
209
+ }
210
+
211
+ return old
212
+ })
213
+ },
214
+ getIsExpanded: () => {
215
+ const expanded = instance.getState().expanded
216
+
217
+ return !!(
218
+ instance.options.getIsRowExpanded?.(row) ??
219
+ (expanded === true || expanded?.[row.id])
220
+ )
221
+ },
222
+ getCanExpand: () => {
223
+ return (
224
+ (instance.options.getRowCanExpand?.(row) ?? true) &&
225
+ (instance.options.enableExpanding ?? true) &&
226
+ !!row.subRows?.length
227
+ )
228
+ },
229
+ getToggleExpandedHandler: () => {
230
+ const canExpand = row.getCanExpand()
231
+
232
+ return () => {
233
+ if (!canExpand) return
234
+ row.toggleExpanded()
235
+ }
236
+ },
282
237
  }
283
238
  },
284
239
  }