@tanstack/table-core 8.5.1 → 8.5.4
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/build/cjs/columnHelper.js.map +1 -1
- package/build/cjs/core/column.js.map +1 -1
- package/build/cjs/core/table.js +16 -3
- package/build/cjs/core/table.js.map +1 -1
- package/build/cjs/features/RowSelection.js +4 -4
- package/build/cjs/features/RowSelection.js.map +1 -1
- package/build/esm/index.js +20 -7
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +312 -312
- package/build/types/index.d.ts +116 -107
- package/build/umd/index.development.js +20 -7
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/columnHelper.ts +13 -14
- package/src/core/column.ts +4 -56
- package/src/core/table.ts +25 -5
- package/src/features/RowSelection.ts +4 -4
- package/src/types.ts +94 -10
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/table-core",
|
|
3
3
|
"author": "Tanner Linsley",
|
|
4
|
-
"version": "8.5.
|
|
4
|
+
"version": "8.5.4",
|
|
5
5
|
"description": "Headless UI for building powerful tables & datagrids for TS/JS.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://github.com/tanstack/table#readme",
|
package/src/columnHelper.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
AccessorFn,
|
|
3
|
+
ColumnDef,
|
|
4
|
+
DisplayColumnDef,
|
|
5
|
+
GroupColumnDef,
|
|
6
|
+
IdentifiedColumnDef,
|
|
7
|
+
RowData,
|
|
8
|
+
} from './types'
|
|
2
9
|
import { DeepKeys, DeepValue, RequiredKeys } from './utils'
|
|
3
10
|
|
|
4
11
|
// type Person = {
|
|
@@ -51,20 +58,12 @@ export type ColumnHelper<TData extends RowData> = {
|
|
|
51
58
|
: never
|
|
52
59
|
>(
|
|
53
60
|
accessor: TAccessor,
|
|
54
|
-
column:
|
|
61
|
+
column: TAccessor extends AccessorFn<TData>
|
|
62
|
+
? DisplayColumnDef<TData, TValue>
|
|
63
|
+
: IdentifiedColumnDef<TData, TValue>
|
|
55
64
|
) => ColumnDef<TData, TValue>
|
|
56
|
-
display: (
|
|
57
|
-
|
|
58
|
-
Omit<ColumnDef<TData, unknown>, 'accessorKey' | 'accessorFn'>,
|
|
59
|
-
'id'
|
|
60
|
-
>
|
|
61
|
-
) => ColumnDef<TData, unknown>
|
|
62
|
-
group: (
|
|
63
|
-
column: RequiredKeys<
|
|
64
|
-
Omit<ColumnDef<TData, unknown>, 'accessorKey' | 'accessorFn'>,
|
|
65
|
-
'id' | 'columns'
|
|
66
|
-
>
|
|
67
|
-
) => ColumnDef<TData, unknown>
|
|
65
|
+
display: (column: DisplayColumnDef<TData>) => ColumnDef<TData, unknown>
|
|
66
|
+
group: (column: GroupColumnDef<TData>) => ColumnDef<TData, unknown>
|
|
68
67
|
}
|
|
69
68
|
|
|
70
69
|
export function createColumnHelper<
|
package/src/core/column.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TaggedTemplateExpression } from '@babel/types'
|
|
1
2
|
import {
|
|
2
3
|
Column,
|
|
3
4
|
Table,
|
|
@@ -6,62 +7,9 @@ import {
|
|
|
6
7
|
ColumnDefTemplate,
|
|
7
8
|
RowData,
|
|
8
9
|
ColumnMeta,
|
|
10
|
+
ColumnDefResolved,
|
|
9
11
|
} from '../types'
|
|
10
|
-
import {
|
|
11
|
-
import { CellContext } from './cell'
|
|
12
|
-
import { HeaderContext } from './headers'
|
|
13
|
-
|
|
14
|
-
export type CoreColumnDefBase<TData extends RowData, TValue> = {
|
|
15
|
-
columns?: ColumnDef<TData, unknown>[]
|
|
16
|
-
header?: ColumnDefTemplate<HeaderContext<TData, TValue>>
|
|
17
|
-
footer?: ColumnDefTemplate<HeaderContext<TData, TValue>>
|
|
18
|
-
cell?: ColumnDefTemplate<CellContext<TData, TValue>>
|
|
19
|
-
meta?: ColumnMeta<TData, TValue>
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export type CoreColumnDefDisplay<
|
|
23
|
-
TData extends RowData,
|
|
24
|
-
TValue
|
|
25
|
-
> = CoreColumnDefBase<TData, TValue> & {
|
|
26
|
-
id: string
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export type CoreColumnDefDisplayWithStringHeader<
|
|
30
|
-
TData extends RowData,
|
|
31
|
-
TValue
|
|
32
|
-
> = CoreColumnDefBase<TData, TValue> & {
|
|
33
|
-
header: string
|
|
34
|
-
id?: string
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export type CoreColumnDefAccessorFn<
|
|
38
|
-
TData extends RowData,
|
|
39
|
-
TValue
|
|
40
|
-
> = CoreColumnDefBase<TData, TValue> & {
|
|
41
|
-
accessorFn: AccessorFn<TData, TValue>
|
|
42
|
-
id: string
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export type CoreColumnDefAccessorKey<
|
|
46
|
-
TData extends RowData,
|
|
47
|
-
TValue
|
|
48
|
-
> = CoreColumnDefBase<TData, TValue> & {
|
|
49
|
-
accessorKey: DeepKeys<TData>
|
|
50
|
-
id?: string
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export type CoreColumnDef<TData extends RowData, TValue> =
|
|
54
|
-
| CoreColumnDefDisplay<TData, TValue>
|
|
55
|
-
| CoreColumnDefDisplayWithStringHeader<TData, TValue>
|
|
56
|
-
| CoreColumnDefAccessorFn<TData, TValue>
|
|
57
|
-
| CoreColumnDefAccessorKey<TData, TValue>
|
|
58
|
-
|
|
59
|
-
export type CoreColumnDefResolved<
|
|
60
|
-
TData extends RowData,
|
|
61
|
-
TValue = unknown
|
|
62
|
-
> = Partial<UnionToIntersection<CoreColumnDef<TData, TValue>>> & {
|
|
63
|
-
accessorKey?: string
|
|
64
|
-
}
|
|
12
|
+
import { memo } from '../utils'
|
|
65
13
|
|
|
66
14
|
export type CoreColumn<TData extends RowData, TValue> = {
|
|
67
15
|
id: string
|
|
@@ -85,7 +33,7 @@ export function createColumn<TData extends RowData, TValue>(
|
|
|
85
33
|
const resolvedColumnDef = {
|
|
86
34
|
...defaultColumn,
|
|
87
35
|
...columnDef,
|
|
88
|
-
} as
|
|
36
|
+
} as ColumnDefResolved<TData>
|
|
89
37
|
|
|
90
38
|
const accessorKey = resolvedColumnDef.accessorKey
|
|
91
39
|
|
package/src/core/table.ts
CHANGED
|
@@ -14,6 +14,8 @@ import {
|
|
|
14
14
|
TableOptions,
|
|
15
15
|
RowData,
|
|
16
16
|
TableMeta,
|
|
17
|
+
ColumnDefResolved,
|
|
18
|
+
GroupColumnDef,
|
|
17
19
|
} from '../types'
|
|
18
20
|
|
|
19
21
|
//
|
|
@@ -24,7 +26,7 @@ import { Headers } from './headers'
|
|
|
24
26
|
import { ColumnSizing } from '../features/ColumnSizing'
|
|
25
27
|
import { Expanding } from '../features/Expanding'
|
|
26
28
|
import { Filters } from '../features/Filters'
|
|
27
|
-
import { Grouping } from '../features/Grouping'
|
|
29
|
+
import { Grouping, GroupingColumnDef } from '../features/Grouping'
|
|
28
30
|
import { Ordering } from '../features/Ordering'
|
|
29
31
|
import { Pagination } from '../features/Pagination'
|
|
30
32
|
import { Pinning } from '../features/Pinning'
|
|
@@ -232,8 +234,21 @@ export function createTable<TData extends RowData>(
|
|
|
232
234
|
>
|
|
233
235
|
|
|
234
236
|
return {
|
|
235
|
-
header: props =>
|
|
236
|
-
|
|
237
|
+
header: props => {
|
|
238
|
+
const resolvedColumnDef = props.header.column
|
|
239
|
+
.columnDef as ColumnDefResolved<TData>
|
|
240
|
+
|
|
241
|
+
if (resolvedColumnDef.accessorKey) {
|
|
242
|
+
return resolvedColumnDef.accessorKey
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if (resolvedColumnDef.accessorFn) {
|
|
246
|
+
return resolvedColumnDef.id
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return null
|
|
250
|
+
},
|
|
251
|
+
// footer: props => props.header.column.id,
|
|
237
252
|
cell: props => props.renderValue<any>()?.toString?.() ?? null,
|
|
238
253
|
...table._features.reduce((obj, feature) => {
|
|
239
254
|
return Object.assign(obj, feature.getDefaultColumnDef?.())
|
|
@@ -260,8 +275,13 @@ export function createTable<TData extends RowData>(
|
|
|
260
275
|
return columnDefs.map(columnDef => {
|
|
261
276
|
const column = createColumn(table, columnDef, depth, parent)
|
|
262
277
|
|
|
263
|
-
|
|
264
|
-
|
|
278
|
+
const groupingColumnDef = columnDef as GroupColumnDef<
|
|
279
|
+
TData,
|
|
280
|
+
unknown
|
|
281
|
+
>
|
|
282
|
+
|
|
283
|
+
column.columns = groupingColumnDef.columns
|
|
284
|
+
? recurseColumns(groupingColumnDef.columns, column, depth + 1)
|
|
265
285
|
: []
|
|
266
286
|
|
|
267
287
|
return column
|
|
@@ -267,16 +267,16 @@ export const RowSelection: TableFeature = {
|
|
|
267
267
|
// },
|
|
268
268
|
|
|
269
269
|
getIsAllRowsSelected: () => {
|
|
270
|
-
const
|
|
270
|
+
const preGroupedFlatRows = table.getFilteredRowModel().flatRows
|
|
271
271
|
const { rowSelection } = table.getState()
|
|
272
272
|
|
|
273
273
|
let isAllRowsSelected = Boolean(
|
|
274
|
-
|
|
274
|
+
preGroupedFlatRows.length && Object.keys(rowSelection).length
|
|
275
275
|
)
|
|
276
276
|
|
|
277
277
|
if (isAllRowsSelected) {
|
|
278
278
|
if (
|
|
279
|
-
|
|
279
|
+
preGroupedFlatRows.some(
|
|
280
280
|
row => row.getCanSelect() && !rowSelection[row.id]
|
|
281
281
|
)
|
|
282
282
|
) {
|
|
@@ -309,7 +309,7 @@ export const RowSelection: TableFeature = {
|
|
|
309
309
|
).length
|
|
310
310
|
return (
|
|
311
311
|
totalSelected > 0 &&
|
|
312
|
-
totalSelected < table.
|
|
312
|
+
totalSelected < table.getFilteredRowModel().flatRows.length
|
|
313
313
|
)
|
|
314
314
|
},
|
|
315
315
|
|
package/src/types.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { CoreOptions, CoreTableState, CoreInstance } from './core/table'
|
|
2
|
-
import { CoreColumn, CoreColumnDef } from './core/column'
|
|
3
2
|
import {
|
|
4
3
|
VisibilityInstance,
|
|
5
4
|
VisibilityTableState,
|
|
@@ -21,7 +20,12 @@ import {
|
|
|
21
20
|
ColumnPinningRow,
|
|
22
21
|
ColumnPinningTableState,
|
|
23
22
|
} from './features/Pinning'
|
|
24
|
-
import {
|
|
23
|
+
import {
|
|
24
|
+
CoreHeader,
|
|
25
|
+
CoreHeaderGroup,
|
|
26
|
+
HeaderContext,
|
|
27
|
+
HeadersInstance,
|
|
28
|
+
} from './core/headers'
|
|
25
29
|
import {
|
|
26
30
|
FilterFn,
|
|
27
31
|
FiltersColumn,
|
|
@@ -75,8 +79,9 @@ import {
|
|
|
75
79
|
RowSelectionTableState,
|
|
76
80
|
} from './features/RowSelection'
|
|
77
81
|
import { CoreRow } from './core/row'
|
|
78
|
-
import { PartialKeys } from './utils'
|
|
79
|
-
import { CoreCell } from './core/cell'
|
|
82
|
+
import { DeepKeys, PartialKeys, UnionToIntersection } from './utils'
|
|
83
|
+
import { CellContext, CoreCell } from './core/cell'
|
|
84
|
+
import { CoreColumn } from './core/column'
|
|
80
85
|
|
|
81
86
|
export interface TableMeta<TData extends RowData> {}
|
|
82
87
|
export interface ColumnMeta<TData extends RowData, TValue> {}
|
|
@@ -171,18 +176,97 @@ export type ColumnDefTemplate<TProps extends object> =
|
|
|
171
176
|
| string
|
|
172
177
|
| ((props: TProps) => any)
|
|
173
178
|
|
|
174
|
-
export type
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
+
export type StringOrTemplateHeader<TData, TValue> =
|
|
180
|
+
| string
|
|
181
|
+
| ColumnDefTemplate<HeaderContext<TData, TValue>>
|
|
182
|
+
|
|
183
|
+
type StringHeaderIdentifier = {
|
|
184
|
+
header: string
|
|
185
|
+
id?: string
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
type IdIdentifier<TData extends RowData, TValue> = {
|
|
189
|
+
id: string
|
|
190
|
+
header?: StringOrTemplateHeader<TData, TValue>
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
type ColumnIdentifiers<TData extends RowData, TValue> =
|
|
194
|
+
| IdIdentifier<TData, TValue>
|
|
195
|
+
| StringHeaderIdentifier
|
|
196
|
+
|
|
197
|
+
//
|
|
198
|
+
|
|
199
|
+
export type ColumnDefBase<TData extends RowData, TValue = unknown> = {
|
|
200
|
+
footer?: ColumnDefTemplate<HeaderContext<TData, TValue>>
|
|
201
|
+
cell?: ColumnDefTemplate<CellContext<TData, TValue>>
|
|
202
|
+
meta?: ColumnMeta<TData, TValue>
|
|
203
|
+
} & VisibilityColumnDef &
|
|
179
204
|
ColumnPinningColumnDef &
|
|
180
205
|
FiltersColumnDef<TData> &
|
|
181
206
|
SortingColumnDef<TData> &
|
|
182
207
|
GroupingColumnDef<TData, TValue> &
|
|
183
208
|
ColumnSizingColumnDef
|
|
184
209
|
|
|
185
|
-
|
|
210
|
+
//
|
|
211
|
+
|
|
212
|
+
export type IdentifiedColumnDef<
|
|
213
|
+
TData extends RowData,
|
|
214
|
+
TValue = unknown
|
|
215
|
+
> = ColumnDefBase<TData, TValue> & {
|
|
216
|
+
id?: string
|
|
217
|
+
header?: StringOrTemplateHeader<TData, TValue>
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export type DisplayColumnDef<
|
|
221
|
+
TData extends RowData,
|
|
222
|
+
TValue = unknown
|
|
223
|
+
> = ColumnDefBase<TData, TValue> & ColumnIdentifiers<TData, TValue>
|
|
224
|
+
|
|
225
|
+
export type GroupColumnDef<
|
|
226
|
+
TData extends RowData,
|
|
227
|
+
TValue = unknown
|
|
228
|
+
> = ColumnDefBase<TData, TValue> &
|
|
229
|
+
ColumnIdentifiers<TData, TValue> & {
|
|
230
|
+
columns?: ColumnDef<TData, any>[]
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export type AccessorFnColumnDef<
|
|
234
|
+
TData extends RowData,
|
|
235
|
+
TValue = unknown
|
|
236
|
+
> = ColumnDefBase<TData, TValue> &
|
|
237
|
+
ColumnIdentifiers<TData, TValue> & {
|
|
238
|
+
accessorFn: AccessorFn<TData, TValue>
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
export type AccessorKeyColumnDef<TData extends RowData, TValue = unknown> = {
|
|
242
|
+
id?: string
|
|
243
|
+
} & ColumnIdentifiers<TData, TValue> &
|
|
244
|
+
ColumnDefBase<TData, TValue> & {
|
|
245
|
+
accessorKey: DeepKeys<TData>
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
export type AccessorColumnDef<TData extends RowData, TValue = unknown> =
|
|
249
|
+
| AccessorKeyColumnDef<TData, TValue>
|
|
250
|
+
| AccessorFnColumnDef<TData, TValue>
|
|
251
|
+
|
|
252
|
+
//
|
|
253
|
+
|
|
254
|
+
export type ColumnDef<TData extends RowData, TValue = unknown> =
|
|
255
|
+
| DisplayColumnDef<TData, TValue>
|
|
256
|
+
| GroupColumnDef<TData, TValue>
|
|
257
|
+
| AccessorColumnDef<TData, TValue>
|
|
258
|
+
|
|
259
|
+
export type ColumnDefResolved<
|
|
260
|
+
TData extends RowData,
|
|
261
|
+
TValue = unknown
|
|
262
|
+
> = Partial<UnionToIntersection<ColumnDef<TData, TValue>>> & {
|
|
263
|
+
accessorKey?: string
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export type Column<TData extends RowData, TValue = unknown> = CoreColumn<
|
|
267
|
+
TData,
|
|
268
|
+
TValue
|
|
269
|
+
> &
|
|
186
270
|
ColumnVisibilityColumn &
|
|
187
271
|
ColumnPinningColumn &
|
|
188
272
|
FiltersColumn<TData> &
|