@tanstack/table-core 8.1.4 → 8.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/aggregationFns.js.map +1 -1
- package/build/cjs/core/cell.js.map +1 -1
- package/build/cjs/core/column.js.map +1 -1
- package/build/cjs/core/headers.js.map +1 -1
- package/build/cjs/core/row.js.map +1 -1
- package/build/cjs/core/table.js +2 -2
- package/build/cjs/core/table.js.map +1 -1
- package/build/cjs/features/ColumnSizing.js.map +1 -1
- package/build/cjs/features/Filters.js.map +1 -1
- package/build/cjs/features/Grouping.js.map +1 -1
- package/build/cjs/features/Ordering.js.map +1 -1
- package/build/cjs/features/Pinning.js.map +1 -1
- package/build/cjs/features/Sorting.js +33 -26
- package/build/cjs/features/Sorting.js.map +1 -1
- package/build/cjs/features/Visibility.js.map +1 -1
- package/build/cjs/filterFns.js.map +1 -1
- package/build/cjs/sortingFns.js +6 -1
- package/build/cjs/sortingFns.js.map +1 -1
- package/build/cjs/utils/getCoreRowModel.js.map +1 -1
- package/build/cjs/utils/getFacetedMinMaxValues.js +1 -3
- package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -1
- package/build/cjs/utils/getGroupedRowModel.js +1 -1
- package/build/cjs/utils/getGroupedRowModel.js.map +1 -1
- package/build/esm/index.js +43 -33
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +310 -310
- package/build/types/index.d.ts +94 -90
- package/build/umd/index.development.js +43 -33
- 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/aggregationFns.ts +8 -11
- package/src/core/cell.ts +14 -14
- package/src/core/column.ts +58 -47
- package/src/core/headers.ts +32 -32
- package/src/core/row.ts +9 -9
- package/src/core/table.ts +11 -10
- package/src/features/ColumnSizing.ts +5 -5
- package/src/features/Filters.ts +9 -14
- package/src/features/Grouping.ts +15 -10
- package/src/features/Ordering.ts +4 -2
- package/src/features/Pinning.ts +10 -10
- package/src/features/Sorting.ts +40 -29
- package/src/features/Visibility.ts +11 -11
- package/src/filterFns.ts +13 -7
- package/src/sortingFns.ts +7 -4
- package/src/types.ts +16 -12
- package/src/utils/getCoreRowModel.ts +1 -1
- package/src/utils/getFacetedMinMaxValues.ts +1 -1
- package/src/utils/getGroupedRowModel.ts +7 -1
package/src/features/Filters.ts
CHANGED
|
@@ -9,14 +9,9 @@ import {
|
|
|
9
9
|
Row,
|
|
10
10
|
Updater,
|
|
11
11
|
RowData,
|
|
12
|
+
FilterMeta,
|
|
12
13
|
} from '../types'
|
|
13
|
-
import {
|
|
14
|
-
functionalUpdate,
|
|
15
|
-
isFunction,
|
|
16
|
-
makeStateUpdater,
|
|
17
|
-
memo,
|
|
18
|
-
Overwrite,
|
|
19
|
-
} from '../utils'
|
|
14
|
+
import { functionalUpdate, isFunction, makeStateUpdater } from '../utils'
|
|
20
15
|
|
|
21
16
|
export type FiltersTableState = {
|
|
22
17
|
columnFilters: ColumnFiltersState
|
|
@@ -41,7 +36,7 @@ export type FilterFn<TData extends RowData> = {
|
|
|
41
36
|
row: Row<TData>,
|
|
42
37
|
columnId: string,
|
|
43
38
|
filterValue: any,
|
|
44
|
-
addMeta: (meta:
|
|
39
|
+
addMeta: (meta: FilterMeta) => void
|
|
45
40
|
): boolean
|
|
46
41
|
|
|
47
42
|
resolveFilterValue?: TransformFilterValueFn<TData>
|
|
@@ -50,12 +45,12 @@ export type FilterFn<TData extends RowData> = {
|
|
|
50
45
|
|
|
51
46
|
export type TransformFilterValueFn<TData extends RowData> = (
|
|
52
47
|
value: any,
|
|
53
|
-
column?: Column<TData>
|
|
48
|
+
column?: Column<TData, unknown>
|
|
54
49
|
) => unknown
|
|
55
50
|
|
|
56
51
|
export type ColumnFilterAutoRemoveTestFn<TData extends RowData> = (
|
|
57
52
|
value: any,
|
|
58
|
-
column?: Column<TData>
|
|
53
|
+
column?: Column<TData, unknown>
|
|
59
54
|
) => boolean
|
|
60
55
|
|
|
61
56
|
export type CustomFilterFns<TData extends RowData> = Record<
|
|
@@ -93,7 +88,7 @@ export type FiltersColumn<TData extends RowData> = {
|
|
|
93
88
|
|
|
94
89
|
export type FiltersRow<TData extends RowData> = {
|
|
95
90
|
columnFilters: Record<string, boolean>
|
|
96
|
-
columnFiltersMeta: Record<string,
|
|
91
|
+
columnFiltersMeta: Record<string, FilterMeta>
|
|
97
92
|
}
|
|
98
93
|
|
|
99
94
|
export type FiltersOptions<TData extends RowData> = {
|
|
@@ -110,7 +105,7 @@ export type FiltersOptions<TData extends RowData> = {
|
|
|
110
105
|
globalFilterFn?: FilterFnOption<TData>
|
|
111
106
|
onGlobalFilterChange?: OnChangeFn<any>
|
|
112
107
|
enableGlobalFilter?: boolean
|
|
113
|
-
getColumnCanGlobalFilter?: (column: Column<TData>) => boolean
|
|
108
|
+
getColumnCanGlobalFilter?: (column: Column<TData, unknown>) => boolean
|
|
114
109
|
|
|
115
110
|
// Faceting
|
|
116
111
|
getFacetedRowModel?: (
|
|
@@ -189,7 +184,7 @@ export const Filters: TableFeature = {
|
|
|
189
184
|
},
|
|
190
185
|
|
|
191
186
|
createColumn: <TData extends RowData>(
|
|
192
|
-
column: Column<TData>,
|
|
187
|
+
column: Column<TData, unknown>,
|
|
193
188
|
table: Table<TData>
|
|
194
189
|
): FiltersColumn<TData> => {
|
|
195
190
|
return {
|
|
@@ -451,7 +446,7 @@ export const Filters: TableFeature = {
|
|
|
451
446
|
export function shouldAutoRemoveFilter<TData extends RowData>(
|
|
452
447
|
filterFn?: FilterFn<TData>,
|
|
453
448
|
value?: any,
|
|
454
|
-
column?: Column<TData>
|
|
449
|
+
column?: Column<TData, unknown>
|
|
455
450
|
) {
|
|
456
451
|
return (
|
|
457
452
|
(filterFn && filterFn.autoRemove
|
package/src/features/Grouping.ts
CHANGED
|
@@ -33,9 +33,11 @@ export type AggregationFnOption<TData extends RowData> =
|
|
|
33
33
|
| BuiltInAggregationFn
|
|
34
34
|
| AggregationFn<TData>
|
|
35
35
|
|
|
36
|
-
export type GroupingColumnDef<TData extends RowData> = {
|
|
36
|
+
export type GroupingColumnDef<TData extends RowData, TValue> = {
|
|
37
37
|
aggregationFn?: AggregationFnOption<TData>
|
|
38
|
-
aggregatedCell?: ColumnDefTemplate<
|
|
38
|
+
aggregatedCell?: ColumnDefTemplate<
|
|
39
|
+
ReturnType<Cell<TData, TValue>['getContext']>
|
|
40
|
+
>
|
|
39
41
|
enableGrouping?: boolean
|
|
40
42
|
}
|
|
41
43
|
|
|
@@ -51,7 +53,7 @@ export type GroupingColumn<TData extends RowData> = {
|
|
|
51
53
|
|
|
52
54
|
export type GroupingRow = {
|
|
53
55
|
groupingColumnId?: string
|
|
54
|
-
groupingValue?:
|
|
56
|
+
groupingValue?: unknown
|
|
55
57
|
getIsGrouped: () => boolean
|
|
56
58
|
_groupingValuesCache: Record<string, any>
|
|
57
59
|
}
|
|
@@ -89,7 +91,10 @@ export type GroupingInstance<TData extends RowData> = {
|
|
|
89
91
|
//
|
|
90
92
|
|
|
91
93
|
export const Grouping: TableFeature = {
|
|
92
|
-
getDefaultColumnDef: <TData extends RowData>(): GroupingColumnDef<
|
|
94
|
+
getDefaultColumnDef: <TData extends RowData>(): GroupingColumnDef<
|
|
95
|
+
TData,
|
|
96
|
+
unknown
|
|
97
|
+
> => {
|
|
93
98
|
return {
|
|
94
99
|
aggregatedCell: props => (props.getValue() as any)?.toString?.() ?? null,
|
|
95
100
|
aggregationFn: 'auto',
|
|
@@ -112,8 +117,8 @@ export const Grouping: TableFeature = {
|
|
|
112
117
|
}
|
|
113
118
|
},
|
|
114
119
|
|
|
115
|
-
createColumn: <TData extends RowData>(
|
|
116
|
-
column: Column<TData>,
|
|
120
|
+
createColumn: <TData extends RowData, TValue>(
|
|
121
|
+
column: Column<TData, TValue>,
|
|
117
122
|
table: Table<TData>
|
|
118
123
|
): GroupingColumn<TData> => {
|
|
119
124
|
return {
|
|
@@ -215,9 +220,9 @@ export const Grouping: TableFeature = {
|
|
|
215
220
|
}
|
|
216
221
|
},
|
|
217
222
|
|
|
218
|
-
createCell: <TData extends RowData>(
|
|
219
|
-
cell: Cell<TData>,
|
|
220
|
-
column: Column<TData>,
|
|
223
|
+
createCell: <TData extends RowData, TValue>(
|
|
224
|
+
cell: Cell<TData, TValue>,
|
|
225
|
+
column: Column<TData, TValue>,
|
|
221
226
|
row: Row<TData>,
|
|
222
227
|
table: Table<TData>
|
|
223
228
|
): GroupingCell => {
|
|
@@ -237,7 +242,7 @@ export const Grouping: TableFeature = {
|
|
|
237
242
|
}
|
|
238
243
|
|
|
239
244
|
export function orderColumns<TData extends RowData>(
|
|
240
|
-
leafColumns: Column<TData>[],
|
|
245
|
+
leafColumns: Column<TData, unknown>[],
|
|
241
246
|
grouping: string[],
|
|
242
247
|
groupedColumnMode?: GroupingColumnMode
|
|
243
248
|
) {
|
package/src/features/Ordering.ts
CHANGED
|
@@ -29,7 +29,9 @@ export type ColumnOrderDefaultOptions = {
|
|
|
29
29
|
export type ColumnOrderInstance<TData extends RowData> = {
|
|
30
30
|
setColumnOrder: (updater: Updater<ColumnOrderState>) => void
|
|
31
31
|
resetColumnOrder: (defaultState?: boolean) => void
|
|
32
|
-
_getOrderColumnsFn: () => (
|
|
32
|
+
_getOrderColumnsFn: () => (
|
|
33
|
+
columns: Column<TData, unknown>[]
|
|
34
|
+
) => Column<TData, unknown>[]
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
//
|
|
@@ -69,7 +71,7 @@ export const Ordering: TableFeature = {
|
|
|
69
71
|
(columnOrder, grouping, groupedColumnMode) => columns => {
|
|
70
72
|
// Sort grouped columns to the start of the column list
|
|
71
73
|
// before the headers are built
|
|
72
|
-
let orderedColumns: Column<TData>[] = []
|
|
74
|
+
let orderedColumns: Column<TData, unknown>[] = []
|
|
73
75
|
|
|
74
76
|
// If there is no order, return the normal columns
|
|
75
77
|
if (!columnOrder?.length) {
|
package/src/features/Pinning.ts
CHANGED
|
@@ -43,18 +43,18 @@ export type ColumnPinningColumn = {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
export type ColumnPinningRow<TData extends RowData> = {
|
|
46
|
-
getLeftVisibleCells: () => Cell<TData>[]
|
|
47
|
-
getCenterVisibleCells: () => Cell<TData>[]
|
|
48
|
-
getRightVisibleCells: () => Cell<TData>[]
|
|
46
|
+
getLeftVisibleCells: () => Cell<TData, unknown>[]
|
|
47
|
+
getCenterVisibleCells: () => Cell<TData, unknown>[]
|
|
48
|
+
getRightVisibleCells: () => Cell<TData, unknown>[]
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
export type ColumnPinningInstance<TData extends RowData> = {
|
|
52
52
|
setColumnPinning: (updater: Updater<ColumnPinningState>) => void
|
|
53
53
|
resetColumnPinning: (defaultState?: boolean) => void
|
|
54
54
|
getIsSomeColumnsPinned: (position?: ColumnPinningPosition) => boolean
|
|
55
|
-
getLeftLeafColumns: () => Column<TData>[]
|
|
56
|
-
getRightLeafColumns: () => Column<TData>[]
|
|
57
|
-
getCenterLeafColumns: () => Column<TData>[]
|
|
55
|
+
getLeftLeafColumns: () => Column<TData, unknown>[]
|
|
56
|
+
getRightLeafColumns: () => Column<TData, unknown>[]
|
|
57
|
+
getCenterLeafColumns: () => Column<TData, unknown>[]
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
//
|
|
@@ -80,8 +80,8 @@ export const Pinning: TableFeature = {
|
|
|
80
80
|
}
|
|
81
81
|
},
|
|
82
82
|
|
|
83
|
-
createColumn: <TData extends RowData>(
|
|
84
|
-
column: Column<TData>,
|
|
83
|
+
createColumn: <TData extends RowData, TValue>(
|
|
84
|
+
column: Column<TData, TValue>,
|
|
85
85
|
table: Table<TData>
|
|
86
86
|
): ColumnPinningColumn => {
|
|
87
87
|
return {
|
|
@@ -185,7 +185,7 @@ export const Pinning: TableFeature = {
|
|
|
185
185
|
columnId => allCells.find(cell => cell.column.id === columnId)!
|
|
186
186
|
)
|
|
187
187
|
.filter(Boolean)
|
|
188
|
-
.map(d => ({ ...d, position: 'left' } as Cell<TData>))
|
|
188
|
+
.map(d => ({ ...d, position: 'left' } as Cell<TData, unknown>))
|
|
189
189
|
|
|
190
190
|
return cells
|
|
191
191
|
},
|
|
@@ -203,7 +203,7 @@ export const Pinning: TableFeature = {
|
|
|
203
203
|
columnId => allCells.find(cell => cell.column.id === columnId)!
|
|
204
204
|
)
|
|
205
205
|
.filter(Boolean)
|
|
206
|
-
.map(d => ({ ...d, position: 'left' } as Cell<TData>))
|
|
206
|
+
.map(d => ({ ...d, position: 'left' } as Cell<TData, unknown>))
|
|
207
207
|
|
|
208
208
|
return cells
|
|
209
209
|
},
|
package/src/features/Sorting.ts
CHANGED
|
@@ -58,6 +58,7 @@ export type SortingColumn<TData extends RowData> = {
|
|
|
58
58
|
getAutoSortingFn: () => SortingFn<TData>
|
|
59
59
|
getAutoSortDir: () => SortDirection
|
|
60
60
|
getSortingFn: () => SortingFn<TData>
|
|
61
|
+
getFirstSortDir: () => SortDirection
|
|
61
62
|
getNextSortingOrder: () => SortDirection | false
|
|
62
63
|
getCanSort: () => boolean
|
|
63
64
|
getCanMultiSort: () => boolean
|
|
@@ -116,8 +117,8 @@ export const Sorting: TableFeature = {
|
|
|
116
117
|
}
|
|
117
118
|
},
|
|
118
119
|
|
|
119
|
-
createColumn: <TData extends RowData>(
|
|
120
|
-
column: Column<TData>,
|
|
120
|
+
createColumn: <TData extends RowData, TValue>(
|
|
121
|
+
column: Column<TData, TValue>,
|
|
121
122
|
table: Table<TData>
|
|
122
123
|
): SortingColumn<TData> => {
|
|
123
124
|
return {
|
|
@@ -184,19 +185,21 @@ export const Sorting: TableFeature = {
|
|
|
184
185
|
|
|
185
186
|
// this needs to be outside of table.setSorting to be in sync with rerender
|
|
186
187
|
const nextSortingOrder = column.getNextSortingOrder()
|
|
188
|
+
const hasManualValue = typeof desc !== 'undefined' && desc !== null
|
|
187
189
|
|
|
188
190
|
table.setSorting(old => {
|
|
189
191
|
// Find any existing sorting for this column
|
|
190
192
|
const existingSorting = old?.find(d => d.id === column.id)
|
|
191
193
|
const existingIndex = old?.findIndex(d => d.id === column.id)
|
|
192
|
-
const hasDescDefined = typeof desc !== 'undefined' && desc !== null
|
|
193
194
|
|
|
194
195
|
let newSorting: SortingState = []
|
|
195
196
|
|
|
196
197
|
// What should we do with this sort action?
|
|
197
198
|
let sortAction: 'add' | 'remove' | 'toggle' | 'replace'
|
|
199
|
+
let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc'
|
|
198
200
|
|
|
199
|
-
|
|
201
|
+
// Multi-mode
|
|
202
|
+
if (old?.length && column.getCanMultiSort() && multi) {
|
|
200
203
|
if (existingSorting) {
|
|
201
204
|
sortAction = 'toggle'
|
|
202
205
|
} else {
|
|
@@ -214,29 +217,22 @@ export const Sorting: TableFeature = {
|
|
|
214
217
|
}
|
|
215
218
|
|
|
216
219
|
// Handle toggle states that will remove the sorting
|
|
217
|
-
if (
|
|
218
|
-
|
|
219
|
-
(
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
220
|
+
if (sortAction === 'toggle') {
|
|
221
|
+
// If we are "actually" toggling (not a manual set value), should we remove the sorting?
|
|
222
|
+
if (!hasManualValue) {
|
|
223
|
+
// Is our intention to remove?
|
|
224
|
+
if (!nextSortingOrder) {
|
|
225
|
+
sortAction = 'remove'
|
|
226
|
+
}
|
|
227
|
+
}
|
|
225
228
|
}
|
|
226
229
|
|
|
227
|
-
if (sortAction === '
|
|
228
|
-
newSorting = [
|
|
229
|
-
{
|
|
230
|
-
id: column.id,
|
|
231
|
-
desc: hasDescDefined ? desc! : nextSortingOrder! === 'desc',
|
|
232
|
-
},
|
|
233
|
-
]
|
|
234
|
-
} else if (sortAction === 'add' && old?.length) {
|
|
230
|
+
if (sortAction === 'add') {
|
|
235
231
|
newSorting = [
|
|
236
232
|
...old,
|
|
237
233
|
{
|
|
238
234
|
id: column.id,
|
|
239
|
-
desc:
|
|
235
|
+
desc: nextDesc,
|
|
240
236
|
},
|
|
241
237
|
]
|
|
242
238
|
// Take latest n columns
|
|
@@ -245,41 +241,56 @@ export const Sorting: TableFeature = {
|
|
|
245
241
|
newSorting.length -
|
|
246
242
|
(table.options.maxMultiSortColCount ?? Number.MAX_SAFE_INTEGER)
|
|
247
243
|
)
|
|
248
|
-
} else if (sortAction === 'toggle'
|
|
244
|
+
} else if (sortAction === 'toggle') {
|
|
249
245
|
// This flips (or sets) the
|
|
250
246
|
newSorting = old.map(d => {
|
|
251
247
|
if (d.id === column.id) {
|
|
252
248
|
return {
|
|
253
249
|
...d,
|
|
254
|
-
desc:
|
|
250
|
+
desc: nextDesc,
|
|
255
251
|
}
|
|
256
252
|
}
|
|
257
253
|
return d
|
|
258
254
|
})
|
|
259
|
-
} else if (sortAction === 'remove'
|
|
255
|
+
} else if (sortAction === 'remove') {
|
|
260
256
|
newSorting = old.filter(d => d.id !== column.id)
|
|
257
|
+
} else {
|
|
258
|
+
newSorting = [
|
|
259
|
+
{
|
|
260
|
+
id: column.id,
|
|
261
|
+
desc: nextDesc,
|
|
262
|
+
},
|
|
263
|
+
]
|
|
261
264
|
}
|
|
262
265
|
|
|
263
266
|
return newSorting
|
|
264
267
|
})
|
|
265
268
|
},
|
|
266
269
|
|
|
267
|
-
|
|
270
|
+
getFirstSortDir: () => {
|
|
268
271
|
const sortDescFirst =
|
|
269
272
|
column.columnDef.sortDescFirst ??
|
|
270
273
|
table.options.sortDescFirst ??
|
|
271
274
|
column.getAutoSortDir() === 'desc'
|
|
272
|
-
|
|
275
|
+
return sortDescFirst ? 'desc' : 'asc'
|
|
276
|
+
},
|
|
273
277
|
|
|
278
|
+
getNextSortingOrder: (multi?: boolean) => {
|
|
279
|
+
const firstSortDirection = column.getFirstSortDir()
|
|
274
280
|
const isSorted = column.getIsSorted()
|
|
281
|
+
|
|
275
282
|
if (!isSorted) {
|
|
276
283
|
return firstSortDirection
|
|
277
284
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
285
|
+
|
|
286
|
+
if (
|
|
287
|
+
isSorted !== firstSortDirection &&
|
|
288
|
+
(table.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general
|
|
289
|
+
(multi ? table.options.enableMultiRemove ?? true : true) // If multi, don't allow if enableMultiRemove))
|
|
290
|
+
) {
|
|
281
291
|
return false
|
|
282
292
|
}
|
|
293
|
+
return isSorted === 'desc' ? 'asc' : 'desc'
|
|
283
294
|
},
|
|
284
295
|
|
|
285
296
|
getCanSort: () => {
|
|
@@ -27,11 +27,11 @@ export type VisibilityDefaultOptions = {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export type VisibilityInstance<TData extends RowData> = {
|
|
30
|
-
getVisibleFlatColumns: () => Column<TData>[]
|
|
31
|
-
getVisibleLeafColumns: () => Column<TData>[]
|
|
32
|
-
getLeftVisibleLeafColumns: () => Column<TData>[]
|
|
33
|
-
getRightVisibleLeafColumns: () => Column<TData>[]
|
|
34
|
-
getCenterVisibleLeafColumns: () => Column<TData>[]
|
|
30
|
+
getVisibleFlatColumns: () => Column<TData, unknown>[]
|
|
31
|
+
getVisibleLeafColumns: () => Column<TData, unknown>[]
|
|
32
|
+
getLeftVisibleLeafColumns: () => Column<TData, unknown>[]
|
|
33
|
+
getRightVisibleLeafColumns: () => Column<TData, unknown>[]
|
|
34
|
+
getCenterVisibleLeafColumns: () => Column<TData, unknown>[]
|
|
35
35
|
setColumnVisibility: (updater: Updater<VisibilityState>) => void
|
|
36
36
|
resetColumnVisibility: (defaultState?: boolean) => void
|
|
37
37
|
toggleAllColumnsVisible: (value?: boolean) => void
|
|
@@ -45,8 +45,8 @@ export type VisibilityColumnDef = {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
export type VisibilityRow<TData extends RowData> = {
|
|
48
|
-
_getAllVisibleCells: () => Cell<TData>[]
|
|
49
|
-
getVisibleCells: () => Cell<TData>[]
|
|
48
|
+
_getAllVisibleCells: () => Cell<TData, unknown>[]
|
|
49
|
+
getVisibleCells: () => Cell<TData, unknown>[]
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
export type VisibilityColumn = {
|
|
@@ -74,8 +74,8 @@ export const Visibility: TableFeature = {
|
|
|
74
74
|
}
|
|
75
75
|
},
|
|
76
76
|
|
|
77
|
-
createColumn: <TData extends RowData>(
|
|
78
|
-
column: Column<TData>,
|
|
77
|
+
createColumn: <TData extends RowData, TValue>(
|
|
78
|
+
column: Column<TData, TValue>,
|
|
79
79
|
table: Table<TData>
|
|
80
80
|
): VisibilityColumn => {
|
|
81
81
|
return {
|
|
@@ -143,8 +143,8 @@ export const Visibility: TableFeature = {
|
|
|
143
143
|
): VisibilityInstance<TData> => {
|
|
144
144
|
const makeVisibleColumnsMethod = (
|
|
145
145
|
key: string,
|
|
146
|
-
getColumns: () => Column<TData>[]
|
|
147
|
-
): (() => Column<TData>[]) => {
|
|
146
|
+
getColumns: () => Column<TData, unknown>[]
|
|
147
|
+
): (() => Column<TData, unknown>[]) => {
|
|
148
148
|
return memo(
|
|
149
149
|
() => [
|
|
150
150
|
getColumns(),
|
package/src/filterFns.ts
CHANGED
|
@@ -6,7 +6,7 @@ const includesString: FilterFn<any> = (
|
|
|
6
6
|
filterValue: string
|
|
7
7
|
) => {
|
|
8
8
|
const search = filterValue.toLowerCase()
|
|
9
|
-
return row.getValue(columnId)?.toLowerCase().includes(search)
|
|
9
|
+
return row.getValue<string>(columnId)?.toLowerCase().includes(search)
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
includesString.autoRemove = (val: any) => testFalsey(val)
|
|
@@ -16,7 +16,7 @@ const includesStringSensitive: FilterFn<any> = (
|
|
|
16
16
|
columnId: string,
|
|
17
17
|
filterValue: string
|
|
18
18
|
) => {
|
|
19
|
-
return row.getValue(columnId)?.includes(filterValue)
|
|
19
|
+
return row.getValue<string>(columnId)?.includes(filterValue)
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
includesStringSensitive.autoRemove = (val: any) => testFalsey(val)
|
|
@@ -26,7 +26,9 @@ const equalsString: FilterFn<any> = (
|
|
|
26
26
|
columnId: string,
|
|
27
27
|
filterValue: string
|
|
28
28
|
) => {
|
|
29
|
-
return
|
|
29
|
+
return (
|
|
30
|
+
row.getValue<string>(columnId)?.toLowerCase() === filterValue.toLowerCase()
|
|
31
|
+
)
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
equalsString.autoRemove = (val: any) => testFalsey(val)
|
|
@@ -36,7 +38,7 @@ const arrIncludes: FilterFn<any> = (
|
|
|
36
38
|
columnId: string,
|
|
37
39
|
filterValue: unknown
|
|
38
40
|
) => {
|
|
39
|
-
return row.getValue(columnId)?.includes(filterValue)
|
|
41
|
+
return row.getValue<unknown[]>(columnId)?.includes(filterValue)
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
arrIncludes.autoRemove = (val: any) => testFalsey(val) || !val?.length
|
|
@@ -46,7 +48,9 @@ const arrIncludesAll: FilterFn<any> = (
|
|
|
46
48
|
columnId: string,
|
|
47
49
|
filterValue: unknown[]
|
|
48
50
|
) => {
|
|
49
|
-
return !filterValue.some(
|
|
51
|
+
return !filterValue.some(
|
|
52
|
+
val => !row.getValue<unknown[]>(columnId)?.includes(val)
|
|
53
|
+
)
|
|
50
54
|
}
|
|
51
55
|
|
|
52
56
|
arrIncludesAll.autoRemove = (val: any) => testFalsey(val) || !val?.length
|
|
@@ -56,7 +60,9 @@ const arrIncludesSome: FilterFn<any> = (
|
|
|
56
60
|
columnId: string,
|
|
57
61
|
filterValue: unknown[]
|
|
58
62
|
) => {
|
|
59
|
-
return filterValue.some(val =>
|
|
63
|
+
return filterValue.some(val =>
|
|
64
|
+
row.getValue<unknown[]>(columnId)?.includes(val)
|
|
65
|
+
)
|
|
60
66
|
}
|
|
61
67
|
|
|
62
68
|
arrIncludesSome.autoRemove = (val: any) => testFalsey(val) || !val?.length
|
|
@@ -84,7 +90,7 @@ const inNumberRange: FilterFn<any> = (
|
|
|
84
90
|
) => {
|
|
85
91
|
let [min, max] = filterValue
|
|
86
92
|
|
|
87
|
-
const rowValue = row.getValue(columnId)
|
|
93
|
+
const rowValue = row.getValue<number>(columnId)
|
|
88
94
|
return rowValue >= min && rowValue <= max
|
|
89
95
|
}
|
|
90
96
|
|
package/src/sortingFns.ts
CHANGED
|
@@ -35,10 +35,13 @@ const textCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
const datetime: SortingFn<any> = (rowA, rowB, columnId) => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
const a = rowA.getValue<Date>(columnId)
|
|
39
|
+
const b = rowB.getValue<Date>(columnId)
|
|
40
|
+
|
|
41
|
+
// Can handle nullish values
|
|
42
|
+
// Use > and < because == (and ===) doesn't work with
|
|
43
|
+
// Date objects (would require calling getTime()).
|
|
44
|
+
return a > b ? 1 : a < b ? -1 : 0
|
|
42
45
|
}
|
|
43
46
|
|
|
44
47
|
const basic: SortingFn<any> = (rowA, rowB, columnId) => {
|
package/src/types.ts
CHANGED
|
@@ -77,10 +77,14 @@ import { CoreRow } from './core/row'
|
|
|
77
77
|
import { PartialKeys } from './utils'
|
|
78
78
|
import { CoreCell } from './core/cell'
|
|
79
79
|
|
|
80
|
+
export interface TableMeta {}
|
|
81
|
+
export interface ColumnMeta {}
|
|
82
|
+
export interface FilterMeta {}
|
|
83
|
+
|
|
80
84
|
export type Updater<T> = T | ((old: T) => T)
|
|
81
85
|
export type OnChangeFn<T> = (updaterOrValue: Updater<T>) => void
|
|
82
86
|
|
|
83
|
-
export type RowData = object | any[]
|
|
87
|
+
export type RowData = unknown | object | any[]
|
|
84
88
|
|
|
85
89
|
export type TableGenerics = {
|
|
86
90
|
Row?: any
|
|
@@ -155,34 +159,33 @@ export type Row<TData extends RowData> = CoreRow<TData> &
|
|
|
155
159
|
RowSelectionRow &
|
|
156
160
|
ExpandedRow
|
|
157
161
|
|
|
158
|
-
export type RowValues = {
|
|
159
|
-
[key: string]: any
|
|
160
|
-
}
|
|
161
|
-
|
|
162
162
|
export type RowModel<TData extends RowData> = {
|
|
163
163
|
rows: Row<TData>[]
|
|
164
164
|
flatRows: Row<TData>[]
|
|
165
165
|
rowsById: Record<string, Row<TData>>
|
|
166
166
|
}
|
|
167
167
|
|
|
168
|
-
export type AccessorFn<TData extends RowData> = (
|
|
168
|
+
export type AccessorFn<TData extends RowData, TValue = unknown> = (
|
|
169
169
|
originalRow: TData,
|
|
170
170
|
index: number
|
|
171
|
-
) =>
|
|
171
|
+
) => TValue
|
|
172
172
|
|
|
173
173
|
export type ColumnDefTemplate<TProps extends object> =
|
|
174
174
|
| string
|
|
175
175
|
| ((props: TProps) => any)
|
|
176
176
|
|
|
177
|
-
export type ColumnDef<
|
|
177
|
+
export type ColumnDef<
|
|
178
|
+
TData extends RowData,
|
|
179
|
+
TValue extends any = unknown
|
|
180
|
+
> = CoreColumnDef<TData, TValue> &
|
|
178
181
|
VisibilityColumnDef &
|
|
179
182
|
ColumnPinningColumnDef &
|
|
180
183
|
FiltersColumnDef<TData> &
|
|
181
184
|
SortingColumnDef<TData> &
|
|
182
|
-
GroupingColumnDef<TData> &
|
|
185
|
+
GroupingColumnDef<TData, TValue> &
|
|
183
186
|
ColumnSizingColumnDef
|
|
184
187
|
|
|
185
|
-
export type Column<TData extends RowData> = CoreColumn<TData> &
|
|
188
|
+
export type Column<TData extends RowData, TValue> = CoreColumn<TData, TValue> &
|
|
186
189
|
ColumnVisibilityColumn &
|
|
187
190
|
ColumnPinningColumn &
|
|
188
191
|
FiltersColumn<TData> &
|
|
@@ -190,9 +193,10 @@ export type Column<TData extends RowData> = CoreColumn<TData> &
|
|
|
190
193
|
GroupingColumn<TData> &
|
|
191
194
|
ColumnSizingColumn
|
|
192
195
|
|
|
193
|
-
export type Cell<TData extends RowData> = CoreCell<TData> &
|
|
196
|
+
export type Cell<TData extends RowData, TValue> = CoreCell<TData, TValue> &
|
|
197
|
+
GroupingCell
|
|
194
198
|
|
|
195
|
-
export type Header<TData extends RowData> = CoreHeader<TData> &
|
|
199
|
+
export type Header<TData extends RowData, TValue> = CoreHeader<TData, TValue> &
|
|
196
200
|
ColumnSizingHeader
|
|
197
201
|
|
|
198
202
|
export type HeaderGroup<TData extends RowData> = CoreHeaderGroup<TData>
|
|
@@ -18,7 +18,7 @@ export function getFacetedMinMaxValues<TData extends RowData>(): (
|
|
|
18
18
|
let facetedMinMaxValues: [any, any] = [firstValue, firstValue]
|
|
19
19
|
|
|
20
20
|
for (let i = 0; i < facetedRowModel.flatRows.length; i++) {
|
|
21
|
-
const value = facetedRowModel.flatRows[i]
|
|
21
|
+
const value = facetedRowModel.flatRows[i]!.getValue<number>(columnId)
|
|
22
22
|
|
|
23
23
|
if (value < facetedMinMaxValues[0]) {
|
|
24
24
|
facetedMinMaxValues[0] = value
|
|
@@ -55,7 +55,13 @@ export function getGroupedRowModel<TData extends RowData>(): (
|
|
|
55
55
|
? flattenBy(groupedRows, row => row.subRows)
|
|
56
56
|
: groupedRows
|
|
57
57
|
|
|
58
|
-
const row = createRow(
|
|
58
|
+
const row = createRow(
|
|
59
|
+
table,
|
|
60
|
+
id,
|
|
61
|
+
leafRows[0]!.original,
|
|
62
|
+
index,
|
|
63
|
+
depth
|
|
64
|
+
)
|
|
59
65
|
|
|
60
66
|
Object.assign(row, {
|
|
61
67
|
groupingColumnId: columnId,
|