@tanstack/table-core 8.1.2 → 8.2.1
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/aggregationFns.js.map +1 -1
- package/build/cjs/core/cell.js.map +1 -1
- package/build/cjs/core/column.js.map +1 -1
- package/build/cjs/core/headers.js.map +1 -1
- package/build/cjs/core/row.js.map +1 -1
- package/build/cjs/core/table.js +2 -2
- package/build/cjs/core/table.js.map +1 -1
- package/build/cjs/features/ColumnSizing.js.map +1 -1
- package/build/cjs/features/Filters.js.map +1 -1
- package/build/cjs/features/Grouping.js.map +1 -1
- package/build/cjs/features/Ordering.js.map +1 -1
- package/build/cjs/features/Pinning.js.map +1 -1
- package/build/cjs/features/Sorting.js.map +1 -1
- package/build/cjs/features/Visibility.js.map +1 -1
- package/build/cjs/filterFns.js.map +1 -1
- package/build/cjs/utils/getCoreRowModel.js.map +1 -1
- package/build/cjs/utils/getFacetedMinMaxValues.js +1 -3
- package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -1
- package/build/cjs/utils/getGroupedRowModel.js +1 -1
- package/build/cjs/utils/getGroupedRowModel.js.map +1 -1
- package/build/cjs/utils.js +2 -2
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +6 -8
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +308 -308
- package/build/types/index.d.ts +94 -91
- package/build/umd/index.development.js +6 -8
- 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/aggregationFns.ts +8 -11
- package/src/core/cell.ts +14 -14
- package/src/core/column.ts +58 -47
- package/src/core/headers.ts +32 -32
- package/src/core/row.ts +9 -9
- package/src/core/table.ts +11 -10
- package/src/features/ColumnSizing.ts +5 -5
- package/src/features/Filters.ts +9 -14
- package/src/features/Grouping.ts +15 -10
- package/src/features/Ordering.ts +4 -2
- package/src/features/Pinning.ts +10 -10
- package/src/features/Sorting.ts +2 -2
- package/src/features/Visibility.ts +11 -11
- package/src/filterFns.ts +13 -7
- package/src/types.ts +16 -12
- package/src/utils/getCoreRowModel.ts +1 -1
- package/src/utils/getFacetedMinMaxValues.ts +1 -1
- package/src/utils/getGroupedRowModel.ts +7 -1
- package/src/utils.ts +6 -3
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/table-core",
|
|
3
3
|
"author": "Tanner Linsley",
|
|
4
|
-
"version": "8.1
|
|
4
|
+
"version": "8.2.1",
|
|
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/aggregationFns.ts
CHANGED
|
@@ -3,20 +3,17 @@ import { AggregationFn } from './features/Grouping'
|
|
|
3
3
|
const sum: AggregationFn<any> = (columnId, _leafRows, childRows) => {
|
|
4
4
|
// It's faster to just add the aggregations together instead of
|
|
5
5
|
// process leaf nodes individually
|
|
6
|
-
return childRows.reduce(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
},
|
|
11
|
-
0
|
|
12
|
-
)
|
|
6
|
+
return childRows.reduce((sum, next) => {
|
|
7
|
+
const nextValue = next.getValue(columnId)
|
|
8
|
+
return sum + (typeof nextValue === 'number' ? nextValue : 0)
|
|
9
|
+
}, 0)
|
|
13
10
|
}
|
|
14
11
|
|
|
15
12
|
const min: AggregationFn<any> = (columnId, _leafRows, childRows) => {
|
|
16
13
|
let min: number | undefined
|
|
17
14
|
|
|
18
15
|
childRows.forEach(row => {
|
|
19
|
-
const value = row.getValue(columnId)
|
|
16
|
+
const value = row.getValue<number>(columnId)
|
|
20
17
|
|
|
21
18
|
if (
|
|
22
19
|
value != null &&
|
|
@@ -33,7 +30,7 @@ const max: AggregationFn<any> = (columnId, _leafRows, childRows) => {
|
|
|
33
30
|
let max: number | undefined
|
|
34
31
|
|
|
35
32
|
childRows.forEach(row => {
|
|
36
|
-
const value = row.getValue(columnId)
|
|
33
|
+
const value = row.getValue<number>(columnId)
|
|
37
34
|
if (
|
|
38
35
|
value != null &&
|
|
39
36
|
(max! < value || (max === undefined && value >= value))
|
|
@@ -50,7 +47,7 @@ const extent: AggregationFn<any> = (columnId, _leafRows, childRows) => {
|
|
|
50
47
|
let max: number | undefined
|
|
51
48
|
|
|
52
49
|
childRows.forEach(row => {
|
|
53
|
-
const value = row.getValue(columnId)
|
|
50
|
+
const value = row.getValue<number>(columnId)
|
|
54
51
|
if (value != null) {
|
|
55
52
|
if (min === undefined) {
|
|
56
53
|
if (value >= value) min = max = value
|
|
@@ -69,7 +66,7 @@ const mean: AggregationFn<any> = (columnId, leafRows) => {
|
|
|
69
66
|
let sum = 0
|
|
70
67
|
|
|
71
68
|
leafRows.forEach(row => {
|
|
72
|
-
let value = row.getValue(columnId)
|
|
69
|
+
let value = row.getValue<number>(columnId)
|
|
73
70
|
if (value != null && (value = +value) >= value) {
|
|
74
71
|
++count, (sum += value)
|
|
75
72
|
}
|
package/src/core/cell.ts
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
import { RowData, Cell, Column, Row, Table } from '../types'
|
|
2
2
|
|
|
3
|
-
export type CoreCell<TData extends RowData> = {
|
|
3
|
+
export type CoreCell<TData extends RowData, TValue> = {
|
|
4
4
|
id: string
|
|
5
|
-
getValue: () =>
|
|
6
|
-
renderValue: () =>
|
|
5
|
+
getValue: <TTValue = TValue>() => TTValue
|
|
6
|
+
renderValue: <TTValue = TValue>() => TTValue | null
|
|
7
7
|
row: Row<TData>
|
|
8
|
-
column: Column<TData>
|
|
8
|
+
column: Column<TData, TValue>
|
|
9
9
|
getContext: () => {
|
|
10
10
|
table: Table<TData>
|
|
11
|
-
column: Column<TData>
|
|
11
|
+
column: Column<TData, TValue>
|
|
12
12
|
row: Row<TData>
|
|
13
|
-
cell: Cell<TData>
|
|
14
|
-
getValue: () =>
|
|
15
|
-
renderValue: () =>
|
|
13
|
+
cell: Cell<TData, TValue>
|
|
14
|
+
getValue: <TTValue = TValue>() => TTValue
|
|
15
|
+
renderValue: <TTValue = TValue>() => TTValue | null
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
export function createCell<TData extends RowData>(
|
|
19
|
+
export function createCell<TData extends RowData, TValue>(
|
|
20
20
|
table: Table<TData>,
|
|
21
21
|
row: Row<TData>,
|
|
22
|
-
column: Column<TData>,
|
|
22
|
+
column: Column<TData, TValue>,
|
|
23
23
|
columnId: string
|
|
24
24
|
) {
|
|
25
25
|
const getRenderValue = () =>
|
|
26
26
|
cell.getValue() ?? table.options.renderFallbackValue
|
|
27
27
|
|
|
28
|
-
const cell: CoreCell<TData> = {
|
|
28
|
+
const cell: CoreCell<TData, TValue> = {
|
|
29
29
|
id: `${row.id}_${column.id}`,
|
|
30
30
|
row,
|
|
31
31
|
column,
|
|
@@ -35,7 +35,7 @@ export function createCell<TData extends RowData>(
|
|
|
35
35
|
table,
|
|
36
36
|
column,
|
|
37
37
|
row,
|
|
38
|
-
cell: cell as Cell<TData>,
|
|
38
|
+
cell: cell as Cell<TData, TValue>,
|
|
39
39
|
getValue: cell.getValue,
|
|
40
40
|
renderValue: cell.renderValue,
|
|
41
41
|
}),
|
|
@@ -45,7 +45,7 @@ export function createCell<TData extends RowData>(
|
|
|
45
45
|
Object.assign(
|
|
46
46
|
cell,
|
|
47
47
|
feature.createCell?.(
|
|
48
|
-
cell as Cell<TData>,
|
|
48
|
+
cell as Cell<TData, TValue>,
|
|
49
49
|
column,
|
|
50
50
|
row as Row<TData>,
|
|
51
51
|
table
|
|
@@ -53,5 +53,5 @@ export function createCell<TData extends RowData>(
|
|
|
53
53
|
)
|
|
54
54
|
}, {})
|
|
55
55
|
|
|
56
|
-
return cell as Cell<TData>
|
|
56
|
+
return cell as Cell<TData, TValue>
|
|
57
57
|
}
|
package/src/core/column.ts
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
-
Cell,
|
|
3
2
|
Column,
|
|
4
|
-
Header,
|
|
5
|
-
TableGenerics,
|
|
6
3
|
Table,
|
|
7
|
-
Row,
|
|
8
4
|
AccessorFn,
|
|
9
5
|
ColumnDef,
|
|
10
6
|
ColumnDefTemplate,
|
|
11
7
|
RowData,
|
|
8
|
+
ColumnMeta,
|
|
12
9
|
} from '../types'
|
|
13
10
|
import { memo, UnionToIntersection } from '../utils'
|
|
14
11
|
import { CoreCell } from './cell'
|
|
@@ -16,64 +13,78 @@ import { CoreHeader } from './headers'
|
|
|
16
13
|
|
|
17
14
|
export type CoreColumnDefType = 'data' | 'display' | 'group'
|
|
18
15
|
|
|
19
|
-
type CoreColumnDefBase<TData extends RowData> = {
|
|
16
|
+
type CoreColumnDefBase<TData extends RowData, TValue> = {
|
|
20
17
|
columns?: ColumnDef<TData>[]
|
|
21
|
-
header?: ColumnDefTemplate<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
header?: ColumnDefTemplate<
|
|
19
|
+
ReturnType<CoreHeader<TData, TValue>['getContext']>
|
|
20
|
+
>
|
|
21
|
+
footer?: ColumnDefTemplate<
|
|
22
|
+
ReturnType<CoreHeader<TData, TValue>['getContext']>
|
|
23
|
+
>
|
|
24
|
+
cell?: ColumnDefTemplate<ReturnType<CoreCell<TData, TValue>['getContext']>>
|
|
25
|
+
meta?: ColumnMeta
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
type CoreColumnDefDisplay<TData extends RowData> = CoreColumnDefBase<
|
|
28
|
+
type CoreColumnDefDisplay<TData extends RowData, TValue> = CoreColumnDefBase<
|
|
29
|
+
TData,
|
|
30
|
+
TValue
|
|
31
|
+
> & {
|
|
28
32
|
id: string
|
|
29
33
|
}
|
|
30
34
|
|
|
31
|
-
type CoreColumnDefDisplayWithStringHeader<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
type CoreColumnDefDisplayWithStringHeader<
|
|
36
|
+
TData extends RowData,
|
|
37
|
+
TValue
|
|
38
|
+
> = CoreColumnDefBase<TData, TValue> & {
|
|
39
|
+
header: string
|
|
40
|
+
id?: string
|
|
41
|
+
}
|
|
36
42
|
|
|
37
|
-
type CoreColumnDefAccessorFn<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
type CoreColumnDefAccessorFn<
|
|
44
|
+
TData extends RowData,
|
|
45
|
+
TValue = unknown
|
|
46
|
+
> = CoreColumnDefBase<TData, TValue> & {
|
|
47
|
+
accessorFn: AccessorFn<TData, TValue>
|
|
48
|
+
id: string
|
|
49
|
+
// accessorKey?: never
|
|
50
|
+
}
|
|
43
51
|
|
|
44
|
-
type CoreColumnDefAccessorKey<
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
type CoreColumnDefAccessorKey<
|
|
53
|
+
TData extends RowData,
|
|
54
|
+
TValue
|
|
55
|
+
> = CoreColumnDefBase<TData, TValue> & {
|
|
56
|
+
accessorKey: keyof TData
|
|
57
|
+
id?: string
|
|
58
|
+
// accessorFn?: never
|
|
59
|
+
}
|
|
50
60
|
|
|
51
|
-
export type CoreColumnDef<TData extends RowData> =
|
|
52
|
-
| CoreColumnDefDisplay<TData>
|
|
53
|
-
| CoreColumnDefDisplayWithStringHeader<TData>
|
|
61
|
+
export type CoreColumnDef<TData extends RowData, TValue> =
|
|
62
|
+
| CoreColumnDefDisplay<TData, TValue>
|
|
63
|
+
| CoreColumnDefDisplayWithStringHeader<TData, TValue>
|
|
54
64
|
| CoreColumnDefAccessorFn<TData>
|
|
55
|
-
| CoreColumnDefAccessorKey<TData>
|
|
65
|
+
| CoreColumnDefAccessorKey<TData, TValue>
|
|
56
66
|
|
|
57
|
-
export type CoreColumnDefResolved<
|
|
58
|
-
|
|
59
|
-
|
|
67
|
+
export type CoreColumnDefResolved<
|
|
68
|
+
TData extends RowData,
|
|
69
|
+
TValue = unknown
|
|
70
|
+
> = Partial<UnionToIntersection<CoreColumnDef<TData, TValue>>>
|
|
60
71
|
|
|
61
|
-
export type CoreColumn<TData extends RowData> = {
|
|
72
|
+
export type CoreColumn<TData extends RowData, TValue> = {
|
|
62
73
|
id: string
|
|
63
74
|
depth: number
|
|
64
|
-
accessorFn?: AccessorFn<TData>
|
|
75
|
+
accessorFn?: AccessorFn<TData, TValue>
|
|
65
76
|
columnDef: ColumnDef<TData>
|
|
66
|
-
columns: Column<TData>[]
|
|
67
|
-
parent?: Column<TData>
|
|
68
|
-
getFlatColumns: () => Column<TData>[]
|
|
69
|
-
getLeafColumns: () => Column<TData>[]
|
|
77
|
+
columns: Column<TData, TValue>[]
|
|
78
|
+
parent?: Column<TData, TValue>
|
|
79
|
+
getFlatColumns: () => Column<TData, TValue>[]
|
|
80
|
+
getLeafColumns: () => Column<TData, TValue>[]
|
|
70
81
|
}
|
|
71
82
|
|
|
72
|
-
export function createColumn<TData extends RowData>(
|
|
83
|
+
export function createColumn<TData extends RowData, TValue>(
|
|
73
84
|
table: Table<TData>,
|
|
74
85
|
columnDef: ColumnDef<TData>,
|
|
75
86
|
depth: number,
|
|
76
|
-
parent?: Column<TData>
|
|
87
|
+
parent?: Column<TData, TValue>
|
|
77
88
|
) {
|
|
78
89
|
const defaultColumn = table._getDefaultColumnDef()
|
|
79
90
|
|
|
@@ -94,7 +105,7 @@ export function createColumn<TData extends RowData>(
|
|
|
94
105
|
if (resolvedColumnDef.accessorFn) {
|
|
95
106
|
accessorFn = resolvedColumnDef.accessorFn
|
|
96
107
|
} else if (resolvedColumnDef.accessorKey) {
|
|
97
|
-
accessorFn = (originalRow
|
|
108
|
+
accessorFn = (originalRow: TData) =>
|
|
98
109
|
(originalRow as any)[resolvedColumnDef.accessorKey]
|
|
99
110
|
}
|
|
100
111
|
|
|
@@ -109,7 +120,7 @@ export function createColumn<TData extends RowData>(
|
|
|
109
120
|
throw new Error()
|
|
110
121
|
}
|
|
111
122
|
|
|
112
|
-
let column: CoreColumn<TData> = {
|
|
123
|
+
let column: CoreColumn<TData, any> = {
|
|
113
124
|
id: `${String(id)}`,
|
|
114
125
|
accessorFn,
|
|
115
126
|
parent: parent as any,
|
|
@@ -120,7 +131,7 @@ export function createColumn<TData extends RowData>(
|
|
|
120
131
|
() => [true],
|
|
121
132
|
() => {
|
|
122
133
|
return [
|
|
123
|
-
column as Column<TData>,
|
|
134
|
+
column as Column<TData, TValue>,
|
|
124
135
|
...column.columns?.flatMap(d => d.getFlatColumns()),
|
|
125
136
|
]
|
|
126
137
|
},
|
|
@@ -140,7 +151,7 @@ export function createColumn<TData extends RowData>(
|
|
|
140
151
|
return orderColumns(leafColumns)
|
|
141
152
|
}
|
|
142
153
|
|
|
143
|
-
return [column as Column<TData>]
|
|
154
|
+
return [column as Column<TData, TValue>]
|
|
144
155
|
},
|
|
145
156
|
{
|
|
146
157
|
key: process.env.NODE_ENV === 'production' && 'column.getLeafColumns',
|
|
@@ -154,5 +165,5 @@ export function createColumn<TData extends RowData>(
|
|
|
154
165
|
}, column)
|
|
155
166
|
|
|
156
167
|
// Yes, we have to convert table to uknown, because we know more than the compiler here.
|
|
157
|
-
return column as Column<TData>
|
|
168
|
+
return column as Column<TData, TValue>
|
|
158
169
|
}
|
package/src/core/headers.ts
CHANGED
|
@@ -5,25 +5,25 @@ import { TableFeature } from './table'
|
|
|
5
5
|
export type CoreHeaderGroup<TData extends RowData> = {
|
|
6
6
|
id: string
|
|
7
7
|
depth: number
|
|
8
|
-
headers: Header<TData>[]
|
|
8
|
+
headers: Header<TData, unknown>[]
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
export type CoreHeader<TData extends RowData> = {
|
|
11
|
+
export type CoreHeader<TData extends RowData, TValue> = {
|
|
12
12
|
id: string
|
|
13
13
|
index: number
|
|
14
14
|
depth: number
|
|
15
|
-
column: Column<TData>
|
|
15
|
+
column: Column<TData, TValue>
|
|
16
16
|
headerGroup: HeaderGroup<TData>
|
|
17
|
-
subHeaders: Header<TData>[]
|
|
17
|
+
subHeaders: Header<TData, TValue>[]
|
|
18
18
|
colSpan: number
|
|
19
19
|
rowSpan: number
|
|
20
|
-
getLeafHeaders: () => Header<TData>[]
|
|
20
|
+
getLeafHeaders: () => Header<TData, unknown>[]
|
|
21
21
|
isPlaceholder: boolean
|
|
22
22
|
placeholderId?: string
|
|
23
23
|
getContext: () => {
|
|
24
24
|
table: Table<TData>
|
|
25
|
-
header: Header<TData>
|
|
26
|
-
column: Column<TData>
|
|
25
|
+
header: Header<TData, TValue>
|
|
26
|
+
column: Column<TData, TValue>
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
|
|
@@ -38,22 +38,22 @@ export type HeadersInstance<TData extends RowData> = {
|
|
|
38
38
|
getCenterFooterGroups: () => HeaderGroup<TData>[]
|
|
39
39
|
getRightFooterGroups: () => HeaderGroup<TData>[]
|
|
40
40
|
|
|
41
|
-
getFlatHeaders: () => Header<TData>[]
|
|
42
|
-
getLeftFlatHeaders: () => Header<TData>[]
|
|
43
|
-
getCenterFlatHeaders: () => Header<TData>[]
|
|
44
|
-
getRightFlatHeaders: () => Header<TData>[]
|
|
41
|
+
getFlatHeaders: () => Header<TData, unknown>[]
|
|
42
|
+
getLeftFlatHeaders: () => Header<TData, unknown>[]
|
|
43
|
+
getCenterFlatHeaders: () => Header<TData, unknown>[]
|
|
44
|
+
getRightFlatHeaders: () => Header<TData, unknown>[]
|
|
45
45
|
|
|
46
|
-
getLeafHeaders: () => Header<TData>[]
|
|
47
|
-
getLeftLeafHeaders: () => Header<TData>[]
|
|
48
|
-
getCenterLeafHeaders: () => Header<TData>[]
|
|
49
|
-
getRightLeafHeaders: () => Header<TData>[]
|
|
46
|
+
getLeafHeaders: () => Header<TData, unknown>[]
|
|
47
|
+
getLeftLeafHeaders: () => Header<TData, unknown>[]
|
|
48
|
+
getCenterLeafHeaders: () => Header<TData, unknown>[]
|
|
49
|
+
getRightLeafHeaders: () => Header<TData, unknown>[]
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
//
|
|
53
53
|
|
|
54
|
-
function createHeader<TData extends RowData>(
|
|
54
|
+
function createHeader<TData extends RowData, TValue>(
|
|
55
55
|
table: Table<TData>,
|
|
56
|
-
column: Column<TData>,
|
|
56
|
+
column: Column<TData, TValue>,
|
|
57
57
|
options: {
|
|
58
58
|
id?: string
|
|
59
59
|
isPlaceholder?: boolean
|
|
@@ -64,7 +64,7 @@ function createHeader<TData extends RowData>(
|
|
|
64
64
|
) {
|
|
65
65
|
const id = options.id ?? column.id
|
|
66
66
|
|
|
67
|
-
let header: CoreHeader<TData> = {
|
|
67
|
+
let header: CoreHeader<TData, TValue> = {
|
|
68
68
|
id,
|
|
69
69
|
column,
|
|
70
70
|
index: options.index,
|
|
@@ -75,23 +75,23 @@ function createHeader<TData extends RowData>(
|
|
|
75
75
|
colSpan: 0,
|
|
76
76
|
rowSpan: 0,
|
|
77
77
|
headerGroup: null!,
|
|
78
|
-
getLeafHeaders: (): Header<TData>[] => {
|
|
79
|
-
const leafHeaders:
|
|
78
|
+
getLeafHeaders: (): Header<TData, unknown>[] => {
|
|
79
|
+
const leafHeaders: Header<TData, unknown>[] = []
|
|
80
80
|
|
|
81
|
-
const recurseHeader = (h: CoreHeader<TData>) => {
|
|
81
|
+
const recurseHeader = (h: CoreHeader<TData, unknown>) => {
|
|
82
82
|
if (h.subHeaders && h.subHeaders.length) {
|
|
83
83
|
h.subHeaders.map(recurseHeader)
|
|
84
84
|
}
|
|
85
|
-
leafHeaders.push(h)
|
|
85
|
+
leafHeaders.push(h as Header<TData, unknown>)
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
recurseHeader(header)
|
|
89
89
|
|
|
90
|
-
return leafHeaders
|
|
90
|
+
return leafHeaders
|
|
91
91
|
},
|
|
92
92
|
getContext: () => ({
|
|
93
93
|
table,
|
|
94
|
-
header: header as Header<TData>,
|
|
94
|
+
header: header as Header<TData, TValue>,
|
|
95
95
|
column,
|
|
96
96
|
}),
|
|
97
97
|
}
|
|
@@ -100,7 +100,7 @@ function createHeader<TData extends RowData>(
|
|
|
100
100
|
Object.assign(header, feature.createHeader?.(header, table))
|
|
101
101
|
})
|
|
102
102
|
|
|
103
|
-
return header as Header<TData>
|
|
103
|
+
return header as Header<TData, TValue>
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
export const Headers: TableFeature = {
|
|
@@ -387,8 +387,8 @@ export const Headers: TableFeature = {
|
|
|
387
387
|
}
|
|
388
388
|
|
|
389
389
|
export function buildHeaderGroups<TData extends RowData>(
|
|
390
|
-
allColumns: Column<TData>[],
|
|
391
|
-
columnsToGroup: Column<TData>[],
|
|
390
|
+
allColumns: Column<TData, unknown>[],
|
|
391
|
+
columnsToGroup: Column<TData, unknown>[],
|
|
392
392
|
table: Table<TData>,
|
|
393
393
|
headerFamily?: 'center' | 'left' | 'right'
|
|
394
394
|
) {
|
|
@@ -400,7 +400,7 @@ export function buildHeaderGroups<TData extends RowData>(
|
|
|
400
400
|
|
|
401
401
|
let maxDepth = 0
|
|
402
402
|
|
|
403
|
-
const findMaxDepth = (columns: Column<TData>[], depth = 1) => {
|
|
403
|
+
const findMaxDepth = (columns: Column<TData, unknown>[], depth = 1) => {
|
|
404
404
|
maxDepth = Math.max(maxDepth, depth)
|
|
405
405
|
|
|
406
406
|
columns
|
|
@@ -417,7 +417,7 @@ export function buildHeaderGroups<TData extends RowData>(
|
|
|
417
417
|
let headerGroups: HeaderGroup<TData>[] = []
|
|
418
418
|
|
|
419
419
|
const createHeaderGroup = (
|
|
420
|
-
headersToGroup: Header<TData>[],
|
|
420
|
+
headersToGroup: Header<TData, unknown>[],
|
|
421
421
|
depth: number
|
|
422
422
|
) => {
|
|
423
423
|
// The header group we are creating
|
|
@@ -428,7 +428,7 @@ export function buildHeaderGroups<TData extends RowData>(
|
|
|
428
428
|
}
|
|
429
429
|
|
|
430
430
|
// The parent columns we're going to scan next
|
|
431
|
-
const pendingParentHeaders: Header<TData>[] = []
|
|
431
|
+
const pendingParentHeaders: Header<TData, unknown>[] = []
|
|
432
432
|
|
|
433
433
|
// Scan each column for parents
|
|
434
434
|
headersToGroup.forEach(headerToGroup => {
|
|
@@ -438,7 +438,7 @@ export function buildHeaderGroups<TData extends RowData>(
|
|
|
438
438
|
|
|
439
439
|
const isLeafHeader = headerToGroup.column.depth === headerGroup.depth
|
|
440
440
|
|
|
441
|
-
let column: Column<TData>
|
|
441
|
+
let column: Column<TData, unknown>
|
|
442
442
|
let isPlaceholder = false
|
|
443
443
|
|
|
444
444
|
if (isLeafHeader && headerToGroup.column.parent) {
|
|
@@ -504,7 +504,7 @@ export function buildHeaderGroups<TData extends RowData>(
|
|
|
504
504
|
// })
|
|
505
505
|
|
|
506
506
|
const recurseHeadersForSpans = (
|
|
507
|
-
headers: Header<TData>[]
|
|
507
|
+
headers: Header<TData, unknown>[]
|
|
508
508
|
): { colSpan: number; rowSpan: number }[] => {
|
|
509
509
|
const filteredHeaders = headers.filter(header =>
|
|
510
510
|
header.column.getIsVisible()
|
package/src/core/row.ts
CHANGED
|
@@ -5,22 +5,22 @@ import { createCell } from './cell'
|
|
|
5
5
|
export type CoreRow<TData extends RowData> = {
|
|
6
6
|
id: string
|
|
7
7
|
index: number
|
|
8
|
-
original
|
|
8
|
+
original: TData
|
|
9
9
|
depth: number
|
|
10
|
-
_valuesCache: Record<string,
|
|
11
|
-
getValue: (columnId: string) =>
|
|
12
|
-
renderValue: (columnId: string) =>
|
|
10
|
+
_valuesCache: Record<string, unknown>
|
|
11
|
+
getValue: <TValue>(columnId: string) => TValue
|
|
12
|
+
renderValue: <TValue>(columnId: string) => TValue
|
|
13
13
|
subRows: Row<TData>[]
|
|
14
14
|
getLeafRows: () => Row<TData>[]
|
|
15
15
|
originalSubRows?: TData[]
|
|
16
|
-
getAllCells: () => Cell<TData>[]
|
|
17
|
-
_getAllCellsByColumnId: () => Record<string, Cell<TData>>
|
|
16
|
+
getAllCells: () => Cell<TData, unknown>[]
|
|
17
|
+
_getAllCellsByColumnId: () => Record<string, Cell<TData, unknown>>
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export const createRow = <TData extends RowData>(
|
|
21
21
|
table: Table<TData>,
|
|
22
22
|
id: string,
|
|
23
|
-
original: TData
|
|
23
|
+
original: TData,
|
|
24
24
|
rowIndex: number,
|
|
25
25
|
depth: number,
|
|
26
26
|
subRows?: Row<TData>[]
|
|
@@ -47,7 +47,7 @@ export const createRow = <TData extends RowData>(
|
|
|
47
47
|
rowIndex
|
|
48
48
|
)
|
|
49
49
|
|
|
50
|
-
return row._valuesCache[columnId]
|
|
50
|
+
return row._valuesCache[columnId] as any
|
|
51
51
|
},
|
|
52
52
|
renderValue: columnId =>
|
|
53
53
|
row.getValue(columnId) ?? table.options.renderFallbackValue,
|
|
@@ -72,7 +72,7 @@ export const createRow = <TData extends RowData>(
|
|
|
72
72
|
return allCells.reduce((acc, cell) => {
|
|
73
73
|
acc[cell.column.id] = cell
|
|
74
74
|
return acc
|
|
75
|
-
}, {} as Record<string, Cell<TData>>)
|
|
75
|
+
}, {} as Record<string, Cell<TData, unknown>>)
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
key:
|
package/src/core/table.ts
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
ColumnDef,
|
|
14
14
|
TableOptions,
|
|
15
15
|
RowData,
|
|
16
|
+
TableMeta,
|
|
16
17
|
} from '../types'
|
|
17
18
|
|
|
18
19
|
//
|
|
@@ -75,7 +76,7 @@ export type CoreOptions<TData extends RowData> = {
|
|
|
75
76
|
defaultOptions: TableOptions<TData>,
|
|
76
77
|
options: Partial<TableOptions<TData>>
|
|
77
78
|
) => TableOptions<TData>
|
|
78
|
-
meta?:
|
|
79
|
+
meta?: TableMeta
|
|
79
80
|
getCoreRowModel: (table: Table<any>) => () => RowModel<any>
|
|
80
81
|
getSubRows?: (originalRow: TData, index: number) => undefined | TData[]
|
|
81
82
|
getRowId?: (originalRow: TData, index: number, parent?: Row<TData>) => string
|
|
@@ -100,11 +101,11 @@ export type CoreInstance<TData extends RowData> = {
|
|
|
100
101
|
getRow: (id: string) => Row<TData>
|
|
101
102
|
_getDefaultColumnDef: () => Partial<ColumnDef<TData>>
|
|
102
103
|
_getColumnDefs: () => ColumnDef<TData>[]
|
|
103
|
-
_getAllFlatColumnsById: () => Record<string, Column<TData>>
|
|
104
|
-
getAllColumns: () => Column<TData>[]
|
|
105
|
-
getAllFlatColumns: () => Column<TData>[]
|
|
106
|
-
getAllLeafColumns: () => Column<TData>[]
|
|
107
|
-
getColumn: (columnId: string) => Column<TData>
|
|
104
|
+
_getAllFlatColumnsById: () => Record<string, Column<TData, unknown>>
|
|
105
|
+
getAllColumns: () => Column<TData, unknown>[]
|
|
106
|
+
getAllFlatColumns: () => Column<TData, unknown>[]
|
|
107
|
+
getAllLeafColumns: () => Column<TData, unknown>[]
|
|
108
|
+
getColumn: (columnId: string) => Column<TData, unknown>
|
|
108
109
|
}
|
|
109
110
|
|
|
110
111
|
export function createTable<TData extends RowData>(
|
|
@@ -231,7 +232,7 @@ export function createTable<TData extends RowData>(
|
|
|
231
232
|
return {
|
|
232
233
|
header: props => props.header.column.id,
|
|
233
234
|
footer: props => props.header.column.id,
|
|
234
|
-
cell: props =>
|
|
235
|
+
cell: props => props.renderValue<any>()?.toString?.() ?? null,
|
|
235
236
|
...table._features.reduce((obj, feature) => {
|
|
236
237
|
return Object.assign(obj, feature.getDefaultColumnDef?.())
|
|
237
238
|
}, {}),
|
|
@@ -251,9 +252,9 @@ export function createTable<TData extends RowData>(
|
|
|
251
252
|
columnDefs => {
|
|
252
253
|
const recurseColumns = (
|
|
253
254
|
columnDefs: ColumnDef<TData>[],
|
|
254
|
-
parent?: Column<TData>,
|
|
255
|
+
parent?: Column<TData, unknown>,
|
|
255
256
|
depth = 0
|
|
256
|
-
): Column<TData>[] => {
|
|
257
|
+
): Column<TData, unknown>[] => {
|
|
257
258
|
return columnDefs.map(columnDef => {
|
|
258
259
|
const column = createColumn(table, columnDef, depth, parent)
|
|
259
260
|
|
|
@@ -292,7 +293,7 @@ export function createTable<TData extends RowData>(
|
|
|
292
293
|
return flatColumns.reduce((acc, column) => {
|
|
293
294
|
acc[column.id] = column
|
|
294
295
|
return acc
|
|
295
|
-
}, {} as Record<string, Column<TData>>)
|
|
296
|
+
}, {} as Record<string, Column<TData, unknown>>)
|
|
296
297
|
},
|
|
297
298
|
{
|
|
298
299
|
key: process.env.NODE_ENV === 'development' && 'getAllFlatColumnsById',
|
|
@@ -115,8 +115,8 @@ export const ColumnSizing: TableFeature = {
|
|
|
115
115
|
}
|
|
116
116
|
},
|
|
117
117
|
|
|
118
|
-
createColumn: <TData extends RowData>(
|
|
119
|
-
column: Column<TData>,
|
|
118
|
+
createColumn: <TData extends RowData, TValue>(
|
|
119
|
+
column: Column<TData, TValue>,
|
|
120
120
|
table: Table<TData>
|
|
121
121
|
): ColumnSizingColumn => {
|
|
122
122
|
return {
|
|
@@ -167,15 +167,15 @@ export const ColumnSizing: TableFeature = {
|
|
|
167
167
|
}
|
|
168
168
|
},
|
|
169
169
|
|
|
170
|
-
createHeader: <TData extends RowData>(
|
|
171
|
-
header: Header<TData>,
|
|
170
|
+
createHeader: <TData extends RowData, TValue>(
|
|
171
|
+
header: Header<TData, TValue>,
|
|
172
172
|
table: Table<TData>
|
|
173
173
|
): ColumnSizingHeader => {
|
|
174
174
|
return {
|
|
175
175
|
getSize: () => {
|
|
176
176
|
let sum = 0
|
|
177
177
|
|
|
178
|
-
const recurse = (header: Header<TData>) => {
|
|
178
|
+
const recurse = (header: Header<TData, TValue>) => {
|
|
179
179
|
if (header.subHeaders.length) {
|
|
180
180
|
header.subHeaders.forEach(recurse)
|
|
181
181
|
} else {
|