@tanstack/table-core 8.0.0-alpha.73 → 8.0.0-alpha.78

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.
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.73",
4
+ "version": "8.0.0-alpha.78",
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",
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "module": "build/esm/index.js",
28
28
  "main": "build/cjs/index.js",
29
- "browser": "build/umd/index.production.min.js",
29
+ "browser": "build/umd/index.production.js",
30
30
  "types": "build/types/index.d.ts",
31
31
  "sideEffects": false,
32
32
  "engines": {
package/src/core.ts CHANGED
@@ -88,8 +88,6 @@ export type CoreInstance<TGenerics extends TableGenerics> = {
88
88
  // facets: Batch[]
89
89
  // }
90
90
 
91
- // export type TaskPriority = keyof CoreBatches
92
-
93
91
  export function createTableInstance<TGenerics extends TableGenerics>(
94
92
  options: TableOptions<TGenerics>
95
93
  ): TableInstance<TGenerics> {
@@ -147,74 +145,6 @@ export function createTableInstance<TGenerics extends TableGenerics>(
147
145
  const queued: (() => void)[] = []
148
146
  let queuedTimeout = false
149
147
 
150
- // let workScheduled = false
151
- // let working = false
152
- // let latestCallback: ReturnType<typeof requestIdleCallback>
153
- // let batchUid = 0
154
- // const onProgress = () => {}
155
- // const getBatch = () => {
156
- // instance.batches.data = instance.batches.data.filter(d => d.tasks.length)
157
- // instance.batches.facets = instance.batches.facets.filter(
158
- // d => d.tasks.length
159
- // )
160
-
161
- // return (
162
- // instance.batches.data.find(d => d.tasks.length) ??
163
- // instance.batches.facets.find(d => d.tasks.length)
164
- // )
165
- // }
166
-
167
- // const startWorkLoop = () => {
168
- // working = true
169
-
170
- // const workLoop = (deadline: IdleDeadline) => {
171
- // const batch = getBatch()
172
-
173
- // if (!batch) {
174
- // working = false
175
- // return
176
- // }
177
- // // Prioritize tasks
178
- // while (deadline.timeRemaining() > 0 && batch.tasks.length) {
179
- // batch.tasks.shift()!()
180
- // }
181
-
182
- // onProgress()
183
-
184
- // if (working) {
185
- // latestCallback = requestIdleCallback(workLoop, { timeout: 10000 })
186
- // }
187
- // }
188
-
189
- // latestCallback = requestIdleCallback(workLoop, { timeout: 10000 })
190
- // }
191
-
192
- // const startWork = () => {
193
- // if (getBatch() && !working) {
194
- // if (
195
- // (process.env.NODE_ENV === 'development' && instance.options.debugAll) ??
196
- // instance.options.debugTable
197
- // ) {
198
- // console.info('Starting work...')
199
- // }
200
- // startWorkLoop()
201
- // }
202
- // }
203
-
204
- // const stopWork = () => {
205
- // if (working) {
206
- // if (
207
- // (process.env.NODE_ENV === 'development' && instance.options.debugAll) ??
208
- // instance.options.debugTable
209
- // ) {
210
- // console.info('Stopping work...')
211
- // }
212
-
213
- // working = false
214
- // cancelIdleCallback(latestCallback)
215
- // }
216
- // }
217
-
218
148
  const midInstance: CoreInstance<TGenerics> = {
219
149
  ...instance,
220
150
  // init: () => {
@@ -253,43 +183,6 @@ export function createTableInstance<TGenerics extends TableGenerics>(
253
183
  )
254
184
  }
255
185
  },
256
- // batches: {
257
- // data: [],
258
- // facets: [],
259
- // },
260
- // createBatch: priority => {
261
- // const batchId = batchUid++
262
- // let canceled: boolean
263
-
264
- // const batch: Batch = {
265
- // id: batchId,
266
- // priority,
267
- // tasks: [],
268
- // schedule: cb => {
269
- // if (canceled) return
270
- // batch.tasks.push(cb)
271
-
272
- // if (!working && !workScheduled) {
273
- // workScheduled = true
274
- // instance.queue(() => {
275
- // workScheduled = false
276
- // instance.setState(old => ({ ...old }))
277
- // })
278
- // }
279
- // },
280
- // cancel: () => {
281
- // canceled = true
282
- // batch.tasks = []
283
- // instance.batches[priority] = instance.batches[priority].filter(
284
- // b => b.id !== batchId
285
- // )
286
- // },
287
- // }
288
-
289
- // instance.batches[priority].push(batch)
290
-
291
- // return batch
292
- // },
293
186
  reset: () => {
294
187
  instance.setState(instance.initialState)
295
188
  },
@@ -121,15 +121,20 @@ export const Headers = {
121
121
  instance.getState().columnPinning.right,
122
122
  ],
123
123
  (allColumns, leafColumns, left, right) => {
124
- const leftColumns = leafColumns.filter(column =>
125
- left?.includes(column.id)
126
- )
127
- const rightColumns = leafColumns.filter(column =>
128
- right?.includes(column.id)
129
- )
124
+ const leftColumns =
125
+ left
126
+ ?.map(columnId => leafColumns.find(d => d.id === columnId)!)
127
+ .filter(Boolean) ?? []
128
+
129
+ const rightColumns =
130
+ right
131
+ ?.map(columnId => leafColumns.find(d => d.id === columnId)!)
132
+ .filter(Boolean) ?? []
133
+
130
134
  const centerColumns = leafColumns.filter(
131
135
  column => !left?.includes(column.id) && !right?.includes(column.id)
132
136
  )
137
+
133
138
  const headerGroups = buildHeaderGroups(
134
139
  allColumns,
135
140
  [...leftColumns, ...centerColumns, ...rightColumns],
@@ -173,8 +178,17 @@ export const Headers = {
173
178
  instance.getState().columnPinning.left,
174
179
  ],
175
180
  (allColumns, leafColumns, left) => {
176
- leafColumns = leafColumns.filter(column => left?.includes(column.id))
177
- return buildHeaderGroups(allColumns, leafColumns, instance, 'left')
181
+ const orderedLeafColumns =
182
+ left
183
+ ?.map(columnId => leafColumns.find(d => d.id === columnId)!)
184
+ .filter(Boolean) ?? []
185
+
186
+ return buildHeaderGroups(
187
+ allColumns,
188
+ orderedLeafColumns,
189
+ instance,
190
+ 'left'
191
+ )
178
192
  },
179
193
  {
180
194
  key: process.env.NODE_ENV === 'development' && 'getLeftHeaderGroups',
@@ -190,8 +204,17 @@ export const Headers = {
190
204
  instance.getState().columnPinning.right,
191
205
  ],
192
206
  (allColumns, leafColumns, right) => {
193
- leafColumns = leafColumns.filter(column => right?.includes(column.id))
194
- return buildHeaderGroups(allColumns, leafColumns, instance, 'right')
207
+ const orderedLeafColumns =
208
+ right
209
+ ?.map(columnId => leafColumns.find(d => d.id === columnId)!)
210
+ .filter(Boolean) ?? []
211
+
212
+ return buildHeaderGroups(
213
+ allColumns,
214
+ orderedLeafColumns,
215
+ instance,
216
+ 'right'
217
+ )
195
218
  },
196
219
  {
197
220
  key: process.env.NODE_ENV === 'development' && 'getRightHeaderGroups',
@@ -14,78 +14,65 @@ export function getCoreRowModel<TGenerics extends TableGenerics>(): (
14
14
  flatRows: Row<TGenerics>[]
15
15
  rowsById: Record<string, Row<TGenerics>>
16
16
  } => {
17
- // Access the row model using initial columns
18
- const rows: Row<TGenerics>[] = []
19
- const flatRows: Row<TGenerics>[] = []
20
- const rowsById: Record<string, Row<TGenerics>> = {}
17
+ const rowModel: RowModel<TGenerics> = {
18
+ rows: [],
19
+ flatRows: [],
20
+ rowsById: {},
21
+ }
21
22
 
22
- const leafColumns = instance.getAllLeafColumns()
23
+ let rows
24
+ let row
25
+ let originalRow
23
26
 
24
- const accessRow = (
25
- originalRow: TGenerics['Row'],
26
- rowIndex: number,
27
+ const accessRows = (
28
+ originalRows: TGenerics['Row'][],
27
29
  depth = 0,
28
- parentRows: Row<TGenerics>[],
29
30
  parent?: Row<TGenerics>
30
- ) => {
31
- const id = instance.getRowId(originalRow, rowIndex, parent)
32
-
33
- if (!id) {
34
- if (process.env.NODE_ENV !== 'production') {
35
- throw new Error(`getRowId expected an ID, but got ${id}`)
36
- }
37
- }
31
+ ): Row<TGenerics>[] => {
32
+ rows = []
38
33
 
39
- const values: Record<string, any> = {}
34
+ for (let i = 0; i < originalRows.length; i++) {
35
+ originalRow = originalRows[i]
40
36
 
41
- for (let i = 0; i < leafColumns.length; i++) {
42
- const column = leafColumns[i]
43
- if (column && column.accessorFn) {
44
- values[column.id] = column.accessorFn(originalRow, rowIndex)
45
- }
46
- }
37
+ // This could be an expensive check at scale, so we should move it somewhere else, but where?
38
+ // if (!id) {
39
+ // if (process.env.NODE_ENV !== 'production') {
40
+ // throw new Error(`getRowId expected an ID, but got ${id}`)
41
+ // }
42
+ // }
47
43
 
48
- // Make the row
49
- const row = instance.createRow(id, originalRow, rowIndex, depth)
50
-
51
- // Push instance row into the parentRows array
52
- parentRows.push(row)
53
- // Keep track of every row in a flat array
54
- flatRows.push(row)
55
- // Also keep track of every row by its ID
56
- rowsById[id] = row
57
-
58
- // Get the original subrows
59
- if (instance.options.getSubRows) {
60
- const originalSubRows = instance.options.getSubRows(
44
+ // Make the row
45
+ row = instance.createRow(
46
+ instance.getRowId(originalRow, i, parent),
61
47
  originalRow,
62
- rowIndex
48
+ i,
49
+ depth
63
50
  )
64
51
 
65
- // Then recursively access them
66
- if (originalSubRows?.length) {
67
- row.originalSubRows = originalSubRows
68
- const subRows: Row<TGenerics>[] = []
52
+ // Keep track of every row in a flat array
53
+ rowModel.flatRows.push(row)
54
+ // Also keep track of every row by its ID
55
+ rowModel.rowsById[row.id] = row
56
+ // Push instance row into parent
57
+ rows.push(row)
58
+
59
+ // Get the original subrows
60
+ if (instance.options.getSubRows) {
61
+ row.originalSubRows = instance.options.getSubRows(originalRow, i)
69
62
 
70
- for (let i = 0; i < row.originalSubRows.length; i++) {
71
- accessRow(
72
- row.originalSubRows[i] as TGenerics['Row'],
73
- i,
74
- depth + 1,
75
- subRows,
76
- row
77
- )
63
+ // Then recursively access them
64
+ if (row.originalSubRows?.length) {
65
+ row.subRows = accessRows(row.originalSubRows, depth + 1, row)
78
66
  }
79
- row.subRows = subRows
80
67
  }
81
68
  }
82
- }
83
69
 
84
- for (let i = 0; i < data.length; i++) {
85
- accessRow(data[i] as TGenerics['Row'], i, 0, rows)
70
+ return rows
86
71
  }
87
72
 
88
- return { rows, flatRows, rowsById }
73
+ rowModel.rows = accessRows(data)
74
+
75
+ return rowModel
89
76
  },
90
77
  {
91
78
  key: process.env.NODE_ENV === 'development' && 'getRowModel',