@tanstack/table-core 8.0.0-alpha.9 → 8.0.0-beta.0
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/.DS_Store +0 -0
- 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 +361 -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 +122 -194
- package/src/features/Filters.ts +301 -381
- package/src/features/Grouping.ts +160 -220
- package/src/features/Ordering.ts +24 -25
- package/src/features/Pagination.ts +90 -73
- package/src/features/Pinning.ts +186 -63
- package/src/features/RowSelection.ts +107 -245
- package/src/features/Sorting.ts +127 -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/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,257 @@
|
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
rowModel: RowModel<TGenerics>
|
|
93
|
-
) => RowModel<TGenerics>
|
|
94
|
-
|
|
90
|
+
getGroupedRowModel?: (
|
|
91
|
+
instance: TableInstance<TGenerics>
|
|
92
|
+
) => () => RowModel<TGenerics>
|
|
95
93
|
groupedColumnMode?: false | 'reorder' | 'remove'
|
|
96
94
|
}
|
|
97
95
|
|
|
98
96
|
export type GroupingColumnMode = false | 'reorder' | 'remove'
|
|
99
97
|
|
|
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
|
|
98
|
+
export type GroupingInstance<TGenerics extends TableGenerics> = {
|
|
113
99
|
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
|
|
100
|
+
resetGrouping: (defaultState?: boolean) => void
|
|
124
101
|
getPreGroupedRowModel: () => RowModel<TGenerics>
|
|
125
102
|
getGroupedRowModel: () => RowModel<TGenerics>
|
|
103
|
+
_getGroupedRowModel?: () => RowModel<TGenerics>
|
|
126
104
|
}
|
|
127
105
|
|
|
128
106
|
//
|
|
129
107
|
|
|
130
|
-
export const Grouping = {
|
|
131
|
-
|
|
132
|
-
TGenerics extends
|
|
108
|
+
export const Grouping: TableFeature = {
|
|
109
|
+
getDefaultColumnDef: <
|
|
110
|
+
TGenerics extends TableGenerics
|
|
133
111
|
>(): GroupingColumnDef<TGenerics> => {
|
|
134
112
|
return {
|
|
135
|
-
|
|
113
|
+
aggregationFn: 'auto',
|
|
136
114
|
}
|
|
137
115
|
},
|
|
138
116
|
|
|
139
|
-
getInitialState: (): GroupingTableState => {
|
|
117
|
+
getInitialState: (state): GroupingTableState => {
|
|
140
118
|
return {
|
|
141
119
|
grouping: [],
|
|
120
|
+
...state,
|
|
142
121
|
}
|
|
143
122
|
},
|
|
144
123
|
|
|
145
|
-
getDefaultOptions: <TGenerics extends
|
|
124
|
+
getDefaultOptions: <TGenerics extends TableGenerics>(
|
|
146
125
|
instance: TableInstance<TGenerics>
|
|
147
126
|
): GroupingOptions<TGenerics> => {
|
|
148
127
|
return {
|
|
149
128
|
onGroupingChange: makeStateUpdater('grouping', instance),
|
|
150
|
-
autoResetGrouping: true,
|
|
151
129
|
groupedColumnMode: 'reorder',
|
|
152
130
|
}
|
|
153
131
|
},
|
|
154
132
|
|
|
155
|
-
createColumn: <TGenerics extends
|
|
133
|
+
createColumn: <TGenerics extends TableGenerics>(
|
|
156
134
|
column: Column<TGenerics>,
|
|
157
135
|
instance: TableInstance<TGenerics>
|
|
158
136
|
): GroupingColumn<TGenerics> => {
|
|
159
137
|
return {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
instance.getToggleGroupingProps(column.id, userProps),
|
|
167
|
-
}
|
|
168
|
-
},
|
|
138
|
+
toggleGrouping: () => {
|
|
139
|
+
instance.setGrouping(old => {
|
|
140
|
+
// Find any existing grouping for this column
|
|
141
|
+
if (old?.includes(column.id)) {
|
|
142
|
+
return old.filter(d => d !== column.id)
|
|
143
|
+
}
|
|
169
144
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
let registered = false
|
|
145
|
+
return [...(old ?? []), column.id]
|
|
146
|
+
})
|
|
147
|
+
},
|
|
174
148
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
149
|
+
getCanGroup: () => {
|
|
150
|
+
return (
|
|
151
|
+
column.columnDef.enableGrouping ??
|
|
152
|
+
true ??
|
|
153
|
+
instance.options.enableGrouping ??
|
|
154
|
+
true ??
|
|
155
|
+
!!column.accessorFn
|
|
156
|
+
)
|
|
157
|
+
},
|
|
181
158
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
159
|
+
getIsGrouped: () => {
|
|
160
|
+
return instance.getState().grouping?.includes(column.id)
|
|
161
|
+
},
|
|
185
162
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
)
|
|
190
|
-
|
|
163
|
+
getGroupedIndex: () => instance.getState().grouping?.indexOf(column.id),
|
|
164
|
+
|
|
165
|
+
getToggleGroupingHandler: () => {
|
|
166
|
+
const canGroup = column.getCanGroup()
|
|
167
|
+
|
|
168
|
+
return () => {
|
|
169
|
+
if (!canGroup) return
|
|
170
|
+
column.toggleGrouping()
|
|
191
171
|
}
|
|
192
172
|
},
|
|
193
|
-
|
|
173
|
+
getAutoAggregationFn: () => {
|
|
194
174
|
const firstRow = instance.getCoreRowModel().flatRows[0]
|
|
195
175
|
|
|
196
|
-
const value = firstRow?.
|
|
176
|
+
const value = firstRow?.getValue(column.id)
|
|
197
177
|
|
|
198
178
|
if (typeof value === 'number') {
|
|
199
|
-
return
|
|
179
|
+
return aggregationFns.sum
|
|
200
180
|
}
|
|
201
181
|
|
|
202
182
|
if (Object.prototype.toString.call(value) === '[object Date]') {
|
|
203
|
-
return
|
|
183
|
+
return aggregationFns.extent
|
|
204
184
|
}
|
|
205
185
|
|
|
206
|
-
return
|
|
186
|
+
return aggregationFns.count
|
|
207
187
|
},
|
|
208
|
-
|
|
209
|
-
const
|
|
210
|
-
const userAggregationTypes = instance.options.aggregationTypes
|
|
188
|
+
getAggregationFn: () => {
|
|
189
|
+
const userAggregationFns = instance.options.aggregationFns
|
|
211
190
|
|
|
212
191
|
if (!column) {
|
|
213
192
|
throw new Error()
|
|
214
193
|
}
|
|
215
194
|
|
|
216
|
-
return isFunction(column.
|
|
217
|
-
? column.
|
|
218
|
-
: column.
|
|
219
|
-
?
|
|
220
|
-
: (
|
|
221
|
-
column.
|
|
195
|
+
return isFunction(column.aggregationFn)
|
|
196
|
+
? column.aggregationFn
|
|
197
|
+
: column.aggregationFn === 'auto'
|
|
198
|
+
? column.getAutoAggregationFn()
|
|
199
|
+
: (userAggregationFns as Record<string, any>)?.[
|
|
200
|
+
column.aggregationFn as string
|
|
222
201
|
] ??
|
|
223
|
-
(
|
|
224
|
-
column.
|
|
202
|
+
(aggregationFns[
|
|
203
|
+
column.aggregationFn as BuiltInAggregationFn
|
|
225
204
|
] as AggregationFn<TGenerics>)
|
|
226
205
|
},
|
|
206
|
+
}
|
|
207
|
+
},
|
|
227
208
|
|
|
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
|
-
}
|
|
209
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
210
|
+
instance: TableInstance<TGenerics>
|
|
211
|
+
): GroupingInstance<TGenerics> => {
|
|
212
|
+
return {
|
|
213
|
+
setGrouping: updater => instance.options.onGroupingChange?.(updater),
|
|
251
214
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
instance.
|
|
255
|
-
column.defaultCanGroup ??
|
|
256
|
-
!!column.accessorFn
|
|
215
|
+
resetGrouping: defaultState => {
|
|
216
|
+
instance.setGrouping(
|
|
217
|
+
defaultState ? [] : instance.initialState?.grouping ?? []
|
|
257
218
|
)
|
|
258
219
|
},
|
|
259
220
|
|
|
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()
|
|
221
|
+
getPreGroupedRowModel: () => instance.getSortedRowModel(),
|
|
222
|
+
getGroupedRowModel: () => {
|
|
223
|
+
if (
|
|
224
|
+
!instance._getGroupedRowModel &&
|
|
225
|
+
instance.options.getGroupedRowModel
|
|
226
|
+
) {
|
|
227
|
+
instance._getGroupedRowModel =
|
|
228
|
+
instance.options.getGroupedRowModel(instance)
|
|
229
|
+
}
|
|
275
230
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
onClick: canGroup
|
|
279
|
-
? (e: MouseEvent | TouchEvent) => {
|
|
280
|
-
e.persist()
|
|
281
|
-
column.toggleGrouping?.()
|
|
282
|
-
}
|
|
283
|
-
: undefined,
|
|
231
|
+
if (instance.options.manualGrouping || !instance._getGroupedRowModel) {
|
|
232
|
+
return instance.getPreGroupedRowModel()
|
|
284
233
|
}
|
|
285
234
|
|
|
286
|
-
return
|
|
235
|
+
return instance._getGroupedRowModel()
|
|
287
236
|
},
|
|
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
237
|
}
|
|
312
238
|
},
|
|
313
239
|
|
|
314
|
-
createRow: <TGenerics extends
|
|
315
|
-
row: Row<TGenerics
|
|
316
|
-
instance: TableInstance<TGenerics>
|
|
240
|
+
createRow: <TGenerics extends TableGenerics>(
|
|
241
|
+
row: Row<TGenerics>
|
|
317
242
|
): GroupingRow => {
|
|
318
243
|
return {
|
|
319
|
-
getIsGrouped: () =>
|
|
244
|
+
getIsGrouped: () => !!row.groupingColumnId,
|
|
245
|
+
_groupingValuesCache: {},
|
|
320
246
|
}
|
|
321
247
|
},
|
|
322
248
|
|
|
323
|
-
createCell: <TGenerics extends
|
|
324
|
-
cell: Cell<TGenerics
|
|
249
|
+
createCell: <TGenerics extends TableGenerics>(
|
|
250
|
+
cell: Cell<TGenerics>,
|
|
325
251
|
column: Column<TGenerics>,
|
|
326
252
|
row: Row<TGenerics>,
|
|
327
|
-
|
|
328
|
-
): GroupingCell => {
|
|
253
|
+
instance: TableInstance<TGenerics>
|
|
254
|
+
): GroupingCell<TGenerics> => {
|
|
329
255
|
return {
|
|
330
256
|
getIsGrouped: () =>
|
|
331
257
|
column.getIsGrouped() && column.id === row.groupingColumnId,
|
|
@@ -334,30 +260,44 @@ export const Grouping = {
|
|
|
334
260
|
!cell.getIsGrouped() &&
|
|
335
261
|
!cell.getIsPlaceholder() &&
|
|
336
262
|
row.subRows?.length > 1,
|
|
263
|
+
renderAggregatedCell: () => {
|
|
264
|
+
const template =
|
|
265
|
+
column.columnDef.aggregatedCell ?? column.columnDef.cell
|
|
266
|
+
|
|
267
|
+
return template
|
|
268
|
+
? instance._render(template, {
|
|
269
|
+
instance,
|
|
270
|
+
column,
|
|
271
|
+
row,
|
|
272
|
+
cell,
|
|
273
|
+
getValue: cell.getValue,
|
|
274
|
+
})
|
|
275
|
+
: null
|
|
276
|
+
},
|
|
337
277
|
}
|
|
338
278
|
},
|
|
279
|
+
}
|
|
339
280
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
281
|
+
export function orderColumns<TGenerics extends TableGenerics>(
|
|
282
|
+
leafColumns: Column<TGenerics>[],
|
|
283
|
+
grouping: string[],
|
|
284
|
+
groupedColumnMode?: GroupingColumnMode
|
|
285
|
+
) {
|
|
286
|
+
if (!grouping?.length || !groupedColumnMode) {
|
|
287
|
+
return leafColumns
|
|
288
|
+
}
|
|
348
289
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
290
|
+
const nonGroupingColumns = leafColumns.filter(
|
|
291
|
+
col => !grouping.includes(col.id)
|
|
292
|
+
)
|
|
352
293
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
294
|
+
if (groupedColumnMode === 'remove') {
|
|
295
|
+
return nonGroupingColumns
|
|
296
|
+
}
|
|
356
297
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
298
|
+
const groupingColumns = grouping
|
|
299
|
+
.map(g => leafColumns.find(col => col.id === g)!)
|
|
300
|
+
.filter(Boolean)
|
|
360
301
|
|
|
361
|
-
|
|
362
|
-
},
|
|
302
|
+
return [...groupingColumns, ...nonGroupingColumns]
|
|
363
303
|
}
|
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
|
),
|