@tanstack/react-table 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/react-table/src/index.js +139 -0
- package/build/cjs/react-table/src/index.js.map +1 -0
- package/build/cjs/table-core/build/esm/index.js +3867 -0
- package/build/cjs/table-core/build/esm/index.js.map +1 -0
- package/build/esm/index.js +3196 -4117
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +24 -813
- package/build/types/index.d.ts +16 -9
- package/build/umd/index.development.js +3234 -4125
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +11 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +10 -6
- package/src/index.tsx +111 -9
- 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/createTable.js +0 -122
- package/build/cjs/createTable.js.map +0 -1
- package/build/cjs/features/ColumnSizing.js +0 -318
- package/build/cjs/features/ColumnSizing.js.map +0 -1
- package/build/cjs/features/Expanding.js +0 -239
- package/build/cjs/features/Expanding.js.map +0 -1
- package/build/cjs/features/Filters.js +0 -414
- package/build/cjs/features/Filters.js.map +0 -1
- package/build/cjs/features/Grouping.js +0 -232
- package/build/cjs/features/Grouping.js.map +0 -1
- package/build/cjs/features/Headers.js +0 -629
- package/build/cjs/features/Headers.js.map +0 -1
- package/build/cjs/features/Ordering.js +0 -86
- package/build/cjs/features/Ordering.js.map +0 -1
- package/build/cjs/features/Pagination.js +0 -193
- package/build/cjs/features/Pagination.js.map +0 -1
- package/build/cjs/features/Pinning.js +0 -149
- package/build/cjs/features/Pinning.js.map +0 -1
- package/build/cjs/features/RowSelection.js +0 -526
- package/build/cjs/features/RowSelection.js.map +0 -1
- package/build/cjs/features/Sorting.js +0 -315
- package/build/cjs/features/Sorting.js.map +0 -1
- package/build/cjs/features/Visibility.js +0 -174
- package/build/cjs/features/Visibility.js.map +0 -1
- package/build/cjs/filterTypes.js +0 -172
- package/build/cjs/filterTypes.js.map +0 -1
- package/build/cjs/index.js +0 -44
- package/build/cjs/index.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/cjs/utils.js +0 -167
- package/build/cjs/utils.js.map +0 -1
- package/build/types/aggregationTypes.d.ts +0 -22
- package/build/types/core.d.ts +0 -105
- package/build/types/createTable.d.ts +0 -42
- package/build/types/features/ColumnSizing.d.ts +0 -73
- package/build/types/features/Expanding.d.ts +0 -48
- package/build/types/features/Filters.d.ts +0 -90
- package/build/types/features/Grouping.d.ts +0 -83
- package/build/types/features/Headers.d.ts +0 -41
- package/build/types/features/Ordering.d.ts +0 -19
- package/build/types/features/Pagination.d.ts +0 -39
- package/build/types/features/Pinning.d.ts +0 -39
- package/build/types/features/RowSelection.d.ts +0 -58
- package/build/types/features/Sorting.d.ts +0 -79
- package/build/types/features/Visibility.d.ts +0 -47
- package/build/types/filterTypes.d.ts +0 -50
- package/build/types/sortTypes.d.ts +0 -18
- package/build/types/types.d.ts +0 -138
- 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/build/types/utils.d.ts +0 -23
- package/src/aggregationTypes.ts +0 -115
- package/src/core.tsx +0 -763
- package/src/createTable.tsx +0 -186
- package/src/features/ColumnSizing.ts +0 -424
- package/src/features/Expanding.ts +0 -318
- package/src/features/Filters.ts +0 -560
- package/src/features/Grouping.ts +0 -361
- package/src/features/Headers.ts +0 -729
- package/src/features/Ordering.ts +0 -110
- package/src/features/Pagination.ts +0 -250
- package/src/features/Pinning.ts +0 -174
- package/src/features/RowSelection.ts +0 -651
- package/src/features/Sorting.ts +0 -453
- package/src/features/Visibility.ts +0 -238
- package/src/filterTypes.ts +0 -188
- package/src/sortTypes.ts +0 -147
- package/src/types.ts +0 -311
- 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/Filters.ts
DELETED
|
@@ -1,560 +0,0 @@
|
|
|
1
|
-
import { RowModel } from '..'
|
|
2
|
-
import { BuiltInFilterType, filterTypes } from '../filterTypes'
|
|
3
|
-
import {
|
|
4
|
-
Column,
|
|
5
|
-
OnChangeFn,
|
|
6
|
-
PartialGenerics,
|
|
7
|
-
TableInstance,
|
|
8
|
-
Row,
|
|
9
|
-
Updater,
|
|
10
|
-
} from '../types'
|
|
11
|
-
import {
|
|
12
|
-
functionalUpdate,
|
|
13
|
-
isFunction,
|
|
14
|
-
makeStateUpdater,
|
|
15
|
-
memo,
|
|
16
|
-
Overwrite,
|
|
17
|
-
} from '../utils'
|
|
18
|
-
|
|
19
|
-
export type ColumnFilter = {
|
|
20
|
-
id: string
|
|
21
|
-
value: unknown
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export type ColumnFiltersState = ColumnFilter[]
|
|
25
|
-
|
|
26
|
-
export type FilterFn<TGenerics extends PartialGenerics> = {
|
|
27
|
-
(rows: Row<TGenerics>[], columnIds: string[], filterValue: any): any
|
|
28
|
-
autoRemove?: ColumnFilterAutoRemoveTestFn<TGenerics>
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export type ColumnFilterAutoRemoveTestFn<TGenerics extends PartialGenerics> = (
|
|
32
|
-
value: unknown,
|
|
33
|
-
column?: Column<TGenerics>
|
|
34
|
-
) => boolean
|
|
35
|
-
|
|
36
|
-
export type CustomFilterTypes<TGenerics extends PartialGenerics> = Record<
|
|
37
|
-
string,
|
|
38
|
-
FilterFn<TGenerics>
|
|
39
|
-
>
|
|
40
|
-
|
|
41
|
-
export type FiltersTableState = {
|
|
42
|
-
columnFilters: ColumnFiltersState
|
|
43
|
-
globalFilter: any
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export type FilterType<TGenerics extends PartialGenerics> =
|
|
47
|
-
| 'auto'
|
|
48
|
-
| BuiltInFilterType
|
|
49
|
-
| TGenerics['FilterFns']
|
|
50
|
-
| FilterFn<TGenerics>
|
|
51
|
-
|
|
52
|
-
export type FiltersColumnDef<TGenerics extends PartialGenerics> = {
|
|
53
|
-
filterType?: FilterType<Overwrite<TGenerics, { Value: any }>>
|
|
54
|
-
enableAllFilters?: boolean
|
|
55
|
-
enableColumnFilter?: boolean
|
|
56
|
-
enableGlobalFilter?: boolean
|
|
57
|
-
defaultCanFilter?: boolean
|
|
58
|
-
defaultCanColumnFilter?: boolean
|
|
59
|
-
defaultCanGlobalFilter?: boolean
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export type FiltersColumn<TGenerics extends PartialGenerics> = {
|
|
63
|
-
filterType: FilterType<Overwrite<TGenerics, { Value: any }>>
|
|
64
|
-
getCanColumnFilter: () => boolean
|
|
65
|
-
getCanGlobalFilter: () => boolean
|
|
66
|
-
getColumnFilterIndex: () => number
|
|
67
|
-
getIsColumnFiltered: () => boolean
|
|
68
|
-
getColumnFilterValue: () => unknown
|
|
69
|
-
setColumnFilterValue: (value: any) => void
|
|
70
|
-
getPreFilteredRows: () => Row<TGenerics>[] | undefined
|
|
71
|
-
getPreFilteredUniqueValues: () => Map<any, number>
|
|
72
|
-
getPreFilteredMinMaxValues: () => [any, any]
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export type FiltersOptions<TGenerics extends PartialGenerics> = {
|
|
76
|
-
filterFromChildrenUp?: boolean
|
|
77
|
-
filterTypes?: TGenerics['FilterFns']
|
|
78
|
-
enableFilters?: boolean
|
|
79
|
-
// Column
|
|
80
|
-
onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>
|
|
81
|
-
autoResetColumnFilters?: boolean
|
|
82
|
-
enableColumnFilters?: boolean
|
|
83
|
-
columnFilterRowsFn?: (
|
|
84
|
-
instance: TableInstance<TGenerics>,
|
|
85
|
-
coreRowModel: RowModel<TGenerics>
|
|
86
|
-
) => RowModel<TGenerics>
|
|
87
|
-
// Global
|
|
88
|
-
globalFilterType?: FilterType<TGenerics>
|
|
89
|
-
onGlobalFilterChange?: OnChangeFn<any>
|
|
90
|
-
enableGlobalFilters?: boolean
|
|
91
|
-
autoResetGlobalFilter?: boolean
|
|
92
|
-
enableGlobalFilter?: boolean
|
|
93
|
-
globalFilterRowsFn?: (
|
|
94
|
-
instance: TableInstance<TGenerics>,
|
|
95
|
-
rowModel: RowModel<TGenerics>
|
|
96
|
-
) => RowModel<TGenerics>
|
|
97
|
-
getColumnCanGlobalFilterFn?: (column: Column<TGenerics>) => boolean
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export type FiltersInstance<TGenerics extends PartialGenerics> = {
|
|
101
|
-
_notifyFiltersReset: () => void
|
|
102
|
-
getColumnAutoFilterFn: (columnId: string) => FilterFn<TGenerics> | undefined
|
|
103
|
-
|
|
104
|
-
getColumnFilterFn: (columnId: string) => FilterFn<TGenerics> | undefined
|
|
105
|
-
|
|
106
|
-
setColumnFilters: (updater: Updater<ColumnFiltersState>) => void
|
|
107
|
-
setColumnFilterValue: (columnId: string, value: any) => void
|
|
108
|
-
resetColumnFilters: () => void
|
|
109
|
-
getColumnCanColumnFilter: (columnId: string) => boolean
|
|
110
|
-
getColumnCanGlobalFilterFn?: (column: Column<TGenerics>) => boolean
|
|
111
|
-
|
|
112
|
-
getColumnIsFiltered: (columnId: string) => boolean
|
|
113
|
-
getColumnFilterValue: (columnId: string) => unknown
|
|
114
|
-
getColumnFilterIndex: (columnId: string) => number
|
|
115
|
-
|
|
116
|
-
// All
|
|
117
|
-
getPreFilteredRowModel: () => RowModel<TGenerics>
|
|
118
|
-
|
|
119
|
-
// Column Filters
|
|
120
|
-
getPreColumnFilteredRowModel: () => RowModel<TGenerics>
|
|
121
|
-
getColumnFilteredRowModel: () => RowModel<TGenerics>
|
|
122
|
-
|
|
123
|
-
// Global Filters
|
|
124
|
-
setGlobalFilter: (updater: Updater<any>) => void
|
|
125
|
-
resetGlobalFilter: () => void
|
|
126
|
-
getGlobalAutoFilterFn: () => FilterFn<TGenerics> | undefined
|
|
127
|
-
getGlobalFilterFn: () => FilterFn<TGenerics> | undefined
|
|
128
|
-
getColumnCanGlobalFilter: (columnId: string) => boolean
|
|
129
|
-
getPreGlobalFilteredRowModel: () => RowModel<TGenerics>
|
|
130
|
-
getGlobalFilteredRowModel: () => RowModel<TGenerics>
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
//
|
|
134
|
-
|
|
135
|
-
export function getDefaultColumn<
|
|
136
|
-
TGenerics extends PartialGenerics
|
|
137
|
-
>(): FiltersColumnDef<TGenerics> {
|
|
138
|
-
return {
|
|
139
|
-
filterType: 'auto',
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
export function getInitialState(): FiltersTableState {
|
|
144
|
-
return {
|
|
145
|
-
columnFilters: [],
|
|
146
|
-
globalFilter: undefined,
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
export function getDefaultOptions<TGenerics extends PartialGenerics>(
|
|
151
|
-
instance: TableInstance<TGenerics>
|
|
152
|
-
): FiltersOptions<TGenerics> {
|
|
153
|
-
return {
|
|
154
|
-
onColumnFiltersChange: makeStateUpdater('columnFilters', instance),
|
|
155
|
-
onGlobalFilterChange: makeStateUpdater('globalFilter', instance),
|
|
156
|
-
autoResetColumnFilters: true,
|
|
157
|
-
filterFromChildrenUp: true,
|
|
158
|
-
autoResetGlobalFilter: true,
|
|
159
|
-
globalFilterType: 'auto',
|
|
160
|
-
getColumnCanGlobalFilterFn: column => {
|
|
161
|
-
const value = instance
|
|
162
|
-
.getCoreRowModel()
|
|
163
|
-
.flatRows[0]?.getAllCellsByColumnId()[column.id]?.value
|
|
164
|
-
|
|
165
|
-
return typeof value === 'string'
|
|
166
|
-
},
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
export function createColumn<TGenerics extends PartialGenerics>(
|
|
171
|
-
column: Column<TGenerics>,
|
|
172
|
-
instance: TableInstance<TGenerics>
|
|
173
|
-
): FiltersColumn<TGenerics> {
|
|
174
|
-
const getFacetInfo = memo(
|
|
175
|
-
() => [column.getPreFilteredRows()],
|
|
176
|
-
(rows = []) => {
|
|
177
|
-
let preFilteredUniqueValues = new Map<any, number>()
|
|
178
|
-
|
|
179
|
-
let preFilteredMinMaxValues: [any, any] = [
|
|
180
|
-
rows[0]?.values[column.id] ?? null,
|
|
181
|
-
rows[0]?.values[column.id] ?? null,
|
|
182
|
-
]
|
|
183
|
-
|
|
184
|
-
for (let i = 0; i < rows.length; i++) {
|
|
185
|
-
const value = rows[i]?.values[column.id]
|
|
186
|
-
|
|
187
|
-
if (preFilteredUniqueValues.has(value)) {
|
|
188
|
-
preFilteredUniqueValues.set(
|
|
189
|
-
value,
|
|
190
|
-
(preFilteredUniqueValues.get(value) ?? 0) + 1
|
|
191
|
-
)
|
|
192
|
-
} else {
|
|
193
|
-
preFilteredUniqueValues.set(value, 1)
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
if (value < preFilteredMinMaxValues[0]) {
|
|
197
|
-
preFilteredMinMaxValues[0] = value
|
|
198
|
-
} else if (value > preFilteredMinMaxValues[1]) {
|
|
199
|
-
preFilteredMinMaxValues[1] = value
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
return {
|
|
204
|
-
preFilteredUniqueValues,
|
|
205
|
-
preFilteredMinMaxValues,
|
|
206
|
-
}
|
|
207
|
-
},
|
|
208
|
-
{
|
|
209
|
-
key: 'column.getFacetInfo',
|
|
210
|
-
debug: () => instance.options.debugAll ?? instance.options.debugColumns,
|
|
211
|
-
}
|
|
212
|
-
)
|
|
213
|
-
|
|
214
|
-
return {
|
|
215
|
-
filterType: column.filterType,
|
|
216
|
-
getCanColumnFilter: () => instance.getColumnCanColumnFilter(column.id),
|
|
217
|
-
getCanGlobalFilter: () => instance.getColumnCanGlobalFilter(column.id),
|
|
218
|
-
getColumnFilterIndex: () => instance.getColumnFilterIndex(column.id),
|
|
219
|
-
getIsColumnFiltered: () => instance.getColumnIsFiltered(column.id),
|
|
220
|
-
getColumnFilterValue: () => instance.getColumnFilterValue(column.id),
|
|
221
|
-
setColumnFilterValue: val => instance.setColumnFilterValue(column.id, val),
|
|
222
|
-
getPreFilteredUniqueValues: () => getFacetInfo().preFilteredUniqueValues,
|
|
223
|
-
getPreFilteredMinMaxValues: () => getFacetInfo().preFilteredMinMaxValues,
|
|
224
|
-
getPreFilteredRows: () => undefined,
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
export function getInstance<TGenerics extends PartialGenerics>(
|
|
229
|
-
instance: TableInstance<TGenerics>
|
|
230
|
-
): FiltersInstance<TGenerics> {
|
|
231
|
-
let registered = false
|
|
232
|
-
|
|
233
|
-
return {
|
|
234
|
-
_notifyFiltersReset: () => {
|
|
235
|
-
if (!registered) {
|
|
236
|
-
registered = true
|
|
237
|
-
return
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
if (instance.options.autoResetAll === false) {
|
|
241
|
-
return
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
if (instance.options.autoResetAll === true) {
|
|
245
|
-
instance.resetSorting()
|
|
246
|
-
} else {
|
|
247
|
-
if (instance.options.autoResetColumnFilters) {
|
|
248
|
-
instance.resetColumnFilters()
|
|
249
|
-
}
|
|
250
|
-
if (instance.options.autoResetGlobalFilter) {
|
|
251
|
-
instance.resetGlobalFilter()
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
},
|
|
255
|
-
getColumnAutoFilterFn: columnId => {
|
|
256
|
-
const firstRow = instance.getCoreRowModel().flatRows[0]
|
|
257
|
-
|
|
258
|
-
const value = firstRow?.values[columnId]
|
|
259
|
-
|
|
260
|
-
if (typeof value === 'string') {
|
|
261
|
-
return filterTypes.includesString
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
if (typeof value === 'number') {
|
|
265
|
-
return filterTypes.betweenNumberRange
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
if (value !== null && typeof value === 'object') {
|
|
269
|
-
return filterTypes.equals
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
if (Array.isArray(value)) {
|
|
273
|
-
return filterTypes.arrIncludes
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
return filterTypes.weakEquals
|
|
277
|
-
},
|
|
278
|
-
getGlobalAutoFilterFn: () => {
|
|
279
|
-
return filterTypes.includesString
|
|
280
|
-
},
|
|
281
|
-
getColumnFilterFn: columnId => {
|
|
282
|
-
const column = instance.getColumn(columnId)
|
|
283
|
-
const userFilterTypes = instance.options.filterTypes
|
|
284
|
-
|
|
285
|
-
if (!column) {
|
|
286
|
-
throw new Error()
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
return isFunction(column.filterType)
|
|
290
|
-
? column.filterType
|
|
291
|
-
: column.filterType === 'auto'
|
|
292
|
-
? instance.getColumnAutoFilterFn(columnId)
|
|
293
|
-
: (userFilterTypes as Record<string, any>)?.[
|
|
294
|
-
column.filterType as string
|
|
295
|
-
] ??
|
|
296
|
-
(filterTypes[
|
|
297
|
-
column.filterType as BuiltInFilterType
|
|
298
|
-
] as FilterFn<TGenerics>)
|
|
299
|
-
},
|
|
300
|
-
|
|
301
|
-
getGlobalFilterFn: () => {
|
|
302
|
-
const { filterTypes: userFilterTypes, globalFilterType } =
|
|
303
|
-
instance.options
|
|
304
|
-
|
|
305
|
-
return isFunction(globalFilterType)
|
|
306
|
-
? globalFilterType
|
|
307
|
-
: globalFilterType === 'auto'
|
|
308
|
-
? instance.getGlobalAutoFilterFn()
|
|
309
|
-
: (userFilterTypes as Record<string, any>)?.[
|
|
310
|
-
globalFilterType as string
|
|
311
|
-
] ??
|
|
312
|
-
(filterTypes[
|
|
313
|
-
globalFilterType as BuiltInFilterType
|
|
314
|
-
] as FilterFn<TGenerics>)
|
|
315
|
-
},
|
|
316
|
-
|
|
317
|
-
setColumnFilters: (updater: Updater<ColumnFiltersState>) => {
|
|
318
|
-
const leafColumns = instance.getAllLeafColumns()
|
|
319
|
-
|
|
320
|
-
const updateFn = (old: ColumnFiltersState) => {
|
|
321
|
-
return functionalUpdate(updater, old)?.filter(filter => {
|
|
322
|
-
const column = leafColumns.find(d => d.id === filter.id)
|
|
323
|
-
|
|
324
|
-
if (column) {
|
|
325
|
-
const filterFn = instance.getColumnFilterFn(column.id)
|
|
326
|
-
|
|
327
|
-
if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {
|
|
328
|
-
return false
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
return true
|
|
333
|
-
})
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
instance.options.onColumnFiltersChange?.(
|
|
337
|
-
updateFn,
|
|
338
|
-
updateFn(instance.getState().columnFilters)
|
|
339
|
-
)
|
|
340
|
-
},
|
|
341
|
-
|
|
342
|
-
setGlobalFilter: updater => {
|
|
343
|
-
instance.options.onGlobalFilterChange?.(
|
|
344
|
-
updater,
|
|
345
|
-
functionalUpdate(updater, instance.getState().globalFilter)
|
|
346
|
-
)
|
|
347
|
-
},
|
|
348
|
-
|
|
349
|
-
resetGlobalFilter: () => {
|
|
350
|
-
instance.setGlobalFilter(undefined)
|
|
351
|
-
},
|
|
352
|
-
|
|
353
|
-
getColumnCanColumnFilter: columnId => {
|
|
354
|
-
const column = instance.getColumn(columnId)
|
|
355
|
-
|
|
356
|
-
if (!column) {
|
|
357
|
-
throw new Error()
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
return (
|
|
361
|
-
column.enableAllFilters ??
|
|
362
|
-
column.enableColumnFilter ??
|
|
363
|
-
instance.options.enableFilters ??
|
|
364
|
-
instance.options.enableColumnFilters ??
|
|
365
|
-
column.defaultCanFilter ??
|
|
366
|
-
column.defaultCanColumnFilter ??
|
|
367
|
-
!!column.accessorFn
|
|
368
|
-
)
|
|
369
|
-
},
|
|
370
|
-
|
|
371
|
-
getColumnCanGlobalFilter: columnId => {
|
|
372
|
-
const column = instance.getColumn(columnId)
|
|
373
|
-
|
|
374
|
-
if (!column) {
|
|
375
|
-
throw new Error()
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
return (
|
|
379
|
-
((instance.options.enableFilters ??
|
|
380
|
-
instance.options.enableGlobalFilter ??
|
|
381
|
-
column.enableAllFilters ??
|
|
382
|
-
column.enableGlobalFilter ??
|
|
383
|
-
column.defaultCanFilter ??
|
|
384
|
-
column.defaultCanGlobalFilter ??
|
|
385
|
-
!!column.accessorFn) &&
|
|
386
|
-
instance.options.getColumnCanGlobalFilterFn?.(column)) ??
|
|
387
|
-
true
|
|
388
|
-
)
|
|
389
|
-
},
|
|
390
|
-
|
|
391
|
-
getColumnIsFiltered: columnId =>
|
|
392
|
-
instance.getColumnFilterIndex(columnId) > -1,
|
|
393
|
-
|
|
394
|
-
getColumnFilterValue: columnId =>
|
|
395
|
-
instance.getState().columnFilters?.find(d => d.id === columnId)?.value,
|
|
396
|
-
|
|
397
|
-
getColumnFilterIndex: columnId =>
|
|
398
|
-
instance.getState().columnFilters?.findIndex(d => d.id === columnId) ??
|
|
399
|
-
-1,
|
|
400
|
-
|
|
401
|
-
setColumnFilterValue: (columnId, value) => {
|
|
402
|
-
if (!columnId) return
|
|
403
|
-
|
|
404
|
-
instance.setColumnFilters(old => {
|
|
405
|
-
const column = instance.getColumn(columnId)
|
|
406
|
-
|
|
407
|
-
if (!column) {
|
|
408
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
409
|
-
console.warn(
|
|
410
|
-
`React-Table: Could not find a column with id: ${columnId}`
|
|
411
|
-
)
|
|
412
|
-
}
|
|
413
|
-
throw new Error()
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
const filterFn = instance.getColumnFilterFn(column.id)
|
|
417
|
-
const previousfilter = old?.find(d => d.id === columnId)
|
|
418
|
-
|
|
419
|
-
const newFilter = functionalUpdate(
|
|
420
|
-
value,
|
|
421
|
-
previousfilter ? previousfilter.value : undefined
|
|
422
|
-
)
|
|
423
|
-
|
|
424
|
-
//
|
|
425
|
-
if (
|
|
426
|
-
shouldAutoRemoveFilter(
|
|
427
|
-
filterFn as FilterFn<TGenerics>,
|
|
428
|
-
newFilter,
|
|
429
|
-
column
|
|
430
|
-
)
|
|
431
|
-
) {
|
|
432
|
-
return old?.filter(d => d.id !== columnId) ?? []
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
const newFilterObj = { id: columnId, value: newFilter }
|
|
436
|
-
|
|
437
|
-
if (previousfilter) {
|
|
438
|
-
return (
|
|
439
|
-
old?.map(d => {
|
|
440
|
-
if (d.id === columnId) {
|
|
441
|
-
return newFilterObj
|
|
442
|
-
}
|
|
443
|
-
return d
|
|
444
|
-
}) ?? []
|
|
445
|
-
)
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
if (old?.length) {
|
|
449
|
-
return [...old, newFilterObj]
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
return [newFilterObj]
|
|
453
|
-
})
|
|
454
|
-
},
|
|
455
|
-
|
|
456
|
-
resetColumnFilters: () => {
|
|
457
|
-
instance.setColumnFilters(instance.initialState?.columnFilters ?? [])
|
|
458
|
-
},
|
|
459
|
-
|
|
460
|
-
getPreFilteredRowModel: () => instance.getCoreRowModel(),
|
|
461
|
-
getPreColumnFilteredRowModel: () => instance.getCoreRowModel(),
|
|
462
|
-
getColumnFilteredRowModel: memo(
|
|
463
|
-
() => [
|
|
464
|
-
instance.getState().columnFilters,
|
|
465
|
-
instance.getCoreRowModel(),
|
|
466
|
-
instance.options.columnFilterRowsFn,
|
|
467
|
-
],
|
|
468
|
-
(columnFilters, rowModel, columnFiltersFn) => {
|
|
469
|
-
const columnFilteredRowModel = (() => {
|
|
470
|
-
if (!columnFilters?.length || !columnFiltersFn) {
|
|
471
|
-
return rowModel
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
return columnFiltersFn(instance as any, rowModel)
|
|
475
|
-
})()
|
|
476
|
-
|
|
477
|
-
// Now that each filtered column has it's partially filtered rows,
|
|
478
|
-
// lets assign the final filtered rows to all of the other columns
|
|
479
|
-
const nonFilteredColumns = instance
|
|
480
|
-
.getAllLeafColumns()
|
|
481
|
-
.filter(
|
|
482
|
-
column =>
|
|
483
|
-
!instance.getState().columnFilters?.find(d => d.id === column.id)
|
|
484
|
-
)
|
|
485
|
-
|
|
486
|
-
// This essentially enables faceted filter options to be built easily
|
|
487
|
-
// using every column's preFilteredRows value
|
|
488
|
-
|
|
489
|
-
nonFilteredColumns.forEach(column => {
|
|
490
|
-
column.getPreFilteredRows = () => columnFilteredRowModel.rows
|
|
491
|
-
})
|
|
492
|
-
|
|
493
|
-
return columnFilteredRowModel
|
|
494
|
-
},
|
|
495
|
-
{
|
|
496
|
-
key: 'getColumnFilteredRowModel',
|
|
497
|
-
debug: () => instance.options.debugAll ?? instance.options.debugTable,
|
|
498
|
-
}
|
|
499
|
-
),
|
|
500
|
-
getPreGlobalFilteredRowModel: () => instance.getColumnFilteredRowModel(),
|
|
501
|
-
getGlobalFilteredRowModel: memo(
|
|
502
|
-
() => [
|
|
503
|
-
instance.getState().globalFilter,
|
|
504
|
-
instance.getColumnFilteredRowModel(),
|
|
505
|
-
instance.options.globalFilterRowsFn,
|
|
506
|
-
],
|
|
507
|
-
(globalFilterValue, columnFilteredRowModel, globalFiltersFn) => {
|
|
508
|
-
const globalFilteredRowModel = (() => {
|
|
509
|
-
if (!globalFiltersFn || !globalFilterValue) {
|
|
510
|
-
return columnFilteredRowModel
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
return globalFiltersFn(
|
|
514
|
-
instance as TableInstance<TGenerics>,
|
|
515
|
-
columnFilteredRowModel
|
|
516
|
-
)
|
|
517
|
-
})()
|
|
518
|
-
|
|
519
|
-
// Now that each filtered column has it's partially filtered rows,
|
|
520
|
-
// lets assign the final filtered rows to all of the other columns
|
|
521
|
-
const nonFilteredColumns = instance
|
|
522
|
-
.getAllLeafColumns()
|
|
523
|
-
.filter(
|
|
524
|
-
column =>
|
|
525
|
-
!instance.getState().columnFilters?.find(d => d.id === column.id)
|
|
526
|
-
)
|
|
527
|
-
|
|
528
|
-
// This essentially enables faceted filter options to be built easily
|
|
529
|
-
// using every column's preFilteredRows value
|
|
530
|
-
|
|
531
|
-
nonFilteredColumns.forEach(column => {
|
|
532
|
-
column.getPreFilteredRows = () => globalFilteredRowModel.rows
|
|
533
|
-
})
|
|
534
|
-
|
|
535
|
-
return globalFilteredRowModel
|
|
536
|
-
},
|
|
537
|
-
{
|
|
538
|
-
key: 'getGlobalFilteredRowModel',
|
|
539
|
-
debug: () => instance.options.debugAll ?? instance.options.debugTable,
|
|
540
|
-
onChange: () => {
|
|
541
|
-
instance._notifySortingReset()
|
|
542
|
-
},
|
|
543
|
-
}
|
|
544
|
-
),
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
export function shouldAutoRemoveFilter<TGenerics extends PartialGenerics>(
|
|
549
|
-
filterFn?: FilterFn<TGenerics>,
|
|
550
|
-
value?: any,
|
|
551
|
-
column?: Column<TGenerics>
|
|
552
|
-
) {
|
|
553
|
-
return (
|
|
554
|
-
(filterFn && filterFn.autoRemove
|
|
555
|
-
? filterFn.autoRemove(value, column)
|
|
556
|
-
: false) ||
|
|
557
|
-
typeof value === 'undefined' ||
|
|
558
|
-
(typeof value === 'string' && !value)
|
|
559
|
-
)
|
|
560
|
-
}
|