@tanstack/table-core 8.0.0-alpha.63 → 8.0.0-alpha.67

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