@tanstack/table-core 8.0.0-alpha.62 → 8.0.0-alpha.65
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 +8 -5
- package/build/cjs/core.js.map +1 -1
- package/build/cjs/features/Cells.js +1 -1
- package/build/cjs/features/Cells.js.map +1 -1
- package/build/cjs/features/ColumnSizing.js +3 -3
- package/build/cjs/features/ColumnSizing.js.map +1 -1
- package/build/cjs/features/Columns.js +7 -7
- package/build/cjs/features/Columns.js.map +1 -1
- package/build/cjs/features/Expanding.js +3 -3
- package/build/cjs/features/Expanding.js.map +1 -1
- package/build/cjs/features/Filters.js +158 -80
- package/build/cjs/features/Filters.js.map +1 -1
- package/build/cjs/features/Grouping.js +24 -22
- package/build/cjs/features/Grouping.js.map +1 -1
- package/build/cjs/features/Headers.js +16 -16
- package/build/cjs/features/Headers.js.map +1 -1
- package/build/cjs/features/Ordering.js +6 -5
- 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 +17 -78
- package/build/cjs/features/Pinning.js.map +1 -1
- package/build/cjs/features/RowSelection.js +8 -8
- package/build/cjs/features/RowSelection.js.map +1 -1
- package/build/cjs/features/Sorting.js +8 -8
- package/build/cjs/features/Sorting.js.map +1 -1
- package/build/cjs/features/Visibility.js +5 -5
- package/build/cjs/features/Visibility.js.map +1 -1
- package/build/cjs/filterFns.js +51 -108
- package/build/cjs/filterFns.js.map +1 -1
- package/build/cjs/index.js +5 -4
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/utils/filterRowsUtils.js +21 -0
- package/build/cjs/utils/filterRowsUtils.js.map +1 -1
- package/build/cjs/utils/getCoreRowModelAsync.js +1 -1
- package/build/cjs/utils/getCoreRowModelAsync.js.map +1 -1
- package/build/cjs/utils/getCoreRowModelSync.js +1 -1
- package/build/cjs/utils/getCoreRowModelSync.js.map +1 -1
- package/build/cjs/utils/getExpandedRowModel.js +1 -1
- package/build/cjs/utils/getExpandedRowModel.js.map +1 -1
- package/build/cjs/utils/getFilteredRowModelSync.js +130 -0
- package/build/cjs/utils/getFilteredRowModelSync.js.map +1 -0
- package/build/cjs/utils/getGroupedRowModel.js +1 -1
- package/build/cjs/utils/getGroupedRowModel.js.map +1 -1
- package/build/cjs/utils/getPaginationRowModel.js +1 -1
- package/build/cjs/utils/getPaginationRowModel.js.map +1 -1
- package/build/cjs/utils/getSortedRowModelSync.js +1 -1
- package/build/cjs/utils/getSortedRowModelSync.js.map +1 -1
- package/build/cjs/utils.js +2 -6
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +491 -573
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +388 -402
- package/build/types/features/Expanding.d.ts +2 -7
- package/build/types/features/Filters.d.ts +27 -29
- package/build/types/features/Grouping.d.ts +3 -11
- package/build/types/features/Ordering.d.ts +2 -6
- package/build/types/features/Pinning.d.ts +2 -15
- package/build/types/features/RowSelection.d.ts +3 -8
- package/build/types/features/Sorting.d.ts +2 -8
- package/build/types/features/Visibility.d.ts +2 -11
- package/build/types/filterFns.d.ts +10 -52
- package/build/types/index.d.ts +1 -2
- package/build/types/types.d.ts +2 -2
- package/build/types/utils/filterRowsUtils.d.ts +1 -0
- package/build/types/utils/{getColumnFilteredRowModelAsync.d.ts → getFilteredRowModelAsync.d.ts} +1 -1
- package/build/types/utils/getFilteredRowModelSync.d.ts +2 -0
- package/build/types/utils.d.ts +2 -2
- package/build/umd/index.development.js +494 -574
- 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 +2 -1
- package/src/core.ts +6 -5
- package/src/features/Cells.ts +3 -1
- package/src/features/ColumnSizing.ts +2 -1
- package/src/features/Columns.ts +11 -7
- package/src/features/Expanding.ts +4 -2
- package/src/features/Filters.ts +216 -116
- package/src/features/Grouping.ts +23 -21
- package/src/features/Headers.ts +16 -16
- package/src/features/Ordering.ts +7 -9
- package/src/features/Pagination.ts +4 -3
- package/src/features/Pinning.ts +16 -80
- package/src/features/RowSelection.ts +14 -9
- package/src/features/Sorting.ts +12 -12
- package/src/features/Visibility.ts +7 -4
- package/src/filterFns.ts +74 -147
- package/src/index.ts +1 -2
- package/src/types.ts +2 -0
- package/src/utils/filterRowsUtils.ts +24 -0
- package/src/utils/getCoreRowModelAsync.ts +1 -1
- package/src/utils/getCoreRowModelSync.ts +1 -1
- package/src/utils/getExpandedRowModel.ts +1 -1
- package/src/utils/getFilteredRowModelAsync.ts +49 -0
- package/src/utils/getFilteredRowModelSync.ts +150 -0
- package/src/utils/getGroupedRowModel.ts +1 -1
- package/src/utils/getPaginationRowModel.ts +1 -1
- package/src/utils/getSortedRowModelAsync.ts +1 -1
- package/src/utils/getSortedRowModelSync.ts +1 -1
- package/src/utils.ts +2 -4
- package/build/cjs/utils/getColumnFilteredRowModelSync.js +0 -115
- package/build/cjs/utils/getColumnFilteredRowModelSync.js.map +0 -1
- package/build/cjs/utils/getGlobalFilteredRowModelSync.js +0 -91
- package/build/cjs/utils/getGlobalFilteredRowModelSync.js.map +0 -1
- package/build/types/utils/getColumnFilteredRowModelSync.d.ts +0 -2
- package/build/types/utils/getGlobalFilteredRowModelAsync.d.ts +0 -4
- package/build/types/utils/getGlobalFilteredRowModelSync.d.ts +0 -2
- package/src/utils/getColumnFilteredRowModelAsync.ts +0 -118
- package/src/utils/getColumnFilteredRowModelSync.ts +0 -102
- package/src/utils/getGlobalFilteredRowModelAsync.ts +0 -96
- package/src/utils/getGlobalFilteredRowModelSync.ts +0 -79
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/table-core",
|
|
3
3
|
"author": "Tanner Linsley",
|
|
4
|
-
"version": "8.0.0-alpha.
|
|
4
|
+
"version": "8.0.0-alpha.65",
|
|
5
5
|
"description": "Hooks for building lightweight, fast and extendable datagrids for React",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://github.com/tanstack/react-table#readme",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"main": "build/cjs/index.js",
|
|
29
29
|
"browser": "build/umd/index.production.min.js",
|
|
30
30
|
"types": "build/types/index.d.ts",
|
|
31
|
+
"sideEffects": false,
|
|
31
32
|
"engines": {
|
|
32
33
|
"node": ">=12"
|
|
33
34
|
},
|
package/src/core.ts
CHANGED
|
@@ -116,14 +116,15 @@ export function createTableInstance<TGenerics extends TableGenerics>(
|
|
|
116
116
|
coreProgress: 1,
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
let initialState = {
|
|
120
120
|
...coreInitialState,
|
|
121
121
|
...(options.initialState ?? {}),
|
|
122
|
-
...instance._features.reduce((obj, feature) => {
|
|
123
|
-
return Object.assign(obj, feature.getInitialState?.(options.initialState))
|
|
124
|
-
}, {}),
|
|
125
122
|
} as TableState
|
|
126
123
|
|
|
124
|
+
instance._features.forEach(feature => {
|
|
125
|
+
initialState = feature.getInitialState?.(initialState) ?? initialState
|
|
126
|
+
})
|
|
127
|
+
|
|
127
128
|
const queued: (() => void)[] = []
|
|
128
129
|
let queuedTimeout = false
|
|
129
130
|
|
|
@@ -142,8 +143,8 @@ export function createTableInstance<TGenerics extends TableGenerics>(
|
|
|
142
143
|
// the current call stack (render, etc) has finished.
|
|
143
144
|
Promise.resolve()
|
|
144
145
|
.then(() => {
|
|
145
|
-
console.log(queued)
|
|
146
146
|
while (queued.length) {
|
|
147
|
+
console.log('queue')
|
|
147
148
|
queued.shift()!()
|
|
148
149
|
}
|
|
149
150
|
queuedTimeout = false
|
package/src/features/Cells.ts
CHANGED
|
@@ -56,7 +56,9 @@ export const Cells = {
|
|
|
56
56
|
}, {} as Record<string, Cell<TGenerics>>)
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
|
-
key:
|
|
59
|
+
key:
|
|
60
|
+
process.env.NODE_ENV === 'production' &&
|
|
61
|
+
'row.getAllCellsByColumnId',
|
|
60
62
|
debug: () => instance.options.debugAll ?? instance.options.debugRows,
|
|
61
63
|
}
|
|
62
64
|
),
|
|
@@ -98,7 +98,7 @@ export const ColumnSizing: TableFeature = {
|
|
|
98
98
|
getDefaultColumn: (): ColumnSizingColumnDef => {
|
|
99
99
|
return defaultColumnSizing
|
|
100
100
|
},
|
|
101
|
-
getInitialState: (): ColumnSizingTableState => {
|
|
101
|
+
getInitialState: (state): ColumnSizingTableState => {
|
|
102
102
|
return {
|
|
103
103
|
columnSizing: {},
|
|
104
104
|
columnSizingInfo: {
|
|
@@ -109,6 +109,7 @@ export const ColumnSizing: TableFeature = {
|
|
|
109
109
|
isResizingColumn: false,
|
|
110
110
|
columnSizingStart: [],
|
|
111
111
|
},
|
|
112
|
+
...state,
|
|
112
113
|
}
|
|
113
114
|
},
|
|
114
115
|
|
package/src/features/Columns.ts
CHANGED
|
@@ -108,7 +108,7 @@ export const Columns = {
|
|
|
108
108
|
{
|
|
109
109
|
debug: () =>
|
|
110
110
|
instance.options.debugAll ?? instance.options.debugColumns,
|
|
111
|
-
key: 'getDefaultColumn',
|
|
111
|
+
key: process.env.NODE_ENV === 'production' && 'getDefaultColumn',
|
|
112
112
|
}
|
|
113
113
|
),
|
|
114
114
|
|
|
@@ -165,7 +165,9 @@ export const Columns = {
|
|
|
165
165
|
]
|
|
166
166
|
},
|
|
167
167
|
{
|
|
168
|
-
key:
|
|
168
|
+
key:
|
|
169
|
+
process.env.NODE_ENV === 'production' &&
|
|
170
|
+
'column.getFlatColumns',
|
|
169
171
|
debug: () =>
|
|
170
172
|
instance.options.debugAll ?? instance.options.debugColumns,
|
|
171
173
|
}
|
|
@@ -184,7 +186,9 @@ export const Columns = {
|
|
|
184
186
|
return [column as Column<TGenerics>]
|
|
185
187
|
},
|
|
186
188
|
{
|
|
187
|
-
key:
|
|
189
|
+
key:
|
|
190
|
+
process.env.NODE_ENV === 'production' &&
|
|
191
|
+
'column.getLeafColumns',
|
|
188
192
|
debug: () =>
|
|
189
193
|
instance.options.debugAll ?? instance.options.debugColumns,
|
|
190
194
|
}
|
|
@@ -221,7 +225,7 @@ export const Columns = {
|
|
|
221
225
|
return recurseColumns(columnDefs)
|
|
222
226
|
},
|
|
223
227
|
{
|
|
224
|
-
key: 'getAllColumns',
|
|
228
|
+
key: process.env.NODE_ENV === 'production' && 'getAllColumns',
|
|
225
229
|
debug: () =>
|
|
226
230
|
instance.options.debugAll ?? instance.options.debugColumns,
|
|
227
231
|
}
|
|
@@ -235,7 +239,7 @@ export const Columns = {
|
|
|
235
239
|
})
|
|
236
240
|
},
|
|
237
241
|
{
|
|
238
|
-
key: 'getAllFlatColumns',
|
|
242
|
+
key: process.env.NODE_ENV === 'production' && 'getAllFlatColumns',
|
|
239
243
|
debug: () =>
|
|
240
244
|
instance.options.debugAll ?? instance.options.debugColumns,
|
|
241
245
|
}
|
|
@@ -250,7 +254,7 @@ export const Columns = {
|
|
|
250
254
|
}, {} as Record<string, Column<TGenerics>>)
|
|
251
255
|
},
|
|
252
256
|
{
|
|
253
|
-
key: 'getAllFlatColumnsById',
|
|
257
|
+
key: process.env.NODE_ENV === 'production' && 'getAllFlatColumnsById',
|
|
254
258
|
debug: () =>
|
|
255
259
|
instance.options.debugAll ?? instance.options.debugColumns,
|
|
256
260
|
}
|
|
@@ -265,7 +269,7 @@ export const Columns = {
|
|
|
265
269
|
return orderColumns(leafColumns)
|
|
266
270
|
},
|
|
267
271
|
{
|
|
268
|
-
key: 'getAllLeafColumns',
|
|
272
|
+
key: process.env.NODE_ENV === 'production' && 'getAllLeafColumns',
|
|
269
273
|
debug: () =>
|
|
270
274
|
instance.options.debugAll ?? instance.options.debugColumns,
|
|
271
275
|
}
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
TableInstance,
|
|
6
6
|
Row,
|
|
7
7
|
Updater,
|
|
8
|
+
TableFeature,
|
|
8
9
|
} from '../types'
|
|
9
10
|
import { makeStateUpdater } from '../utils'
|
|
10
11
|
|
|
@@ -57,10 +58,11 @@ export type ExpandedInstance<TGenerics extends TableGenerics> = {
|
|
|
57
58
|
|
|
58
59
|
//
|
|
59
60
|
|
|
60
|
-
export const Expanding = {
|
|
61
|
-
getInitialState: (): ExpandedTableState => {
|
|
61
|
+
export const Expanding: TableFeature = {
|
|
62
|
+
getInitialState: (state): ExpandedTableState => {
|
|
62
63
|
return {
|
|
63
64
|
expanded: {},
|
|
65
|
+
...state,
|
|
64
66
|
}
|
|
65
67
|
},
|
|
66
68
|
|
package/src/features/Filters.ts
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
TableInstance,
|
|
8
8
|
Row,
|
|
9
9
|
Updater,
|
|
10
|
+
TableFeature,
|
|
10
11
|
} from '../types'
|
|
11
12
|
import {
|
|
12
13
|
functionalUpdate,
|
|
@@ -15,6 +16,7 @@ import {
|
|
|
15
16
|
memo,
|
|
16
17
|
Overwrite,
|
|
17
18
|
} from '../utils'
|
|
19
|
+
import { filterRows } from '../utils/filterRowsUtils'
|
|
18
20
|
|
|
19
21
|
export type FiltersTableState = {
|
|
20
22
|
columnFilters: ColumnFiltersState
|
|
@@ -30,17 +32,19 @@ export type ColumnFilter = {
|
|
|
30
32
|
value: unknown
|
|
31
33
|
}
|
|
32
34
|
|
|
33
|
-
/*
|
|
34
|
-
A filter function is any function that takes an array of rows and returns an array of rows. Because filter functions can be used for both column and global filters, they are passed an array of columnIds to filter on.
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
35
|
export type FilterFn<TGenerics extends TableGenerics> = {
|
|
38
|
-
(
|
|
36
|
+
(row: Row<TGenerics>, columnId: string, filterValue: any): boolean
|
|
37
|
+
resolveFilterValue?: TransformFilterValueFn<TGenerics>
|
|
39
38
|
autoRemove?: ColumnFilterAutoRemoveTestFn<TGenerics>
|
|
40
39
|
}
|
|
41
40
|
|
|
41
|
+
export type TransformFilterValueFn<TGenerics extends TableGenerics> = (
|
|
42
|
+
value: any,
|
|
43
|
+
column?: Column<TGenerics>
|
|
44
|
+
) => unknown
|
|
45
|
+
|
|
42
46
|
export type ColumnFilterAutoRemoveTestFn<TGenerics extends TableGenerics> = (
|
|
43
|
-
value:
|
|
47
|
+
value: any,
|
|
44
48
|
column?: Column<TGenerics>
|
|
45
49
|
) => boolean
|
|
46
50
|
|
|
@@ -57,12 +61,9 @@ export type FilterFnOption<TGenerics extends TableGenerics> =
|
|
|
57
61
|
|
|
58
62
|
export type FiltersColumnDef<TGenerics extends TableGenerics> = {
|
|
59
63
|
filterFn?: FilterFnOption<Overwrite<TGenerics, { Value: any }>>
|
|
60
|
-
enableAllFilters?: boolean
|
|
61
64
|
enableColumnFilter?: boolean
|
|
62
65
|
enableGlobalFilter?: boolean
|
|
63
|
-
|
|
64
|
-
defaultCanColumnFilter?: boolean
|
|
65
|
-
defaultCanGlobalFilter?: boolean
|
|
66
|
+
enableFaceting?: boolean
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
export type FiltersColumn<TGenerics extends TableGenerics> = {
|
|
@@ -73,31 +74,34 @@ export type FiltersColumn<TGenerics extends TableGenerics> = {
|
|
|
73
74
|
getColumnIsFiltered: () => boolean
|
|
74
75
|
getColumnFilterValue: () => unknown
|
|
75
76
|
setColumnFilterValue: (updater: Updater<any>) => void
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
getFacetedRowModel: () => RowModel<TGenerics>
|
|
78
|
+
getFacetedUniqueValues: () => Map<any, number>
|
|
79
|
+
getFacetedMinMaxValues: () => [any, any]
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export type FiltersRow<TGenerics extends TableGenerics> = {
|
|
83
|
+
columnFilterMap: Record<string, boolean>
|
|
84
|
+
subRowsByFacetId: Record<string, Row<TGenerics>[]>
|
|
79
85
|
}
|
|
80
86
|
|
|
81
87
|
export type FiltersOptions<TGenerics extends TableGenerics> = {
|
|
88
|
+
enableFilters?: boolean
|
|
89
|
+
manualFiltering?: boolean
|
|
82
90
|
filterFromLeafRows?: boolean
|
|
83
91
|
filterFns?: TGenerics['FilterFns']
|
|
84
|
-
|
|
92
|
+
|
|
85
93
|
// Column
|
|
86
|
-
manualColumnFiltering?: boolean
|
|
87
94
|
onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>
|
|
88
95
|
enableColumnFilters?: boolean
|
|
89
|
-
|
|
96
|
+
getFilteredRowModel?: (
|
|
90
97
|
instance: TableInstance<TGenerics>
|
|
91
98
|
) => () => RowModel<TGenerics>
|
|
99
|
+
|
|
92
100
|
// Global
|
|
93
|
-
manualGlobalFiltering?: boolean
|
|
94
101
|
globalFilterFn?: FilterFnOption<TGenerics>
|
|
95
102
|
onGlobalFilterChange?: OnChangeFn<any>
|
|
96
103
|
enableGlobalFilter?: boolean
|
|
97
|
-
|
|
98
|
-
instance: TableInstance<TGenerics>
|
|
99
|
-
) => () => RowModel<TGenerics>
|
|
100
|
-
getColumnCanGlobalFilterFn?: (column: Column<TGenerics>) => boolean
|
|
104
|
+
getColumnCanGlobalFilter?: (column: Column<TGenerics>) => boolean
|
|
101
105
|
}
|
|
102
106
|
|
|
103
107
|
export type FiltersInstance<TGenerics extends TableGenerics> = {
|
|
@@ -109,15 +113,16 @@ export type FiltersInstance<TGenerics extends TableGenerics> = {
|
|
|
109
113
|
setColumnFilterValue: (columnId: string, updater: Updater<any>) => void
|
|
110
114
|
resetColumnFilters: () => void
|
|
111
115
|
getColumnCanColumnFilter: (columnId: string) => boolean
|
|
116
|
+
getColumnFacetedRowModel: (columnId: string) => RowModel<TGenerics>
|
|
112
117
|
|
|
113
118
|
getColumnIsFiltered: (columnId: string) => boolean
|
|
114
119
|
getColumnFilterValue: (columnId: string) => unknown
|
|
115
120
|
getColumnFilterIndex: (columnId: string) => number
|
|
116
121
|
|
|
117
122
|
// Column Filters
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
123
|
+
getPreFilteredRowModel: () => RowModel<TGenerics>
|
|
124
|
+
getFilteredRowModel: () => RowModel<TGenerics>
|
|
125
|
+
_getFilteredRowModel?: () => RowModel<TGenerics>
|
|
121
126
|
|
|
122
127
|
// Global Filters
|
|
123
128
|
setGlobalFilter: (updater: Updater<any>) => void
|
|
@@ -125,14 +130,14 @@ export type FiltersInstance<TGenerics extends TableGenerics> = {
|
|
|
125
130
|
getGlobalAutoFilterFn: () => FilterFn<TGenerics> | undefined
|
|
126
131
|
getGlobalFilterFn: () => FilterFn<TGenerics> | undefined
|
|
127
132
|
getColumnCanGlobalFilter: (columnId: string) => boolean
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
133
|
+
getGlobalFacetedRowModel: () => RowModel<TGenerics>
|
|
134
|
+
getGlobalFacetedUniqueValues: () => Map<any, number>
|
|
135
|
+
getGlobalFacetedMinMaxValues: () => [number, number]
|
|
131
136
|
}
|
|
132
137
|
|
|
133
138
|
//
|
|
134
139
|
|
|
135
|
-
export const Filters = {
|
|
140
|
+
export const Filters: TableFeature = {
|
|
136
141
|
getDefaultColumn: <
|
|
137
142
|
TGenerics extends TableGenerics
|
|
138
143
|
>(): FiltersColumnDef<TGenerics> => {
|
|
@@ -141,12 +146,13 @@ export const Filters = {
|
|
|
141
146
|
}
|
|
142
147
|
},
|
|
143
148
|
|
|
144
|
-
getInitialState: (): FiltersTableState => {
|
|
149
|
+
getInitialState: (state): FiltersTableState => {
|
|
145
150
|
return {
|
|
146
151
|
columnFilters: [],
|
|
147
152
|
globalFilter: undefined,
|
|
148
153
|
columnFiltersProgress: 1,
|
|
149
154
|
globalFilterProgress: 1,
|
|
155
|
+
...state,
|
|
150
156
|
}
|
|
151
157
|
},
|
|
152
158
|
|
|
@@ -158,7 +164,7 @@ export const Filters = {
|
|
|
158
164
|
onGlobalFilterChange: makeStateUpdater('globalFilter', instance),
|
|
159
165
|
filterFromLeafRows: true,
|
|
160
166
|
globalFilterFn: 'auto',
|
|
161
|
-
|
|
167
|
+
getColumnCanGlobalFilter: column => {
|
|
162
168
|
const value = instance
|
|
163
169
|
.getCoreRowModel()
|
|
164
170
|
.flatRows[0]?.getAllCellsByColumnId()[column.id]?.value
|
|
@@ -172,46 +178,6 @@ export const Filters = {
|
|
|
172
178
|
column: Column<TGenerics>,
|
|
173
179
|
instance: TableInstance<TGenerics>
|
|
174
180
|
): FiltersColumn<TGenerics> => {
|
|
175
|
-
const getFacetInfo = memo(
|
|
176
|
-
() => [column.getPreFilteredRows()],
|
|
177
|
-
(rows = []) => {
|
|
178
|
-
let preFilteredUniqueValues = new Map<any, number>()
|
|
179
|
-
|
|
180
|
-
let preFilteredMinMaxValues: [any, any] = [
|
|
181
|
-
rows[0]?.values[column.id] ?? null,
|
|
182
|
-
rows[0]?.values[column.id] ?? null,
|
|
183
|
-
]
|
|
184
|
-
|
|
185
|
-
for (let i = 0; i < rows.length; i++) {
|
|
186
|
-
const value = rows[i]?.values[column.id]
|
|
187
|
-
|
|
188
|
-
if (preFilteredUniqueValues.has(value)) {
|
|
189
|
-
preFilteredUniqueValues.set(
|
|
190
|
-
value,
|
|
191
|
-
(preFilteredUniqueValues.get(value) ?? 0) + 1
|
|
192
|
-
)
|
|
193
|
-
} else {
|
|
194
|
-
preFilteredUniqueValues.set(value, 1)
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
if (value < preFilteredMinMaxValues[0]) {
|
|
198
|
-
preFilteredMinMaxValues[0] = value
|
|
199
|
-
} else if (value > preFilteredMinMaxValues[1]) {
|
|
200
|
-
preFilteredMinMaxValues[1] = value
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return {
|
|
205
|
-
preFilteredUniqueValues,
|
|
206
|
-
preFilteredMinMaxValues,
|
|
207
|
-
}
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
key: 'column.getFacetInfo',
|
|
211
|
-
debug: () => instance.options.debugAll ?? instance.options.debugColumns,
|
|
212
|
-
}
|
|
213
|
-
)
|
|
214
|
-
|
|
215
181
|
return {
|
|
216
182
|
filterFn: column.filterFn,
|
|
217
183
|
getCanColumnFilter: () => instance.getColumnCanColumnFilter(column.id),
|
|
@@ -221,9 +187,68 @@ export const Filters = {
|
|
|
221
187
|
getColumnFilterValue: () => instance.getColumnFilterValue(column.id),
|
|
222
188
|
setColumnFilterValue: val =>
|
|
223
189
|
instance.setColumnFilterValue(column.id, val),
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
190
|
+
getFacetedRowModel: memo(
|
|
191
|
+
() => [
|
|
192
|
+
instance.getPreFilteredRowModel(),
|
|
193
|
+
instance.getState().columnFilters,
|
|
194
|
+
instance.getState().globalFilter,
|
|
195
|
+
// Include this to force the filtered facet info to be calculated
|
|
196
|
+
instance.getFilteredRowModel(),
|
|
197
|
+
],
|
|
198
|
+
(rowModel, columnFilters, globalFilter, _) => {
|
|
199
|
+
if (!columnFilters?.length && !globalFilter) {
|
|
200
|
+
return rowModel
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return filterRows(
|
|
204
|
+
rowModel.rows,
|
|
205
|
+
[
|
|
206
|
+
...columnFilters.map(d => d.id).filter(d => d !== column.id),
|
|
207
|
+
globalFilter ? '__global__' : undefined,
|
|
208
|
+
].filter(Boolean) as string[],
|
|
209
|
+
instance
|
|
210
|
+
)
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
key:
|
|
214
|
+
process.env.NODE_ENV === 'production' &&
|
|
215
|
+
'getFacetedRowModel_' + column.id,
|
|
216
|
+
debug: () =>
|
|
217
|
+
instance.options.debugAll ?? instance.options.debugColumns,
|
|
218
|
+
}
|
|
219
|
+
),
|
|
220
|
+
getFacetedUniqueValues: memo(
|
|
221
|
+
() => [column.getFacetedRowModel()],
|
|
222
|
+
facetedRowModel => getRowModelUniqueValues(facetedRowModel, column.id),
|
|
223
|
+
{
|
|
224
|
+
key:
|
|
225
|
+
process.env.NODE_ENV === 'production' &&
|
|
226
|
+
'column.getFacetedUniqueValues',
|
|
227
|
+
debug: () =>
|
|
228
|
+
instance.options.debugAll ?? instance.options.debugColumns,
|
|
229
|
+
}
|
|
230
|
+
),
|
|
231
|
+
getFacetedMinMaxValues: memo(
|
|
232
|
+
() => [column.getFacetedRowModel()],
|
|
233
|
+
facetedRowModel => getRowModelMinMaxValues(facetedRowModel, column.id),
|
|
234
|
+
{
|
|
235
|
+
key:
|
|
236
|
+
process.env.NODE_ENV === 'production' &&
|
|
237
|
+
'column.getFacetedMinMaxValues',
|
|
238
|
+
debug: () =>
|
|
239
|
+
instance.options.debugAll ?? instance.options.debugColumns,
|
|
240
|
+
}
|
|
241
|
+
),
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
|
|
245
|
+
createRow: <TGenerics extends TableGenerics>(
|
|
246
|
+
row: Row<TGenerics>,
|
|
247
|
+
instance: TableInstance<TGenerics>
|
|
248
|
+
): FiltersRow<TGenerics> => {
|
|
249
|
+
return {
|
|
250
|
+
columnFilterMap: {},
|
|
251
|
+
subRowsByFacetId: {},
|
|
227
252
|
}
|
|
228
253
|
},
|
|
229
254
|
|
|
@@ -241,7 +266,7 @@ export const Filters = {
|
|
|
241
266
|
}
|
|
242
267
|
|
|
243
268
|
if (typeof value === 'number') {
|
|
244
|
-
return filterFns.
|
|
269
|
+
return filterFns.inNumberRange
|
|
245
270
|
}
|
|
246
271
|
|
|
247
272
|
if (value !== null && typeof value === 'object') {
|
|
@@ -254,6 +279,15 @@ export const Filters = {
|
|
|
254
279
|
|
|
255
280
|
return filterFns.weakEquals
|
|
256
281
|
},
|
|
282
|
+
getColumnFacetedRowModel: columnId => {
|
|
283
|
+
const column = instance.getColumn(columnId)
|
|
284
|
+
|
|
285
|
+
if (!column) {
|
|
286
|
+
throw new Error()
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return column.getFacetedRowModel()
|
|
290
|
+
},
|
|
257
291
|
getGlobalAutoFilterFn: () => {
|
|
258
292
|
return filterFns.includesString
|
|
259
293
|
},
|
|
@@ -331,12 +365,9 @@ export const Filters = {
|
|
|
331
365
|
}
|
|
332
366
|
|
|
333
367
|
return (
|
|
334
|
-
column.
|
|
335
|
-
|
|
336
|
-
instance.options.enableFilters ??
|
|
337
|
-
instance.options.enableColumnFilters ??
|
|
338
|
-
column.defaultCanColumnFilter ??
|
|
339
|
-
column.defaultCanFilter ??
|
|
368
|
+
(column.enableColumnFilter ?? true) &&
|
|
369
|
+
(instance.options.enableColumnFilters ?? true) &&
|
|
370
|
+
(instance.options.enableFilters ?? true) &&
|
|
340
371
|
!!column.accessorFn
|
|
341
372
|
)
|
|
342
373
|
},
|
|
@@ -349,15 +380,11 @@ export const Filters = {
|
|
|
349
380
|
}
|
|
350
381
|
|
|
351
382
|
return (
|
|
352
|
-
(
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
column.defaultCanFilter ??
|
|
358
|
-
!!column.accessorFn) &&
|
|
359
|
-
instance.options.getColumnCanGlobalFilterFn?.(column)) ??
|
|
360
|
-
true
|
|
383
|
+
(column.enableGlobalFilter ?? true) &&
|
|
384
|
+
(instance.options.enableGlobalFilter ?? true) &&
|
|
385
|
+
(instance.options.enableFilters ?? true) &&
|
|
386
|
+
(instance.options.getColumnCanGlobalFilter?.(column) ?? true) &&
|
|
387
|
+
!!column.accessorFn
|
|
361
388
|
)
|
|
362
389
|
},
|
|
363
390
|
|
|
@@ -430,44 +457,76 @@ export const Filters = {
|
|
|
430
457
|
instance.setColumnFilters(instance.initialState?.columnFilters ?? [])
|
|
431
458
|
},
|
|
432
459
|
|
|
433
|
-
|
|
434
|
-
|
|
460
|
+
getPreFilteredRowModel: () => instance.getCoreRowModel(),
|
|
461
|
+
getFilteredRowModel: () => {
|
|
435
462
|
if (
|
|
436
|
-
!instance.
|
|
437
|
-
instance.options.
|
|
463
|
+
!instance._getFilteredRowModel &&
|
|
464
|
+
instance.options.getFilteredRowModel
|
|
438
465
|
) {
|
|
439
|
-
instance.
|
|
440
|
-
instance.options.
|
|
466
|
+
instance._getFilteredRowModel =
|
|
467
|
+
instance.options.getFilteredRowModel(instance)
|
|
441
468
|
}
|
|
442
469
|
|
|
443
470
|
if (
|
|
444
|
-
instance.options.
|
|
445
|
-
!instance.
|
|
471
|
+
instance.options.manualFiltering ||
|
|
472
|
+
!instance._getFilteredRowModel
|
|
446
473
|
) {
|
|
447
|
-
return instance.
|
|
474
|
+
return instance.getPreFilteredRowModel()
|
|
448
475
|
}
|
|
449
476
|
|
|
450
|
-
return instance.
|
|
477
|
+
return instance._getFilteredRowModel()
|
|
451
478
|
},
|
|
452
|
-
getPreGlobalFilteredRowModel: () => instance.getColumnFilteredRowModel(),
|
|
453
|
-
getGlobalFilteredRowModel: () => {
|
|
454
|
-
if (
|
|
455
|
-
!instance._getGlobalFilteredRowModel &&
|
|
456
|
-
instance.options.getGlobalFilteredRowModel
|
|
457
|
-
) {
|
|
458
|
-
instance._getGlobalFilteredRowModel =
|
|
459
|
-
instance.options.getGlobalFilteredRowModel(instance)
|
|
460
|
-
}
|
|
461
479
|
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
480
|
+
getGlobalFacetedRowModel: memo(
|
|
481
|
+
() => [
|
|
482
|
+
instance.getPreFilteredRowModel(),
|
|
483
|
+
instance.getState().columnFilters,
|
|
484
|
+
instance.getState().globalFilter,
|
|
485
|
+
// Include this to force the filtered facet info to be calculated
|
|
486
|
+
instance.getFilteredRowModel(),
|
|
487
|
+
],
|
|
488
|
+
(rowModel, columnFilters, globalFilter, _) => {
|
|
489
|
+
if (!columnFilters?.length && !globalFilter) {
|
|
490
|
+
return rowModel
|
|
491
|
+
}
|
|
468
492
|
|
|
469
|
-
|
|
470
|
-
|
|
493
|
+
return filterRows(
|
|
494
|
+
rowModel.rows,
|
|
495
|
+
columnFilters.map(d => d.id),
|
|
496
|
+
instance
|
|
497
|
+
)
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
key:
|
|
501
|
+
process.env.NODE_ENV === 'production' && 'getGlobalFacetedRowModel',
|
|
502
|
+
debug: () =>
|
|
503
|
+
instance.options.debugAll ?? instance.options.debugColumns,
|
|
504
|
+
}
|
|
505
|
+
),
|
|
506
|
+
getGlobalFacetedUniqueValues: memo(
|
|
507
|
+
() => [instance.getGlobalFacetedRowModel()],
|
|
508
|
+
facetedRowModel =>
|
|
509
|
+
getRowModelUniqueValues(facetedRowModel, '__global__'),
|
|
510
|
+
{
|
|
511
|
+
key:
|
|
512
|
+
process.env.NODE_ENV === 'production' &&
|
|
513
|
+
'getGlobalFacetedUniqueValues',
|
|
514
|
+
debug: () =>
|
|
515
|
+
instance.options.debugAll ?? instance.options.debugColumns,
|
|
516
|
+
}
|
|
517
|
+
),
|
|
518
|
+
getGlobalFacetedMinMaxValues: memo(
|
|
519
|
+
() => [instance.getGlobalFacetedRowModel()],
|
|
520
|
+
facetedRowModel =>
|
|
521
|
+
getRowModelMinMaxValues(facetedRowModel, '__global__'),
|
|
522
|
+
{
|
|
523
|
+
key:
|
|
524
|
+
process.env.NODE_ENV === 'production' &&
|
|
525
|
+
'getGlobalFacetedMinMaxValues',
|
|
526
|
+
debug: () =>
|
|
527
|
+
instance.options.debugAll ?? instance.options.debugColumns,
|
|
528
|
+
}
|
|
529
|
+
),
|
|
471
530
|
}
|
|
472
531
|
},
|
|
473
532
|
}
|
|
@@ -485,3 +544,44 @@ export function shouldAutoRemoveFilter<TGenerics extends TableGenerics>(
|
|
|
485
544
|
(typeof value === 'string' && !value)
|
|
486
545
|
)
|
|
487
546
|
}
|
|
547
|
+
|
|
548
|
+
export function getRowModelMinMaxValues<TGenerics extends TableGenerics>(
|
|
549
|
+
rowModel: RowModel<TGenerics>,
|
|
550
|
+
columnId: string
|
|
551
|
+
) {
|
|
552
|
+
let facetedMinMaxValues: [any, any] = [
|
|
553
|
+
rowModel.flatRows[0]?.values[columnId] ?? null,
|
|
554
|
+
rowModel.flatRows[0]?.values[columnId] ?? null,
|
|
555
|
+
]
|
|
556
|
+
|
|
557
|
+
for (let i = 0; i < rowModel.flatRows.length; i++) {
|
|
558
|
+
const value = rowModel.flatRows[i]?.values[columnId]
|
|
559
|
+
|
|
560
|
+
if (value < facetedMinMaxValues[0]) {
|
|
561
|
+
facetedMinMaxValues[0] = value
|
|
562
|
+
} else if (value > facetedMinMaxValues[1]) {
|
|
563
|
+
facetedMinMaxValues[1] = value
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
return facetedMinMaxValues
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
export function getRowModelUniqueValues<TGenerics extends TableGenerics>(
|
|
571
|
+
rowModel: RowModel<TGenerics>,
|
|
572
|
+
columnId: string
|
|
573
|
+
) {
|
|
574
|
+
let facetedUniqueValues = new Map<any, number>()
|
|
575
|
+
|
|
576
|
+
for (let i = 0; i < rowModel.flatRows.length; i++) {
|
|
577
|
+
const value = rowModel.flatRows[i]?.values[columnId]
|
|
578
|
+
|
|
579
|
+
if (facetedUniqueValues.has(value)) {
|
|
580
|
+
facetedUniqueValues.set(value, (facetedUniqueValues.get(value) ?? 0) + 1)
|
|
581
|
+
} else {
|
|
582
|
+
facetedUniqueValues.set(value, 1)
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
return facetedUniqueValues
|
|
587
|
+
}
|