@tanstack/table-core 8.0.0-alpha.9 → 8.0.0-beta.2
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 +120 -0
- package/build/cjs/aggregationFns.js.map +1 -0
- package/build/cjs/core/cell.js +40 -0
- package/build/cjs/core/cell.js.map +1 -0
- package/build/cjs/core/column.js +88 -0
- package/build/cjs/core/column.js.map +1 -0
- package/build/cjs/core/headers.js +403 -0
- package/build/cjs/core/headers.js.map +1 -0
- package/build/cjs/core/instance.js +255 -0
- package/build/cjs/core/instance.js.map +1 -0
- package/build/cjs/core/row.js +77 -0
- package/build/cjs/core/row.js.map +1 -0
- package/build/cjs/createTable.js +36 -29
- package/build/cjs/createTable.js.map +1 -1
- package/build/cjs/features/ColumnSizing.js +157 -189
- package/build/cjs/features/ColumnSizing.js.map +1 -1
- package/build/cjs/features/Expanding.js +103 -155
- package/build/cjs/features/Expanding.js.map +1 -1
- package/build/cjs/features/Filters.js +155 -304
- package/build/cjs/features/Filters.js.map +1 -1
- package/build/cjs/features/Grouping.js +97 -157
- package/build/cjs/features/Grouping.js.map +1 -1
- package/build/cjs/features/Ordering.js +30 -41
- package/build/cjs/features/Ordering.js.map +1 -1
- package/build/cjs/features/Pagination.js +102 -105
- package/build/cjs/features/Pagination.js.map +1 -1
- package/build/cjs/features/Pinning.js +131 -89
- package/build/cjs/features/Pinning.js.map +1 -1
- package/build/cjs/features/RowSelection.js +138 -267
- package/build/cjs/features/RowSelection.js.map +1 -1
- package/build/cjs/features/Sorting.js +82 -167
- package/build/cjs/features/Sorting.js.map +1 -1
- package/build/cjs/features/Visibility.js +69 -115
- package/build/cjs/features/Visibility.js.map +1 -1
- package/build/cjs/filterFns.js +107 -0
- package/build/cjs/filterFns.js.map +1 -0
- package/build/cjs/index.js +36 -23
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/sortingFns.js +124 -0
- package/build/cjs/sortingFns.js.map +1 -0
- package/build/cjs/utils/filterRowsUtils.js +117 -0
- package/build/cjs/utils/filterRowsUtils.js.map +1 -0
- package/build/cjs/utils/getCoreRowModel.js +79 -0
- package/build/cjs/utils/getCoreRowModel.js.map +1 -0
- package/build/cjs/utils/getExpandedRowModel.js +57 -0
- package/build/cjs/utils/getExpandedRowModel.js.map +1 -0
- package/build/cjs/utils/getFacetedMinMaxValues.js +54 -0
- package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -0
- package/build/cjs/utils/getFacetedRowModel.js +50 -0
- package/build/cjs/utils/getFacetedRowModel.js.map +1 -0
- package/build/cjs/utils/getFacetedUniqueValues.js +48 -0
- package/build/cjs/utils/getFacetedUniqueValues.js.map +1 -0
- package/build/cjs/utils/getFilteredRowModel.js +139 -0
- package/build/cjs/utils/getFilteredRowModel.js.map +1 -0
- package/build/cjs/utils/getGroupedRowModel.js +161 -0
- package/build/cjs/utils/getGroupedRowModel.js.map +1 -0
- package/build/cjs/utils/getPaginationRowModel.js +61 -0
- package/build/cjs/utils/getPaginationRowModel.js.map +1 -0
- package/build/cjs/utils/getSortedRowModel.js +110 -0
- package/build/cjs/utils/getSortedRowModel.js.map +1 -0
- package/build/cjs/utils.js +38 -107
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +2976 -3853
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +586 -408
- package/build/types/aggregationFns.d.ts +13 -0
- package/build/types/core/cell.d.ts +9 -0
- package/build/types/core/column.d.ts +40 -0
- package/build/types/core/headers.d.ts +46 -0
- package/build/types/core/instance.d.ts +57 -0
- package/build/types/core/row.d.ts +15 -0
- package/build/types/createTable.d.ts +47 -26
- package/build/types/features/ColumnSizing.d.ts +32 -44
- package/build/types/features/Expanding.d.ts +15 -26
- package/build/types/features/Filters.d.ts +64 -63
- package/build/types/features/Grouping.d.ts +32 -46
- package/build/types/features/Ordering.d.ts +7 -10
- package/build/types/features/Pagination.d.ts +16 -15
- package/build/types/features/Pinning.d.ts +16 -17
- package/build/types/features/RowSelection.d.ts +13 -33
- package/build/types/features/Sorting.d.ts +25 -44
- package/build/types/features/Visibility.d.ts +16 -25
- package/build/types/filterFns.d.ts +13 -0
- package/build/types/index.d.ts +16 -10
- package/build/types/sortingFns.d.ts +11 -0
- package/build/types/types.d.ts +37 -122
- package/build/types/utils/filterRowsUtils.d.ts +4 -0
- package/build/types/utils/getCoreRowModel.d.ts +2 -0
- package/build/types/utils/getExpandedRowModel.d.ts +7 -0
- package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
- package/build/types/utils/getFacetedRowModel.d.ts +2 -0
- package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
- package/build/types/utils/getFilteredRowModel.d.ts +2 -0
- package/build/types/utils/getGroupedRowModel.d.ts +2 -0
- package/build/types/utils/getPaginationRowModel.d.ts +4 -0
- package/build/types/utils/getSortedRowModel.d.ts +2 -0
- package/build/types/utils.d.ts +7 -11
- package/build/umd/index.development.js +3024 -3893
- 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 +9 -10
- package/src/aggregationFns.ts +123 -0
- package/src/core/cell.ts +48 -0
- package/src/core/column.ts +147 -0
- package/src/core/headers.ts +575 -0
- package/src/core/instance.ts +359 -0
- package/src/core/row.ts +85 -0
- package/src/createTable.ts +188 -0
- package/src/features/ColumnSizing.ts +170 -185
- package/src/features/Expanding.ts +120 -194
- package/src/features/Filters.ts +299 -381
- package/src/features/Grouping.ts +158 -220
- package/src/features/Ordering.ts +24 -25
- package/src/features/Pagination.ts +88 -73
- package/src/features/Pinning.ts +186 -63
- package/src/features/RowSelection.ts +107 -245
- package/src/features/Sorting.ts +125 -225
- package/src/features/Visibility.ts +116 -132
- package/src/filterFns.ts +135 -0
- package/src/index.ts +29 -0
- package/src/{sortTypes.ts → sortingFns.ts} +63 -85
- package/src/types.ts +62 -168
- package/src/utils/filterRowsUtils.ts +112 -0
- package/src/utils/getCoreRowModel.ts +84 -0
- package/src/utils/getExpandedRowModel.ts +54 -0
- package/src/utils/getFacetedMinMaxValues.ts +40 -0
- package/src/utils/getFacetedRowModel.ts +50 -0
- package/src/utils/getFacetedUniqueValues.ts +37 -0
- package/src/utils/getFilteredRowModel.ts +159 -0
- package/src/utils/getGroupedRowModel.ts +175 -0
- package/src/utils/getPaginationRowModel.ts +48 -0
- package/src/utils/getSortedRowModel.ts +116 -0
- package/src/utils.ts +126 -0
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
- package/build/cjs/aggregationTypes.js +0 -130
- package/build/cjs/aggregationTypes.js.map +0 -1
- package/build/cjs/core.js +0 -545
- package/build/cjs/core.js.map +0 -1
- package/build/cjs/features/Headers.js +0 -630
- package/build/cjs/features/Headers.js.map +0 -1
- package/build/cjs/filterTypes.js +0 -172
- package/build/cjs/filterTypes.js.map +0 -1
- package/build/cjs/sortTypes.js +0 -122
- package/build/cjs/sortTypes.js.map +0 -1
- package/build/cjs/types.js +0 -22
- package/build/cjs/types.js.map +0 -1
- package/build/cjs/utils/columnFilterRowsFn.js +0 -131
- package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
- package/build/cjs/utils/expandRowsFn.js +0 -38
- package/build/cjs/utils/expandRowsFn.js.map +0 -1
- package/build/cjs/utils/globalFilterRowsFn.js +0 -101
- package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
- package/build/cjs/utils/groupRowsFn.js +0 -155
- package/build/cjs/utils/groupRowsFn.js.map +0 -1
- package/build/cjs/utils/paginateRowsFn.js +0 -44
- package/build/cjs/utils/paginateRowsFn.js.map +0 -1
- package/build/cjs/utils/sortRowsFn.js +0 -94
- package/build/cjs/utils/sortRowsFn.js.map +0 -1
- package/build/types/aggregationTypes.d.ts +0 -22
- package/build/types/core.d.ts +0 -105
- package/build/types/features/Headers.d.ts +0 -43
- package/build/types/filterTypes.d.ts +0 -50
- package/build/types/sortTypes.d.ts +0 -18
- package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
- package/build/types/utils/expandRowsFn.d.ts +0 -2
- package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
- package/build/types/utils/groupRowsFn.d.ts +0 -2
- package/build/types/utils/paginateRowsFn.d.ts +0 -2
- package/build/types/utils/sortRowsFn.d.ts +0 -2
- package/src/.DS_Store +0 -0
- package/src/aggregationTypes.ts +0 -115
- package/src/core.tsx +0 -763
- package/src/createTable.tsx +0 -137
- package/src/features/Headers.ts +0 -747
- package/src/filterTypes.ts +0 -188
- package/src/index.tsx +0 -23
- package/src/utils/columnFilterRowsFn.ts +0 -113
- package/src/utils/expandRowsFn.ts +0 -30
- package/src/utils/globalFilterRowsFn.ts +0 -89
- package/src/utils/groupRowsFn.ts +0 -170
- package/src/utils/paginateRowsFn.ts +0 -28
- package/src/utils/sortRowsFn.ts +0 -95
- package/src/utils.tsx +0 -221
package/src/features/Grouping.ts
CHANGED
|
@@ -1,331 +1,255 @@
|
|
|
1
|
-
import React, { MouseEvent, TouchEvent } from 'react'
|
|
2
1
|
import { RowModel } from '..'
|
|
3
|
-
import {
|
|
2
|
+
import { BuiltInAggregationFn, aggregationFns } from '../aggregationFns'
|
|
3
|
+
import { TableFeature } from '../core/instance'
|
|
4
4
|
import {
|
|
5
5
|
Cell,
|
|
6
6
|
Column,
|
|
7
|
-
Getter,
|
|
8
7
|
OnChangeFn,
|
|
9
|
-
PropGetterValue,
|
|
10
8
|
TableInstance,
|
|
11
9
|
Row,
|
|
12
10
|
Updater,
|
|
13
|
-
|
|
11
|
+
Renderable,
|
|
12
|
+
TableGenerics,
|
|
14
13
|
} from '../types'
|
|
15
|
-
import {
|
|
16
|
-
functionalUpdate,
|
|
17
|
-
isFunction,
|
|
18
|
-
makeStateUpdater,
|
|
19
|
-
memo,
|
|
20
|
-
Overwrite,
|
|
21
|
-
propGetter,
|
|
22
|
-
} from '../utils'
|
|
14
|
+
import { isFunction, makeStateUpdater, Overwrite } from '../utils'
|
|
23
15
|
|
|
24
16
|
export type GroupingState = string[]
|
|
25
17
|
|
|
26
|
-
export type
|
|
27
|
-
|
|
28
|
-
|
|
18
|
+
export type GroupingTableState = {
|
|
19
|
+
grouping: GroupingState
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type AggregationFn<TGenerics extends TableGenerics> = (
|
|
23
|
+
columnId: string,
|
|
24
|
+
leafRows: Row<TGenerics>[],
|
|
25
|
+
childRows: Row<TGenerics>[]
|
|
29
26
|
) => any
|
|
30
27
|
|
|
31
|
-
export type
|
|
28
|
+
export type CustomAggregationFns<TGenerics extends TableGenerics> = Record<
|
|
32
29
|
string,
|
|
33
30
|
AggregationFn<TGenerics>
|
|
34
31
|
>
|
|
35
32
|
|
|
36
|
-
export type
|
|
33
|
+
export type AggregationFnOption<TGenerics extends TableGenerics> =
|
|
37
34
|
| 'auto'
|
|
38
|
-
|
|
|
35
|
+
| BuiltInAggregationFn
|
|
39
36
|
| keyof TGenerics['AggregationFns']
|
|
40
37
|
| AggregationFn<TGenerics>
|
|
41
38
|
|
|
42
|
-
export type
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
39
|
+
export type GroupingColumnDef<TGenerics extends TableGenerics> = {
|
|
40
|
+
aggregationFn?: AggregationFnOption<Overwrite<TGenerics, { Value: any }>>
|
|
41
|
+
aggregatedCell?: Renderable<
|
|
42
|
+
TGenerics,
|
|
43
|
+
{
|
|
44
|
+
instance: TableInstance<TGenerics>
|
|
45
|
+
row: Row<TGenerics>
|
|
46
|
+
column: Column<TGenerics>
|
|
47
|
+
cell: Cell<TGenerics>
|
|
48
|
+
getValue: () => TGenerics['Value']
|
|
49
|
+
}
|
|
50
|
+
>
|
|
50
51
|
enableGrouping?: boolean
|
|
51
|
-
defaultCanGroup?: boolean
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
export type GroupingColumn<TGenerics extends
|
|
55
|
-
|
|
54
|
+
export type GroupingColumn<TGenerics extends TableGenerics> = {
|
|
55
|
+
aggregationFn?: AggregationFnOption<Overwrite<TGenerics, { Value: any }>>
|
|
56
56
|
getCanGroup: () => boolean
|
|
57
57
|
getIsGrouped: () => boolean
|
|
58
58
|
getGroupedIndex: () => number
|
|
59
59
|
toggleGrouping: () => void
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
) =>
|
|
60
|
+
getToggleGroupingHandler: () => () => void
|
|
61
|
+
getAutoAggregationFn: () => AggregationFn<TGenerics> | undefined
|
|
62
|
+
getAggregationFn: () => AggregationFn<TGenerics> | undefined
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
export type GroupingRow = {
|
|
66
66
|
groupingColumnId?: string
|
|
67
67
|
groupingValue?: any
|
|
68
68
|
getIsGrouped: () => boolean
|
|
69
|
+
_groupingValuesCache: Record<string, any>
|
|
69
70
|
}
|
|
70
71
|
|
|
71
|
-
export type GroupingCell = {
|
|
72
|
+
export type GroupingCell<TGenerics extends TableGenerics> = {
|
|
72
73
|
getIsGrouped: () => boolean
|
|
73
74
|
getIsPlaceholder: () => boolean
|
|
74
75
|
getIsAggregated: () => boolean
|
|
76
|
+
renderAggregatedCell: () => string | null | TGenerics['Rendered']
|
|
75
77
|
}
|
|
76
78
|
|
|
77
79
|
export type ColumnDefaultOptions = {
|
|
78
80
|
// Column
|
|
79
81
|
onGroupingChange: OnChangeFn<GroupingState>
|
|
80
|
-
autoResetGrouping: boolean
|
|
81
82
|
enableGrouping: boolean
|
|
82
83
|
}
|
|
83
84
|
|
|
84
|
-
export type GroupingOptions<TGenerics extends
|
|
85
|
-
|
|
85
|
+
export type GroupingOptions<TGenerics extends TableGenerics> = {
|
|
86
|
+
manualGrouping?: boolean
|
|
87
|
+
aggregationFns?: TGenerics['AggregationFns']
|
|
86
88
|
onGroupingChange?: OnChangeFn<GroupingState>
|
|
87
|
-
autoResetGrouping?: boolean
|
|
88
89
|
enableGrouping?: boolean
|
|
89
|
-
|
|
90
|
-
groupRowsFn?: (
|
|
91
|
-
instance: TableInstance<TGenerics>,
|
|
92
|
-
rowModel: RowModel<TGenerics>
|
|
93
|
-
) => RowModel<TGenerics>
|
|
94
|
-
|
|
90
|
+
getGroupedRowModel?: (instance: TableInstance<any>) => () => RowModel<any>
|
|
95
91
|
groupedColumnMode?: false | 'reorder' | 'remove'
|
|
96
92
|
}
|
|
97
93
|
|
|
98
94
|
export type GroupingColumnMode = false | 'reorder' | 'remove'
|
|
99
95
|
|
|
100
|
-
export type
|
|
101
|
-
title?: string
|
|
102
|
-
onClick?: (event: MouseEvent | TouchEvent) => void
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
export type GroupingInstance<TGenerics extends PartialGenerics> = {
|
|
106
|
-
_notifyGroupingReset: () => void
|
|
107
|
-
getColumnAutoAggregationFn: (
|
|
108
|
-
columnId: string
|
|
109
|
-
) => AggregationFn<TGenerics> | undefined
|
|
110
|
-
getColumnAggregationFn: (
|
|
111
|
-
columnId: string
|
|
112
|
-
) => AggregationFn<TGenerics> | undefined
|
|
96
|
+
export type GroupingInstance<TGenerics extends TableGenerics> = {
|
|
113
97
|
setGrouping: (updater: Updater<GroupingState>) => void
|
|
114
|
-
resetGrouping: () => void
|
|
115
|
-
toggleColumnGrouping: (columnId: string) => void
|
|
116
|
-
getColumnCanGroup: (columnId: string) => boolean
|
|
117
|
-
getColumnIsGrouped: (columnId: string) => boolean
|
|
118
|
-
getColumnGroupedIndex: (columnId: string) => number
|
|
119
|
-
getToggleGroupingProps: <TGetter extends Getter<ToggleGroupingProps>>(
|
|
120
|
-
columnId: string,
|
|
121
|
-
userProps?: TGetter
|
|
122
|
-
) => undefined | PropGetterValue<ToggleGroupingProps, TGetter>
|
|
123
|
-
getRowIsGrouped: (rowId: string) => boolean
|
|
98
|
+
resetGrouping: (defaultState?: boolean) => void
|
|
124
99
|
getPreGroupedRowModel: () => RowModel<TGenerics>
|
|
125
100
|
getGroupedRowModel: () => RowModel<TGenerics>
|
|
101
|
+
_getGroupedRowModel?: () => RowModel<TGenerics>
|
|
126
102
|
}
|
|
127
103
|
|
|
128
104
|
//
|
|
129
105
|
|
|
130
|
-
export const Grouping = {
|
|
131
|
-
|
|
132
|
-
TGenerics extends
|
|
106
|
+
export const Grouping: TableFeature = {
|
|
107
|
+
getDefaultColumnDef: <
|
|
108
|
+
TGenerics extends TableGenerics
|
|
133
109
|
>(): GroupingColumnDef<TGenerics> => {
|
|
134
110
|
return {
|
|
135
|
-
|
|
111
|
+
aggregationFn: 'auto',
|
|
136
112
|
}
|
|
137
113
|
},
|
|
138
114
|
|
|
139
|
-
getInitialState: (): GroupingTableState => {
|
|
115
|
+
getInitialState: (state): GroupingTableState => {
|
|
140
116
|
return {
|
|
141
117
|
grouping: [],
|
|
118
|
+
...state,
|
|
142
119
|
}
|
|
143
120
|
},
|
|
144
121
|
|
|
145
|
-
getDefaultOptions: <TGenerics extends
|
|
122
|
+
getDefaultOptions: <TGenerics extends TableGenerics>(
|
|
146
123
|
instance: TableInstance<TGenerics>
|
|
147
124
|
): GroupingOptions<TGenerics> => {
|
|
148
125
|
return {
|
|
149
126
|
onGroupingChange: makeStateUpdater('grouping', instance),
|
|
150
|
-
autoResetGrouping: true,
|
|
151
127
|
groupedColumnMode: 'reorder',
|
|
152
128
|
}
|
|
153
129
|
},
|
|
154
130
|
|
|
155
|
-
createColumn: <TGenerics extends
|
|
131
|
+
createColumn: <TGenerics extends TableGenerics>(
|
|
156
132
|
column: Column<TGenerics>,
|
|
157
133
|
instance: TableInstance<TGenerics>
|
|
158
134
|
): GroupingColumn<TGenerics> => {
|
|
159
135
|
return {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
instance.getToggleGroupingProps(column.id, userProps),
|
|
167
|
-
}
|
|
168
|
-
},
|
|
136
|
+
toggleGrouping: () => {
|
|
137
|
+
instance.setGrouping(old => {
|
|
138
|
+
// Find any existing grouping for this column
|
|
139
|
+
if (old?.includes(column.id)) {
|
|
140
|
+
return old.filter(d => d !== column.id)
|
|
141
|
+
}
|
|
169
142
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
let registered = false
|
|
143
|
+
return [...(old ?? []), column.id]
|
|
144
|
+
})
|
|
145
|
+
},
|
|
174
146
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
147
|
+
getCanGroup: () => {
|
|
148
|
+
return (
|
|
149
|
+
column.columnDef.enableGrouping ??
|
|
150
|
+
true ??
|
|
151
|
+
instance.options.enableGrouping ??
|
|
152
|
+
true ??
|
|
153
|
+
!!column.accessorFn
|
|
154
|
+
)
|
|
155
|
+
},
|
|
181
156
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
157
|
+
getIsGrouped: () => {
|
|
158
|
+
return instance.getState().grouping?.includes(column.id)
|
|
159
|
+
},
|
|
185
160
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
)
|
|
190
|
-
|
|
161
|
+
getGroupedIndex: () => instance.getState().grouping?.indexOf(column.id),
|
|
162
|
+
|
|
163
|
+
getToggleGroupingHandler: () => {
|
|
164
|
+
const canGroup = column.getCanGroup()
|
|
165
|
+
|
|
166
|
+
return () => {
|
|
167
|
+
if (!canGroup) return
|
|
168
|
+
column.toggleGrouping()
|
|
191
169
|
}
|
|
192
170
|
},
|
|
193
|
-
|
|
171
|
+
getAutoAggregationFn: () => {
|
|
194
172
|
const firstRow = instance.getCoreRowModel().flatRows[0]
|
|
195
173
|
|
|
196
|
-
const value = firstRow?.
|
|
174
|
+
const value = firstRow?.getValue(column.id)
|
|
197
175
|
|
|
198
176
|
if (typeof value === 'number') {
|
|
199
|
-
return
|
|
177
|
+
return aggregationFns.sum
|
|
200
178
|
}
|
|
201
179
|
|
|
202
180
|
if (Object.prototype.toString.call(value) === '[object Date]') {
|
|
203
|
-
return
|
|
181
|
+
return aggregationFns.extent
|
|
204
182
|
}
|
|
205
183
|
|
|
206
|
-
return
|
|
184
|
+
return aggregationFns.count
|
|
207
185
|
},
|
|
208
|
-
|
|
209
|
-
const
|
|
210
|
-
const userAggregationTypes = instance.options.aggregationTypes
|
|
186
|
+
getAggregationFn: () => {
|
|
187
|
+
const userAggregationFns = instance.options.aggregationFns
|
|
211
188
|
|
|
212
189
|
if (!column) {
|
|
213
190
|
throw new Error()
|
|
214
191
|
}
|
|
215
192
|
|
|
216
|
-
return isFunction(column.
|
|
217
|
-
? column.
|
|
218
|
-
: column.
|
|
219
|
-
?
|
|
220
|
-
: (
|
|
221
|
-
column.
|
|
193
|
+
return isFunction(column.aggregationFn)
|
|
194
|
+
? column.aggregationFn
|
|
195
|
+
: column.aggregationFn === 'auto'
|
|
196
|
+
? column.getAutoAggregationFn()
|
|
197
|
+
: (userAggregationFns as Record<string, any>)?.[
|
|
198
|
+
column.aggregationFn as string
|
|
222
199
|
] ??
|
|
223
|
-
(
|
|
224
|
-
column.
|
|
200
|
+
(aggregationFns[
|
|
201
|
+
column.aggregationFn as BuiltInAggregationFn
|
|
225
202
|
] as AggregationFn<TGenerics>)
|
|
226
203
|
},
|
|
204
|
+
}
|
|
205
|
+
},
|
|
227
206
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
toggleColumnGrouping: columnId => {
|
|
235
|
-
instance.setGrouping(old => {
|
|
236
|
-
// Find any existing grouping for this column
|
|
237
|
-
if (old?.includes(columnId)) {
|
|
238
|
-
return old.filter(d => d !== columnId)
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
return [...(old ?? []), columnId]
|
|
242
|
-
})
|
|
243
|
-
},
|
|
244
|
-
|
|
245
|
-
getColumnCanGroup: columnId => {
|
|
246
|
-
const column = instance.getColumn(columnId)
|
|
247
|
-
|
|
248
|
-
if (!column) {
|
|
249
|
-
throw new Error()
|
|
250
|
-
}
|
|
207
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
208
|
+
instance: TableInstance<TGenerics>
|
|
209
|
+
): GroupingInstance<TGenerics> => {
|
|
210
|
+
return {
|
|
211
|
+
setGrouping: updater => instance.options.onGroupingChange?.(updater),
|
|
251
212
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
instance.
|
|
255
|
-
column.defaultCanGroup ??
|
|
256
|
-
!!column.accessorFn
|
|
213
|
+
resetGrouping: defaultState => {
|
|
214
|
+
instance.setGrouping(
|
|
215
|
+
defaultState ? [] : instance.initialState?.grouping ?? []
|
|
257
216
|
)
|
|
258
217
|
},
|
|
259
218
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
},
|
|
270
|
-
|
|
271
|
-
getToggleGroupingProps: (columnId, userProps) => {
|
|
272
|
-
const column = instance.getColumn(columnId)
|
|
273
|
-
|
|
274
|
-
const canGroup = column.getCanGroup()
|
|
219
|
+
getPreGroupedRowModel: () => instance.getSortedRowModel(),
|
|
220
|
+
getGroupedRowModel: () => {
|
|
221
|
+
if (
|
|
222
|
+
!instance._getGroupedRowModel &&
|
|
223
|
+
instance.options.getGroupedRowModel
|
|
224
|
+
) {
|
|
225
|
+
instance._getGroupedRowModel =
|
|
226
|
+
instance.options.getGroupedRowModel(instance)
|
|
227
|
+
}
|
|
275
228
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
onClick: canGroup
|
|
279
|
-
? (e: MouseEvent | TouchEvent) => {
|
|
280
|
-
e.persist()
|
|
281
|
-
column.toggleGrouping?.()
|
|
282
|
-
}
|
|
283
|
-
: undefined,
|
|
229
|
+
if (instance.options.manualGrouping || !instance._getGroupedRowModel) {
|
|
230
|
+
return instance.getPreGroupedRowModel()
|
|
284
231
|
}
|
|
285
232
|
|
|
286
|
-
return
|
|
233
|
+
return instance._getGroupedRowModel()
|
|
287
234
|
},
|
|
288
|
-
|
|
289
|
-
getRowIsGrouped: rowId => !!instance.getRow(rowId)?.groupingColumnId,
|
|
290
|
-
|
|
291
|
-
getPreGroupedRowModel: () => instance.getSortedRowModel(),
|
|
292
|
-
getGroupedRowModel: memo(
|
|
293
|
-
() => [
|
|
294
|
-
instance.getState().grouping,
|
|
295
|
-
instance.getSortedRowModel(),
|
|
296
|
-
instance.options.groupRowsFn,
|
|
297
|
-
],
|
|
298
|
-
(grouping, rowModel, groupRowsFn) => {
|
|
299
|
-
if (!groupRowsFn || !grouping.length) {
|
|
300
|
-
return rowModel
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
return groupRowsFn(instance, rowModel)
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
key: 'getGroupedRowModel',
|
|
307
|
-
debug: () => instance.options.debugAll ?? instance.options.debugTable,
|
|
308
|
-
onChange: () => instance._notifyExpandedReset(),
|
|
309
|
-
}
|
|
310
|
-
),
|
|
311
235
|
}
|
|
312
236
|
},
|
|
313
237
|
|
|
314
|
-
createRow: <TGenerics extends
|
|
315
|
-
row: Row<TGenerics
|
|
316
|
-
instance: TableInstance<TGenerics>
|
|
238
|
+
createRow: <TGenerics extends TableGenerics>(
|
|
239
|
+
row: Row<TGenerics>
|
|
317
240
|
): GroupingRow => {
|
|
318
241
|
return {
|
|
319
|
-
getIsGrouped: () =>
|
|
242
|
+
getIsGrouped: () => !!row.groupingColumnId,
|
|
243
|
+
_groupingValuesCache: {},
|
|
320
244
|
}
|
|
321
245
|
},
|
|
322
246
|
|
|
323
|
-
createCell: <TGenerics extends
|
|
324
|
-
cell: Cell<TGenerics
|
|
247
|
+
createCell: <TGenerics extends TableGenerics>(
|
|
248
|
+
cell: Cell<TGenerics>,
|
|
325
249
|
column: Column<TGenerics>,
|
|
326
250
|
row: Row<TGenerics>,
|
|
327
|
-
|
|
328
|
-
): GroupingCell => {
|
|
251
|
+
instance: TableInstance<TGenerics>
|
|
252
|
+
): GroupingCell<TGenerics> => {
|
|
329
253
|
return {
|
|
330
254
|
getIsGrouped: () =>
|
|
331
255
|
column.getIsGrouped() && column.id === row.groupingColumnId,
|
|
@@ -334,30 +258,44 @@ export const Grouping = {
|
|
|
334
258
|
!cell.getIsGrouped() &&
|
|
335
259
|
!cell.getIsPlaceholder() &&
|
|
336
260
|
row.subRows?.length > 1,
|
|
261
|
+
renderAggregatedCell: () => {
|
|
262
|
+
const template =
|
|
263
|
+
column.columnDef.aggregatedCell ?? column.columnDef.cell
|
|
264
|
+
|
|
265
|
+
return template
|
|
266
|
+
? instance._render(template, {
|
|
267
|
+
instance,
|
|
268
|
+
column,
|
|
269
|
+
row,
|
|
270
|
+
cell,
|
|
271
|
+
getValue: cell.getValue,
|
|
272
|
+
})
|
|
273
|
+
: null
|
|
274
|
+
},
|
|
337
275
|
}
|
|
338
276
|
},
|
|
277
|
+
}
|
|
339
278
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
279
|
+
export function orderColumns<TGenerics extends TableGenerics>(
|
|
280
|
+
leafColumns: Column<TGenerics>[],
|
|
281
|
+
grouping: string[],
|
|
282
|
+
groupedColumnMode?: GroupingColumnMode
|
|
283
|
+
) {
|
|
284
|
+
if (!grouping?.length || !groupedColumnMode) {
|
|
285
|
+
return leafColumns
|
|
286
|
+
}
|
|
348
287
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
288
|
+
const nonGroupingColumns = leafColumns.filter(
|
|
289
|
+
col => !grouping.includes(col.id)
|
|
290
|
+
)
|
|
352
291
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
292
|
+
if (groupedColumnMode === 'remove') {
|
|
293
|
+
return nonGroupingColumns
|
|
294
|
+
}
|
|
356
295
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
296
|
+
const groupingColumns = grouping
|
|
297
|
+
.map(g => leafColumns.find(col => col.id === g)!)
|
|
298
|
+
.filter(Boolean)
|
|
360
299
|
|
|
361
|
-
|
|
362
|
-
},
|
|
300
|
+
return [...groupingColumns, ...nonGroupingColumns]
|
|
363
301
|
}
|
package/src/features/Ordering.ts
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { makeStateUpdater, memo } from '../utils'
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
TableInstance,
|
|
5
5
|
OnChangeFn,
|
|
6
6
|
Updater,
|
|
7
7
|
Column,
|
|
8
|
-
|
|
8
|
+
TableGenerics,
|
|
9
9
|
} from '../types'
|
|
10
10
|
|
|
11
|
-
import { Grouping } from './Grouping'
|
|
12
|
-
|
|
13
|
-
export type ColumnOrderState = string[]
|
|
11
|
+
import { Grouping, orderColumns } from './Grouping'
|
|
12
|
+
import { TableFeature } from '../core/instance'
|
|
14
13
|
|
|
15
14
|
export type ColumnOrderTableState = {
|
|
16
15
|
columnOrder: ColumnOrderState
|
|
17
16
|
}
|
|
18
17
|
|
|
18
|
+
export type ColumnOrderState = string[]
|
|
19
|
+
|
|
19
20
|
export type ColumnOrderOptions = {
|
|
20
21
|
onColumnOrderChange?: OnChangeFn<ColumnOrderState>
|
|
21
22
|
}
|
|
@@ -24,22 +25,25 @@ export type ColumnOrderDefaultOptions = {
|
|
|
24
25
|
onColumnOrderChange: OnChangeFn<ColumnOrderState>
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
export type ColumnOrderInstance<TGenerics extends
|
|
28
|
+
export type ColumnOrderInstance<TGenerics extends TableGenerics> = {
|
|
28
29
|
setColumnOrder: (updater: Updater<ColumnOrderState>) => void
|
|
29
|
-
resetColumnOrder: () => void
|
|
30
|
-
|
|
30
|
+
resetColumnOrder: (defaultState?: boolean) => void
|
|
31
|
+
_getOrderColumnsFn: () => (
|
|
32
|
+
columns: Column<TGenerics>[]
|
|
33
|
+
) => Column<TGenerics>[]
|
|
31
34
|
}
|
|
32
35
|
|
|
33
36
|
//
|
|
34
37
|
|
|
35
|
-
export const Ordering = {
|
|
36
|
-
getInitialState: (): ColumnOrderTableState => {
|
|
38
|
+
export const Ordering: TableFeature = {
|
|
39
|
+
getInitialState: (state): ColumnOrderTableState => {
|
|
37
40
|
return {
|
|
38
41
|
columnOrder: [],
|
|
42
|
+
...state,
|
|
39
43
|
}
|
|
40
44
|
},
|
|
41
45
|
|
|
42
|
-
getDefaultOptions: <TGenerics extends
|
|
46
|
+
getDefaultOptions: <TGenerics extends TableGenerics>(
|
|
43
47
|
instance: TableInstance<TGenerics>
|
|
44
48
|
): ColumnOrderDefaultOptions => {
|
|
45
49
|
return {
|
|
@@ -47,19 +51,18 @@ export const Ordering = {
|
|
|
47
51
|
}
|
|
48
52
|
},
|
|
49
53
|
|
|
50
|
-
|
|
54
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
51
55
|
instance: TableInstance<TGenerics>
|
|
52
56
|
): ColumnOrderInstance<TGenerics> => {
|
|
53
57
|
return {
|
|
54
58
|
setColumnOrder: updater =>
|
|
55
|
-
instance.options.onColumnOrderChange?.(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
instance.setColumnOrder(instance.initialState.columnOrder ?? [])
|
|
59
|
+
instance.options.onColumnOrderChange?.(updater),
|
|
60
|
+
resetColumnOrder: defaultState => {
|
|
61
|
+
instance.setColumnOrder(
|
|
62
|
+
defaultState ? [] : instance.initialState.columnOrder ?? []
|
|
63
|
+
)
|
|
61
64
|
},
|
|
62
|
-
|
|
65
|
+
_getOrderColumnsFn: memo(
|
|
63
66
|
() => [
|
|
64
67
|
instance.getState().columnOrder,
|
|
65
68
|
instance.getState().grouping,
|
|
@@ -96,14 +99,10 @@ export const Ordering = {
|
|
|
96
99
|
orderedColumns = [...orderedColumns, ...columnsCopy]
|
|
97
100
|
}
|
|
98
101
|
|
|
99
|
-
return
|
|
100
|
-
orderedColumns,
|
|
101
|
-
grouping,
|
|
102
|
-
groupedColumnMode
|
|
103
|
-
)
|
|
102
|
+
return orderColumns(orderedColumns, grouping, groupedColumnMode)
|
|
104
103
|
},
|
|
105
104
|
{
|
|
106
|
-
key: 'getOrderColumnsFn',
|
|
105
|
+
key: process.env.NODE_ENV === 'development' && 'getOrderColumnsFn',
|
|
107
106
|
// debug: () => instance.options.debugAll ?? instance.options.debugTable,
|
|
108
107
|
}
|
|
109
108
|
),
|