@tanstack/table-core 8.0.0-alpha.55 → 8.0.0-alpha.59
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/core.js +18 -404
- package/build/cjs/core.js.map +1 -1
- package/build/cjs/createTable.js +3 -3
- package/build/cjs/createTable.js.map +1 -1
- package/build/cjs/features/Cells.js +107 -0
- package/build/cjs/features/Cells.js.map +1 -0
- package/build/cjs/features/ColumnSizing.js +96 -54
- package/build/cjs/features/ColumnSizing.js.map +1 -1
- package/build/cjs/features/Columns.js +216 -0
- package/build/cjs/features/Columns.js.map +1 -0
- package/build/cjs/features/Expanding.js +13 -21
- package/build/cjs/features/Expanding.js.map +1 -1
- package/build/cjs/features/Filters.js +3 -3
- package/build/cjs/features/Filters.js.map +1 -1
- package/build/cjs/features/Grouping.js +8 -11
- package/build/cjs/features/Grouping.js.map +1 -1
- package/build/cjs/features/Headers.js +79 -220
- package/build/cjs/features/Headers.js.map +1 -1
- package/build/cjs/features/Ordering.js +1 -1
- package/build/cjs/features/Ordering.js.map +1 -1
- package/build/cjs/features/Pagination.js +5 -5
- package/build/cjs/features/Pagination.js.map +1 -1
- package/build/cjs/features/Pinning.js +172 -2
- package/build/cjs/features/Pinning.js.map +1 -1
- package/build/cjs/features/RowSelection.js +16 -48
- package/build/cjs/features/RowSelection.js.map +1 -1
- package/build/cjs/features/Rows.js +84 -0
- package/build/cjs/features/Rows.js.map +1 -0
- package/build/cjs/features/Sorting.js +9 -12
- package/build/cjs/features/Sorting.js.map +1 -1
- package/build/cjs/features/Visibility.js +59 -38
- package/build/cjs/features/Visibility.js.map +1 -1
- package/build/cjs/filterFns.js +16 -0
- package/build/cjs/filterFns.js.map +1 -1
- package/build/cjs/index.js +0 -1
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/utils.js +0 -16
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +866 -856
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +424 -322
- package/build/types/core.d.ts +9 -88
- package/build/types/createTable.d.ts +10 -11
- package/build/types/features/Cells.d.ts +13 -0
- package/build/types/features/ColumnSizing.d.ts +24 -30
- package/build/types/features/Columns.d.ts +54 -0
- package/build/types/features/Expanding.d.ts +6 -9
- package/build/types/features/Filters.d.ts +3 -1
- package/build/types/features/Grouping.d.ts +6 -9
- package/build/types/features/Headers.d.ts +3 -15
- package/build/types/features/Ordering.d.ts +1 -1
- package/build/types/features/Pagination.d.ts +6 -6
- package/build/types/features/Pinning.d.ts +18 -4
- package/build/types/features/RowSelection.d.ts +6 -13
- package/build/types/features/Rows.d.ts +27 -0
- package/build/types/features/Sorting.d.ts +5 -8
- package/build/types/features/Visibility.d.ts +9 -7
- package/build/types/filterFns.d.ts +5 -0
- package/build/types/types.d.ts +27 -69
- package/build/types/utils.d.ts +1 -5
- package/build/umd/index.development.js +844 -835
- 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/core.ts +55 -601
- package/src/createTable.ts +13 -17
- package/src/features/Cells.ts +130 -0
- package/src/features/ColumnSizing.ts +111 -89
- package/src/features/Columns.ts +288 -0
- package/src/features/Expanding.ts +20 -42
- package/src/features/Filters.ts +11 -3
- package/src/features/Grouping.ts +13 -39
- package/src/features/Headers.ts +49 -233
- package/src/features/Ordering.ts +1 -1
- package/src/features/Pagination.ts +14 -4
- package/src/features/Pinning.ts +194 -3
- package/src/features/RowSelection.ts +26 -88
- package/src/features/Rows.ts +123 -0
- package/src/features/Sorting.ts +20 -43
- package/src/features/Visibility.ts +82 -63
- package/src/filterFns.ts +20 -0
- package/src/types.ts +59 -133
- package/src/utils/getColumnFilteredRowModelAsync.ts +1 -5
- package/src/utils/getGlobalFilteredRowModelAsync.ts +2 -6
- package/src/utils/getSortedRowModelAsync.ts +0 -1
- package/src/utils.ts +2 -31
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Cell,
|
|
3
|
+
Column,
|
|
4
|
+
Header,
|
|
5
|
+
TableGenerics,
|
|
6
|
+
TableInstance,
|
|
7
|
+
Row,
|
|
8
|
+
AccessorFn,
|
|
9
|
+
ColumnDef,
|
|
10
|
+
Renderable,
|
|
11
|
+
HeaderRenderProps,
|
|
12
|
+
} from '../types'
|
|
13
|
+
import { memo } from '../utils'
|
|
14
|
+
|
|
15
|
+
export type CoreColumnDefType = 'data' | 'display' | 'group'
|
|
16
|
+
|
|
17
|
+
export type CoreColumnDef<TGenerics extends TableGenerics> = {
|
|
18
|
+
id: string
|
|
19
|
+
accessorKey?: string & keyof TGenerics['Row']
|
|
20
|
+
accessorFn?: AccessorFn<TGenerics['Row']>
|
|
21
|
+
columns?: ColumnDef<TGenerics>[]
|
|
22
|
+
header?: Renderable<
|
|
23
|
+
TGenerics,
|
|
24
|
+
{
|
|
25
|
+
instance: TableInstance<TGenerics>
|
|
26
|
+
header: Header<TGenerics>
|
|
27
|
+
column: Column<TGenerics>
|
|
28
|
+
}
|
|
29
|
+
>
|
|
30
|
+
footer?: Renderable<
|
|
31
|
+
TGenerics,
|
|
32
|
+
{
|
|
33
|
+
instance: TableInstance<TGenerics>
|
|
34
|
+
header: Header<TGenerics>
|
|
35
|
+
column: Column<TGenerics>
|
|
36
|
+
}
|
|
37
|
+
>
|
|
38
|
+
cell?: Renderable<
|
|
39
|
+
TGenerics,
|
|
40
|
+
{
|
|
41
|
+
instance: TableInstance<TGenerics>
|
|
42
|
+
row: Row<TGenerics>
|
|
43
|
+
column: Column<TGenerics>
|
|
44
|
+
cell: Cell<TGenerics>
|
|
45
|
+
value: TGenerics['Value']
|
|
46
|
+
}
|
|
47
|
+
>
|
|
48
|
+
meta?: TGenerics['ColumnMeta']
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export type CoreColumn<TGenerics extends TableGenerics> = {
|
|
52
|
+
id: string
|
|
53
|
+
depth: number
|
|
54
|
+
accessorFn?: AccessorFn<TGenerics['Row']>
|
|
55
|
+
columnDef: ColumnDef<TGenerics>
|
|
56
|
+
columnDefType: CoreColumnDefType
|
|
57
|
+
columns: Column<TGenerics>[]
|
|
58
|
+
parent?: Column<TGenerics>
|
|
59
|
+
getFlatColumns: () => Column<TGenerics>[]
|
|
60
|
+
getLeafColumns: () => Column<TGenerics>[]
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export type ColumnsOptions<TGenerics extends TableGenerics> = {
|
|
64
|
+
columns: ColumnDef<TGenerics>[]
|
|
65
|
+
defaultColumn?: Partial<ColumnDef<TGenerics>>
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export type ColumnsInstance<TGenerics extends TableGenerics> = {
|
|
69
|
+
getDefaultColumn: () => Partial<ColumnDef<TGenerics>>
|
|
70
|
+
getColumnDefs: () => ColumnDef<TGenerics>[]
|
|
71
|
+
createColumn: (
|
|
72
|
+
columnDef: ColumnDef<TGenerics>,
|
|
73
|
+
depth: number,
|
|
74
|
+
parent?: Column<TGenerics>
|
|
75
|
+
) => Column<TGenerics>
|
|
76
|
+
getAllColumns: () => Column<TGenerics>[]
|
|
77
|
+
getAllFlatColumns: () => Column<TGenerics>[]
|
|
78
|
+
getAllFlatColumnsById: () => Record<string, Column<TGenerics>>
|
|
79
|
+
getAllLeafColumns: () => Column<TGenerics>[]
|
|
80
|
+
getColumn: (columnId: string) => Column<TGenerics>
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
//
|
|
84
|
+
|
|
85
|
+
export const Columns = {
|
|
86
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
87
|
+
instance: TableInstance<TGenerics>
|
|
88
|
+
): ColumnsInstance<TGenerics> => {
|
|
89
|
+
return {
|
|
90
|
+
getDefaultColumn: memo(
|
|
91
|
+
() => [instance.options.defaultColumn],
|
|
92
|
+
defaultColumn => {
|
|
93
|
+
defaultColumn = (defaultColumn ?? {}) as Partial<ColumnDef<TGenerics>>
|
|
94
|
+
|
|
95
|
+
return {
|
|
96
|
+
header: (props: HeaderRenderProps<Header<TGenerics>>) =>
|
|
97
|
+
props.header.column.id,
|
|
98
|
+
footer: (props: HeaderRenderProps<Header<TGenerics>>) =>
|
|
99
|
+
props.header.column.id,
|
|
100
|
+
cell: ({ value = '' }: { value: any }): JSX.Element =>
|
|
101
|
+
typeof value === 'boolean' ? value.toString() : value,
|
|
102
|
+
...instance._features.reduce((obj, feature) => {
|
|
103
|
+
return Object.assign(obj, feature.getDefaultColumn?.())
|
|
104
|
+
}, {}),
|
|
105
|
+
...defaultColumn,
|
|
106
|
+
} as Partial<ColumnDef<TGenerics>>
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
debug: () =>
|
|
110
|
+
instance.options.debugAll ?? instance.options.debugColumns,
|
|
111
|
+
key: 'getDefaultColumn',
|
|
112
|
+
}
|
|
113
|
+
),
|
|
114
|
+
|
|
115
|
+
getColumnDefs: () => instance.options.columns,
|
|
116
|
+
|
|
117
|
+
createColumn: (
|
|
118
|
+
columnDef: ColumnDef<TGenerics> & { columnDefType?: CoreColumnDefType },
|
|
119
|
+
depth: number,
|
|
120
|
+
parent
|
|
121
|
+
) => {
|
|
122
|
+
const defaultColumn = instance.getDefaultColumn()
|
|
123
|
+
|
|
124
|
+
let id =
|
|
125
|
+
columnDef.id ??
|
|
126
|
+
columnDef.accessorKey ??
|
|
127
|
+
(typeof columnDef.header === 'string' ? columnDef.header : undefined)
|
|
128
|
+
|
|
129
|
+
let accessorFn: AccessorFn<TGenerics['Row']> | undefined
|
|
130
|
+
|
|
131
|
+
if (columnDef.accessorFn) {
|
|
132
|
+
accessorFn = columnDef.accessorFn
|
|
133
|
+
} else if (columnDef.accessorKey) {
|
|
134
|
+
accessorFn = (originalRow?: TGenerics['Row']) =>
|
|
135
|
+
(originalRow as any)[columnDef.accessorKey]
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (!id) {
|
|
139
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
140
|
+
throw new Error(
|
|
141
|
+
columnDef.accessorFn
|
|
142
|
+
? `Columns require an id when using an accessorFn`
|
|
143
|
+
: `Columns require an id when using a non-string header`
|
|
144
|
+
)
|
|
145
|
+
}
|
|
146
|
+
throw new Error()
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
let column: CoreColumn<TGenerics> = {
|
|
150
|
+
...defaultColumn,
|
|
151
|
+
...columnDef,
|
|
152
|
+
id: `${id}`,
|
|
153
|
+
accessorFn,
|
|
154
|
+
parent: parent as any,
|
|
155
|
+
depth,
|
|
156
|
+
columnDef,
|
|
157
|
+
columnDefType: columnDef.columnDefType as CoreColumnDefType,
|
|
158
|
+
columns: [],
|
|
159
|
+
getFlatColumns: memo(
|
|
160
|
+
() => [true],
|
|
161
|
+
() => {
|
|
162
|
+
return [
|
|
163
|
+
column as Column<TGenerics>,
|
|
164
|
+
...column.columns?.flatMap(d => d.getFlatColumns()),
|
|
165
|
+
]
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
key: 'column.getFlatColumns',
|
|
169
|
+
debug: () =>
|
|
170
|
+
instance.options.debugAll ?? instance.options.debugColumns,
|
|
171
|
+
}
|
|
172
|
+
),
|
|
173
|
+
getLeafColumns: memo(
|
|
174
|
+
() => [instance._getOrderColumnsFn()],
|
|
175
|
+
orderColumns => {
|
|
176
|
+
if (column.columns?.length) {
|
|
177
|
+
let leafColumns = column.columns.flatMap(column =>
|
|
178
|
+
column.getLeafColumns()
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
return orderColumns(leafColumns)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return [column as Column<TGenerics>]
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
key: 'column.getLeafColumns',
|
|
188
|
+
debug: () =>
|
|
189
|
+
instance.options.debugAll ?? instance.options.debugColumns,
|
|
190
|
+
}
|
|
191
|
+
),
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
column = instance._features.reduce((obj, feature) => {
|
|
195
|
+
return Object.assign(obj, feature.createColumn?.(column, instance))
|
|
196
|
+
}, column)
|
|
197
|
+
|
|
198
|
+
// Yes, we have to convert instance to uknown, because we know more than the compiler here.
|
|
199
|
+
return column as Column<TGenerics>
|
|
200
|
+
},
|
|
201
|
+
|
|
202
|
+
getAllColumns: memo(
|
|
203
|
+
() => [instance.getColumnDefs()],
|
|
204
|
+
columnDefs => {
|
|
205
|
+
const recurseColumns = (
|
|
206
|
+
columnDefs: ColumnDef<TGenerics>[],
|
|
207
|
+
parent?: Column<TGenerics>,
|
|
208
|
+
depth = 0
|
|
209
|
+
): Column<TGenerics>[] => {
|
|
210
|
+
return columnDefs.map(columnDef => {
|
|
211
|
+
const column = instance.createColumn(columnDef, depth, parent)
|
|
212
|
+
|
|
213
|
+
column.columns = columnDef.columns
|
|
214
|
+
? recurseColumns(columnDef.columns, column, depth + 1)
|
|
215
|
+
: []
|
|
216
|
+
|
|
217
|
+
return column
|
|
218
|
+
})
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
return recurseColumns(columnDefs)
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
key: 'getAllColumns',
|
|
225
|
+
debug: () =>
|
|
226
|
+
instance.options.debugAll ?? instance.options.debugColumns,
|
|
227
|
+
}
|
|
228
|
+
),
|
|
229
|
+
|
|
230
|
+
getAllFlatColumns: memo(
|
|
231
|
+
() => [instance.getAllColumns()],
|
|
232
|
+
allColumns => {
|
|
233
|
+
return allColumns.flatMap(column => {
|
|
234
|
+
return column.getFlatColumns()
|
|
235
|
+
})
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
key: 'getAllFlatColumns',
|
|
239
|
+
debug: () =>
|
|
240
|
+
instance.options.debugAll ?? instance.options.debugColumns,
|
|
241
|
+
}
|
|
242
|
+
),
|
|
243
|
+
|
|
244
|
+
getAllFlatColumnsById: memo(
|
|
245
|
+
() => [instance.getAllFlatColumns()],
|
|
246
|
+
flatColumns => {
|
|
247
|
+
return flatColumns.reduce((acc, column) => {
|
|
248
|
+
acc[column.id] = column
|
|
249
|
+
return acc
|
|
250
|
+
}, {} as Record<string, Column<TGenerics>>)
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
key: 'getAllFlatColumnsById',
|
|
254
|
+
debug: () =>
|
|
255
|
+
instance.options.debugAll ?? instance.options.debugColumns,
|
|
256
|
+
}
|
|
257
|
+
),
|
|
258
|
+
|
|
259
|
+
getAllLeafColumns: memo(
|
|
260
|
+
() => [instance.getAllColumns(), instance._getOrderColumnsFn()],
|
|
261
|
+
(allColumns, orderColumns) => {
|
|
262
|
+
let leafColumns = allColumns.flatMap(column =>
|
|
263
|
+
column.getLeafColumns()
|
|
264
|
+
)
|
|
265
|
+
return orderColumns(leafColumns)
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
key: 'getAllLeafColumns',
|
|
269
|
+
debug: () =>
|
|
270
|
+
instance.options.debugAll ?? instance.options.debugColumns,
|
|
271
|
+
}
|
|
272
|
+
),
|
|
273
|
+
|
|
274
|
+
getColumn: columnId => {
|
|
275
|
+
const column = instance.getAllFlatColumnsById()[columnId]
|
|
276
|
+
|
|
277
|
+
if (!column) {
|
|
278
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
279
|
+
console.warn(`[Table] Column with id ${columnId} does not exist.`)
|
|
280
|
+
}
|
|
281
|
+
throw new Error()
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
return column
|
|
285
|
+
},
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { RowModel } from '..'
|
|
2
2
|
import {
|
|
3
|
-
Getter,
|
|
4
3
|
OnChangeFn,
|
|
5
4
|
TableGenerics,
|
|
6
|
-
PropGetterValue,
|
|
7
5
|
TableInstance,
|
|
8
6
|
Row,
|
|
9
7
|
Updater,
|
|
10
8
|
} from '../types'
|
|
11
|
-
import {
|
|
9
|
+
import { makeStateUpdater } from '../utils'
|
|
12
10
|
|
|
13
11
|
export type ExpandedStateList = Record<string, boolean>
|
|
14
12
|
export type ExpandedState = true | Record<string, boolean>
|
|
@@ -20,12 +18,11 @@ export type ExpandedRow = {
|
|
|
20
18
|
toggleExpanded: (expanded?: boolean) => void
|
|
21
19
|
getIsExpanded: () => boolean
|
|
22
20
|
getCanExpand: () => boolean
|
|
23
|
-
|
|
24
|
-
userProps?: TGetter
|
|
25
|
-
) => undefined | PropGetterValue<ToggleExpandedProps, TGetter>
|
|
21
|
+
getToggleExpandedHandler: () => () => void
|
|
26
22
|
}
|
|
27
23
|
|
|
28
24
|
export type ExpandedOptions<TGenerics extends TableGenerics> = {
|
|
25
|
+
manualExpanding?: boolean
|
|
29
26
|
onExpandedChange?: OnChangeFn<ExpandedState>
|
|
30
27
|
autoResetExpanded?: boolean
|
|
31
28
|
enableExpanded?: boolean
|
|
@@ -39,11 +36,6 @@ export type ExpandedOptions<TGenerics extends TableGenerics> = {
|
|
|
39
36
|
paginateExpandedRows?: boolean
|
|
40
37
|
}
|
|
41
38
|
|
|
42
|
-
export type ToggleExpandedProps = {
|
|
43
|
-
title?: string
|
|
44
|
-
onClick?: (event: unknown) => void
|
|
45
|
-
}
|
|
46
|
-
|
|
47
39
|
export type ExpandedInstance<TGenerics extends TableGenerics> = {
|
|
48
40
|
queueResetExpanded: () => void
|
|
49
41
|
setExpanded: (updater: Updater<ExpandedState>) => void
|
|
@@ -53,13 +45,8 @@ export type ExpandedInstance<TGenerics extends TableGenerics> = {
|
|
|
53
45
|
getRowCanExpand: (rowId: string) => boolean
|
|
54
46
|
getCanSomeRowsExpand: () => boolean
|
|
55
47
|
getIsRowExpanded: (rowId: string) => boolean
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
userProps?: TGetter
|
|
59
|
-
) => undefined | PropGetterValue<ToggleExpandedProps, TGetter>
|
|
60
|
-
getToggleAllRowsExpandedProps: <TGetter extends Getter<ToggleExpandedProps>>(
|
|
61
|
-
userProps?: TGetter
|
|
62
|
-
) => undefined | PropGetterValue<ToggleExpandedProps, TGetter>
|
|
48
|
+
getToggleExpandedHandler: (rowId: string) => undefined | (() => void)
|
|
49
|
+
getToggleAllRowsExpandedHandler: () => (event: unknown) => void
|
|
63
50
|
getIsSomeRowsExpanded: () => boolean
|
|
64
51
|
getIsAllRowsExpanded: () => boolean
|
|
65
52
|
getExpandedDepth: () => number
|
|
@@ -88,7 +75,7 @@ export const Expanding = {
|
|
|
88
75
|
}
|
|
89
76
|
},
|
|
90
77
|
|
|
91
|
-
|
|
78
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
92
79
|
instance: TableInstance<TGenerics>
|
|
93
80
|
): ExpandedInstance<TGenerics> => {
|
|
94
81
|
let registered = false
|
|
@@ -200,7 +187,7 @@ export const Expanding = {
|
|
|
200
187
|
instance.getRowCanExpand(id)
|
|
201
188
|
)
|
|
202
189
|
},
|
|
203
|
-
|
|
190
|
+
getToggleExpandedHandler: rowId => {
|
|
204
191
|
const row = instance.getRow(rowId)
|
|
205
192
|
|
|
206
193
|
if (!row) {
|
|
@@ -209,28 +196,16 @@ export const Expanding = {
|
|
|
209
196
|
|
|
210
197
|
const canExpand = instance.getRowCanExpand(rowId)
|
|
211
198
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
? (e: unknown) => {
|
|
216
|
-
;(e as any).persist?.()
|
|
217
|
-
instance.toggleRowExpanded(rowId)
|
|
218
|
-
}
|
|
219
|
-
: undefined,
|
|
199
|
+
return () => {
|
|
200
|
+
if (!canExpand) return
|
|
201
|
+
instance.toggleRowExpanded(rowId)
|
|
220
202
|
}
|
|
221
|
-
|
|
222
|
-
return propGetter(initialProps, userProps)
|
|
223
203
|
},
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
;(e as any).persist?.()
|
|
229
|
-
instance.toggleAllRowsExpanded()
|
|
230
|
-
},
|
|
204
|
+
getToggleAllRowsExpandedHandler: () => {
|
|
205
|
+
return (e: unknown) => {
|
|
206
|
+
;(e as any).persist?.()
|
|
207
|
+
instance.toggleAllRowsExpanded()
|
|
231
208
|
}
|
|
232
|
-
|
|
233
|
-
return propGetter(initialProps, userProps)
|
|
234
209
|
},
|
|
235
210
|
getIsSomeRowsExpanded: () => {
|
|
236
211
|
const expanded = instance.getState().expanded
|
|
@@ -281,7 +256,10 @@ export const Expanding = {
|
|
|
281
256
|
instance.options.getExpandedRowModel(instance)
|
|
282
257
|
}
|
|
283
258
|
|
|
284
|
-
if (
|
|
259
|
+
if (
|
|
260
|
+
instance.options.manualExpanding ||
|
|
261
|
+
!instance._getExpandedRowModel
|
|
262
|
+
) {
|
|
285
263
|
return instance.getPreExpandedRowModel()
|
|
286
264
|
}
|
|
287
265
|
|
|
@@ -299,8 +277,8 @@ export const Expanding = {
|
|
|
299
277
|
void instance.toggleRowExpanded(row.id, expanded),
|
|
300
278
|
getIsExpanded: () => instance.getIsRowExpanded(row.id),
|
|
301
279
|
getCanExpand: () => row.subRows && !!row.subRows.length,
|
|
302
|
-
|
|
303
|
-
instance.
|
|
280
|
+
getToggleExpandedHandler: () =>
|
|
281
|
+
instance.getToggleExpandedHandler(row.id)!,
|
|
304
282
|
}
|
|
305
283
|
},
|
|
306
284
|
}
|
package/src/features/Filters.ts
CHANGED
|
@@ -83,6 +83,7 @@ export type FiltersOptions<TGenerics extends TableGenerics> = {
|
|
|
83
83
|
filterFns?: TGenerics['FilterFns']
|
|
84
84
|
enableFilters?: boolean
|
|
85
85
|
// Column
|
|
86
|
+
manualColumnFiltering?: boolean
|
|
86
87
|
onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>
|
|
87
88
|
autoResetColumnFilters?: boolean
|
|
88
89
|
enableColumnFilters?: boolean
|
|
@@ -90,6 +91,7 @@ export type FiltersOptions<TGenerics extends TableGenerics> = {
|
|
|
90
91
|
instance: TableInstance<TGenerics>
|
|
91
92
|
) => () => RowModel<TGenerics>
|
|
92
93
|
// Global
|
|
94
|
+
manualGlobalFiltering?: boolean
|
|
93
95
|
globalFilterFn?: FilterFnOption<TGenerics>
|
|
94
96
|
onGlobalFilterChange?: OnChangeFn<any>
|
|
95
97
|
autoResetGlobalFilter?: boolean
|
|
@@ -230,7 +232,7 @@ export const Filters = {
|
|
|
230
232
|
}
|
|
231
233
|
},
|
|
232
234
|
|
|
233
|
-
|
|
235
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
234
236
|
instance: TableInstance<TGenerics>
|
|
235
237
|
): FiltersInstance<TGenerics> => {
|
|
236
238
|
let registered = false
|
|
@@ -471,7 +473,10 @@ export const Filters = {
|
|
|
471
473
|
instance.options.getColumnFilteredRowModel(instance)
|
|
472
474
|
}
|
|
473
475
|
|
|
474
|
-
if (
|
|
476
|
+
if (
|
|
477
|
+
instance.options.manualColumnFiltering ||
|
|
478
|
+
!instance._getColumnFilteredRowModel
|
|
479
|
+
) {
|
|
475
480
|
return instance.getPreColumnFilteredRowModel()
|
|
476
481
|
}
|
|
477
482
|
|
|
@@ -487,7 +492,10 @@ export const Filters = {
|
|
|
487
492
|
instance.options.getGlobalFilteredRowModel(instance)
|
|
488
493
|
}
|
|
489
494
|
|
|
490
|
-
if (
|
|
495
|
+
if (
|
|
496
|
+
instance.options.manualGlobalFiltering ||
|
|
497
|
+
!instance._getGlobalFilteredRowModel
|
|
498
|
+
) {
|
|
491
499
|
return instance.getPreGlobalFilteredRowModel()
|
|
492
500
|
}
|
|
493
501
|
|
package/src/features/Grouping.ts
CHANGED
|
@@ -3,24 +3,14 @@ import { BuiltInAggregationFn, aggregationFns } from '../aggregationFns'
|
|
|
3
3
|
import {
|
|
4
4
|
Cell,
|
|
5
5
|
Column,
|
|
6
|
-
Getter,
|
|
7
6
|
OnChangeFn,
|
|
8
|
-
PropGetterValue,
|
|
9
7
|
TableInstance,
|
|
10
8
|
Row,
|
|
11
9
|
Updater,
|
|
12
10
|
Renderable,
|
|
13
|
-
UseRenderer,
|
|
14
11
|
TableGenerics,
|
|
15
12
|
} from '../types'
|
|
16
|
-
import {
|
|
17
|
-
functionalUpdate,
|
|
18
|
-
isFunction,
|
|
19
|
-
makeStateUpdater,
|
|
20
|
-
memo,
|
|
21
|
-
Overwrite,
|
|
22
|
-
propGetter,
|
|
23
|
-
} from '../utils'
|
|
13
|
+
import { isFunction, makeStateUpdater, Overwrite } from '../utils'
|
|
24
14
|
|
|
25
15
|
export type GroupingState = string[]
|
|
26
16
|
|
|
@@ -67,9 +57,7 @@ export type GroupingColumn<TGenerics extends TableGenerics> = {
|
|
|
67
57
|
getIsGrouped: () => boolean
|
|
68
58
|
getGroupedIndex: () => number
|
|
69
59
|
toggleGrouping: () => void
|
|
70
|
-
|
|
71
|
-
userProps?: TGetter
|
|
72
|
-
) => undefined | PropGetterValue<ToggleGroupingProps, TGetter>
|
|
60
|
+
getToggleGroupingHandler: () => () => void
|
|
73
61
|
}
|
|
74
62
|
|
|
75
63
|
export type GroupingRow = {
|
|
@@ -82,7 +70,7 @@ export type GroupingCell<TGenerics extends TableGenerics> = {
|
|
|
82
70
|
getIsGrouped: () => boolean
|
|
83
71
|
getIsPlaceholder: () => boolean
|
|
84
72
|
getIsAggregated: () => boolean
|
|
85
|
-
renderAggregatedCell: () => string | null |
|
|
73
|
+
renderAggregatedCell: () => string | null | TGenerics['Rendered']
|
|
86
74
|
}
|
|
87
75
|
|
|
88
76
|
export type ColumnDefaultOptions = {
|
|
@@ -93,6 +81,7 @@ export type ColumnDefaultOptions = {
|
|
|
93
81
|
}
|
|
94
82
|
|
|
95
83
|
export type GroupingOptions<TGenerics extends TableGenerics> = {
|
|
84
|
+
manualGrouping?: boolean
|
|
96
85
|
aggregationFns?: TGenerics['AggregationFns']
|
|
97
86
|
onGroupingChange?: OnChangeFn<GroupingState>
|
|
98
87
|
autoResetGrouping?: boolean
|
|
@@ -107,11 +96,6 @@ export type GroupingOptions<TGenerics extends TableGenerics> = {
|
|
|
107
96
|
|
|
108
97
|
export type GroupingColumnMode = false | 'reorder' | 'remove'
|
|
109
98
|
|
|
110
|
-
export type ToggleGroupingProps = {
|
|
111
|
-
title?: string
|
|
112
|
-
onClick?: (event: unknown) => void
|
|
113
|
-
}
|
|
114
|
-
|
|
115
99
|
export type GroupingInstance<TGenerics extends TableGenerics> = {
|
|
116
100
|
queueResetGrouping: () => void
|
|
117
101
|
getColumnAutoAggregationFn: (
|
|
@@ -126,10 +110,7 @@ export type GroupingInstance<TGenerics extends TableGenerics> = {
|
|
|
126
110
|
getColumnCanGroup: (columnId: string) => boolean
|
|
127
111
|
getColumnIsGrouped: (columnId: string) => boolean
|
|
128
112
|
getColumnGroupedIndex: (columnId: string) => number
|
|
129
|
-
|
|
130
|
-
columnId: string,
|
|
131
|
-
userProps?: TGetter
|
|
132
|
-
) => undefined | PropGetterValue<ToggleGroupingProps, TGetter>
|
|
113
|
+
getToggleGroupingHandler: (columnId: string) => undefined | (() => void)
|
|
133
114
|
getRowIsGrouped: (rowId: string) => boolean
|
|
134
115
|
getPreGroupedRowModel: () => RowModel<TGenerics>
|
|
135
116
|
getGroupedRowModel: () => RowModel<TGenerics>
|
|
@@ -173,12 +154,12 @@ export const Grouping = {
|
|
|
173
154
|
getGroupedIndex: () => instance.getColumnGroupedIndex(column.id),
|
|
174
155
|
getIsGrouped: () => instance.getColumnIsGrouped(column.id),
|
|
175
156
|
toggleGrouping: () => instance.toggleColumnGrouping(column.id),
|
|
176
|
-
|
|
177
|
-
instance.
|
|
157
|
+
getToggleGroupingHandler: () =>
|
|
158
|
+
instance.getToggleGroupingHandler(column.id)!,
|
|
178
159
|
}
|
|
179
160
|
},
|
|
180
161
|
|
|
181
|
-
|
|
162
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
182
163
|
instance: TableInstance<TGenerics>
|
|
183
164
|
): GroupingInstance<TGenerics> => {
|
|
184
165
|
let registered = false
|
|
@@ -277,21 +258,14 @@ export const Grouping = {
|
|
|
277
258
|
instance.setGrouping(instance.initialState?.grouping ?? [])
|
|
278
259
|
},
|
|
279
260
|
|
|
280
|
-
|
|
261
|
+
getToggleGroupingHandler: columnId => {
|
|
281
262
|
const column = instance.getColumn(columnId)
|
|
282
|
-
|
|
283
263
|
const canGroup = column.getCanGroup()
|
|
284
264
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
? (e: unknown) => {
|
|
289
|
-
column.toggleGrouping?.()
|
|
290
|
-
}
|
|
291
|
-
: undefined,
|
|
265
|
+
return () => {
|
|
266
|
+
if (!canGroup) return
|
|
267
|
+
column.toggleGrouping?.()
|
|
292
268
|
}
|
|
293
|
-
|
|
294
|
-
return propGetter(initialProps, userProps)
|
|
295
269
|
},
|
|
296
270
|
|
|
297
271
|
getRowIsGrouped: rowId => !!instance.getRow(rowId)?.groupingColumnId,
|
|
@@ -306,7 +280,7 @@ export const Grouping = {
|
|
|
306
280
|
instance.options.getGroupedRowModel(instance)
|
|
307
281
|
}
|
|
308
282
|
|
|
309
|
-
if (!instance._getGroupedRowModel) {
|
|
283
|
+
if (instance.options.manualGrouping || !instance._getGroupedRowModel) {
|
|
310
284
|
return instance.getPreGroupedRowModel()
|
|
311
285
|
}
|
|
312
286
|
|