@tanstack/table-core 8.0.0-alpha.9 → 8.0.0-beta.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 +120 -0
- package/build/cjs/aggregationFns.js.map +1 -0
- package/build/cjs/core/cell.js +40 -0
- package/build/cjs/core/cell.js.map +1 -0
- package/build/cjs/core/column.js +88 -0
- package/build/cjs/core/column.js.map +1 -0
- package/build/cjs/core/headers.js +403 -0
- package/build/cjs/core/headers.js.map +1 -0
- package/build/cjs/core/instance.js +255 -0
- package/build/cjs/core/instance.js.map +1 -0
- package/build/cjs/core/row.js +77 -0
- package/build/cjs/core/row.js.map +1 -0
- package/build/cjs/createTable.js +36 -29
- package/build/cjs/createTable.js.map +1 -1
- package/build/cjs/features/ColumnSizing.js +157 -189
- package/build/cjs/features/ColumnSizing.js.map +1 -1
- package/build/cjs/features/Expanding.js +103 -155
- package/build/cjs/features/Expanding.js.map +1 -1
- package/build/cjs/features/Filters.js +155 -304
- package/build/cjs/features/Filters.js.map +1 -1
- package/build/cjs/features/Grouping.js +97 -157
- package/build/cjs/features/Grouping.js.map +1 -1
- package/build/cjs/features/Ordering.js +30 -41
- package/build/cjs/features/Ordering.js.map +1 -1
- package/build/cjs/features/Pagination.js +102 -105
- package/build/cjs/features/Pagination.js.map +1 -1
- package/build/cjs/features/Pinning.js +131 -89
- package/build/cjs/features/Pinning.js.map +1 -1
- package/build/cjs/features/RowSelection.js +138 -267
- package/build/cjs/features/RowSelection.js.map +1 -1
- package/build/cjs/features/Sorting.js +82 -167
- package/build/cjs/features/Sorting.js.map +1 -1
- package/build/cjs/features/Visibility.js +69 -115
- package/build/cjs/features/Visibility.js.map +1 -1
- package/build/cjs/filterFns.js +107 -0
- package/build/cjs/filterFns.js.map +1 -0
- package/build/cjs/index.js +36 -23
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/sortingFns.js +124 -0
- package/build/cjs/sortingFns.js.map +1 -0
- package/build/cjs/utils/filterRowsUtils.js +117 -0
- package/build/cjs/utils/filterRowsUtils.js.map +1 -0
- package/build/cjs/utils/getCoreRowModel.js +79 -0
- package/build/cjs/utils/getCoreRowModel.js.map +1 -0
- package/build/cjs/utils/getExpandedRowModel.js +57 -0
- package/build/cjs/utils/getExpandedRowModel.js.map +1 -0
- package/build/cjs/utils/getFacetedMinMaxValues.js +54 -0
- package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -0
- package/build/cjs/utils/getFacetedRowModel.js +50 -0
- package/build/cjs/utils/getFacetedRowModel.js.map +1 -0
- package/build/cjs/utils/getFacetedUniqueValues.js +48 -0
- package/build/cjs/utils/getFacetedUniqueValues.js.map +1 -0
- package/build/cjs/utils/getFilteredRowModel.js +139 -0
- package/build/cjs/utils/getFilteredRowModel.js.map +1 -0
- package/build/cjs/utils/getGroupedRowModel.js +161 -0
- package/build/cjs/utils/getGroupedRowModel.js.map +1 -0
- package/build/cjs/utils/getPaginationRowModel.js +61 -0
- package/build/cjs/utils/getPaginationRowModel.js.map +1 -0
- package/build/cjs/utils/getSortedRowModel.js +110 -0
- package/build/cjs/utils/getSortedRowModel.js.map +1 -0
- package/build/cjs/utils.js +38 -107
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +2976 -3853
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +586 -408
- package/build/types/aggregationFns.d.ts +13 -0
- package/build/types/core/cell.d.ts +9 -0
- package/build/types/core/column.d.ts +40 -0
- package/build/types/core/headers.d.ts +46 -0
- package/build/types/core/instance.d.ts +57 -0
- package/build/types/core/row.d.ts +15 -0
- package/build/types/createTable.d.ts +47 -26
- package/build/types/features/ColumnSizing.d.ts +32 -44
- package/build/types/features/Expanding.d.ts +15 -26
- package/build/types/features/Filters.d.ts +64 -63
- package/build/types/features/Grouping.d.ts +32 -46
- package/build/types/features/Ordering.d.ts +7 -10
- package/build/types/features/Pagination.d.ts +16 -15
- package/build/types/features/Pinning.d.ts +16 -17
- package/build/types/features/RowSelection.d.ts +13 -33
- package/build/types/features/Sorting.d.ts +25 -44
- package/build/types/features/Visibility.d.ts +16 -25
- package/build/types/filterFns.d.ts +13 -0
- package/build/types/index.d.ts +16 -10
- package/build/types/sortingFns.d.ts +11 -0
- package/build/types/types.d.ts +37 -122
- package/build/types/utils/filterRowsUtils.d.ts +4 -0
- package/build/types/utils/getCoreRowModel.d.ts +2 -0
- package/build/types/utils/getExpandedRowModel.d.ts +7 -0
- package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
- package/build/types/utils/getFacetedRowModel.d.ts +2 -0
- package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
- package/build/types/utils/getFilteredRowModel.d.ts +2 -0
- package/build/types/utils/getGroupedRowModel.d.ts +2 -0
- package/build/types/utils/getPaginationRowModel.d.ts +4 -0
- package/build/types/utils/getSortedRowModel.d.ts +2 -0
- package/build/types/utils.d.ts +7 -11
- package/build/umd/index.development.js +3024 -3893
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +9 -10
- package/src/aggregationFns.ts +123 -0
- package/src/core/cell.ts +48 -0
- package/src/core/column.ts +147 -0
- package/src/core/headers.ts +575 -0
- package/src/core/instance.ts +359 -0
- package/src/core/row.ts +85 -0
- package/src/createTable.ts +188 -0
- package/src/features/ColumnSizing.ts +170 -185
- package/src/features/Expanding.ts +120 -194
- package/src/features/Filters.ts +299 -381
- package/src/features/Grouping.ts +158 -220
- package/src/features/Ordering.ts +24 -25
- package/src/features/Pagination.ts +88 -73
- package/src/features/Pinning.ts +186 -63
- package/src/features/RowSelection.ts +107 -245
- package/src/features/Sorting.ts +125 -225
- package/src/features/Visibility.ts +116 -132
- package/src/filterFns.ts +135 -0
- package/src/index.ts +29 -0
- package/src/{sortTypes.ts → sortingFns.ts} +63 -85
- package/src/types.ts +62 -168
- package/src/utils/filterRowsUtils.ts +112 -0
- package/src/utils/getCoreRowModel.ts +84 -0
- package/src/utils/getExpandedRowModel.ts +54 -0
- package/src/utils/getFacetedMinMaxValues.ts +40 -0
- package/src/utils/getFacetedRowModel.ts +50 -0
- package/src/utils/getFacetedUniqueValues.ts +37 -0
- package/src/utils/getFilteredRowModel.ts +159 -0
- package/src/utils/getGroupedRowModel.ts +175 -0
- package/src/utils/getPaginationRowModel.ts +48 -0
- package/src/utils/getSortedRowModel.ts +116 -0
- package/src/utils.ts +126 -0
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
- package/build/cjs/aggregationTypes.js +0 -130
- package/build/cjs/aggregationTypes.js.map +0 -1
- package/build/cjs/core.js +0 -545
- package/build/cjs/core.js.map +0 -1
- package/build/cjs/features/Headers.js +0 -630
- package/build/cjs/features/Headers.js.map +0 -1
- package/build/cjs/filterTypes.js +0 -172
- package/build/cjs/filterTypes.js.map +0 -1
- package/build/cjs/sortTypes.js +0 -122
- package/build/cjs/sortTypes.js.map +0 -1
- package/build/cjs/types.js +0 -22
- package/build/cjs/types.js.map +0 -1
- package/build/cjs/utils/columnFilterRowsFn.js +0 -131
- package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
- package/build/cjs/utils/expandRowsFn.js +0 -38
- package/build/cjs/utils/expandRowsFn.js.map +0 -1
- package/build/cjs/utils/globalFilterRowsFn.js +0 -101
- package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
- package/build/cjs/utils/groupRowsFn.js +0 -155
- package/build/cjs/utils/groupRowsFn.js.map +0 -1
- package/build/cjs/utils/paginateRowsFn.js +0 -44
- package/build/cjs/utils/paginateRowsFn.js.map +0 -1
- package/build/cjs/utils/sortRowsFn.js +0 -94
- package/build/cjs/utils/sortRowsFn.js.map +0 -1
- package/build/types/aggregationTypes.d.ts +0 -22
- package/build/types/core.d.ts +0 -105
- package/build/types/features/Headers.d.ts +0 -43
- package/build/types/filterTypes.d.ts +0 -50
- package/build/types/sortTypes.d.ts +0 -18
- package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
- package/build/types/utils/expandRowsFn.d.ts +0 -2
- package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
- package/build/types/utils/groupRowsFn.d.ts +0 -2
- package/build/types/utils/paginateRowsFn.d.ts +0 -2
- package/build/types/utils/sortRowsFn.d.ts +0 -2
- package/src/.DS_Store +0 -0
- package/src/aggregationTypes.ts +0 -115
- package/src/core.tsx +0 -763
- package/src/createTable.tsx +0 -137
- package/src/features/Headers.ts +0 -747
- package/src/filterTypes.ts +0 -188
- package/src/index.tsx +0 -23
- package/src/utils/columnFilterRowsFn.ts +0 -113
- package/src/utils/expandRowsFn.ts +0 -30
- package/src/utils/globalFilterRowsFn.ts +0 -89
- package/src/utils/groupRowsFn.ts +0 -170
- package/src/utils/paginateRowsFn.ts +0 -28
- package/src/utils/sortRowsFn.ts +0 -95
- package/src/utils.tsx +0 -221
|
@@ -1,14 +1,20 @@
|
|
|
1
|
+
import { TableFeature } from '../core/instance'
|
|
1
2
|
import {
|
|
2
3
|
Cell,
|
|
3
4
|
Column,
|
|
4
|
-
Getter,
|
|
5
5
|
OnChangeFn,
|
|
6
|
-
|
|
7
|
-
PropGetterValue,
|
|
6
|
+
TableGenerics,
|
|
8
7
|
TableInstance,
|
|
9
8
|
Updater,
|
|
9
|
+
Row,
|
|
10
10
|
} from '../types'
|
|
11
|
-
import {
|
|
11
|
+
import { makeStateUpdater, memo } from '../utils'
|
|
12
|
+
|
|
13
|
+
export type VisibilityState = Record<string, boolean>
|
|
14
|
+
|
|
15
|
+
export type VisibilityTableState = {
|
|
16
|
+
columnVisibility: VisibilityState
|
|
17
|
+
}
|
|
12
18
|
|
|
13
19
|
export type VisibilityOptions = {
|
|
14
20
|
onColumnVisibilityChange?: OnChangeFn<VisibilityState>
|
|
@@ -19,38 +25,26 @@ export type VisibilityDefaultOptions = {
|
|
|
19
25
|
onColumnVisibilityChange: OnChangeFn<VisibilityState>
|
|
20
26
|
}
|
|
21
27
|
|
|
22
|
-
export type
|
|
23
|
-
|
|
24
|
-
export type VisibilityTableState = {
|
|
25
|
-
columnVisibility: VisibilityState
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export type VisibilityInstance<TGenerics extends PartialGenerics> = {
|
|
28
|
+
export type VisibilityInstance<TGenerics extends TableGenerics> = {
|
|
29
29
|
getVisibleFlatColumns: () => Column<TGenerics>[]
|
|
30
30
|
getVisibleLeafColumns: () => Column<TGenerics>[]
|
|
31
|
+
getLeftVisibleLeafColumns: () => Column<TGenerics>[]
|
|
32
|
+
getRightVisibleLeafColumns: () => Column<TGenerics>[]
|
|
33
|
+
getCenterVisibleLeafColumns: () => Column<TGenerics>[]
|
|
31
34
|
setColumnVisibility: (updater: Updater<VisibilityState>) => void
|
|
32
|
-
|
|
35
|
+
resetColumnVisibility: (defaultState?: boolean) => void
|
|
33
36
|
toggleAllColumnsVisible: (value?: boolean) => void
|
|
34
|
-
getColumnIsVisible: (columId: string) => boolean
|
|
35
|
-
getColumnCanHide: (columnId: string) => boolean
|
|
36
37
|
getIsAllColumnsVisible: () => boolean
|
|
37
38
|
getIsSomeColumnsVisible: () => boolean
|
|
38
|
-
|
|
39
|
-
TGetter extends Getter<ToggleAllColumnsVisibilityProps>
|
|
40
|
-
>(
|
|
41
|
-
userProps?: TGetter
|
|
42
|
-
) => undefined | PropGetterValue<ToggleAllColumnsVisibilityProps, TGetter>
|
|
39
|
+
getToggleAllColumnsVisibilityHandler: () => (event: unknown) => void
|
|
43
40
|
}
|
|
44
41
|
|
|
45
|
-
type ToggleVisibilityProps = {}
|
|
46
|
-
type ToggleAllColumnsVisibilityProps = {}
|
|
47
|
-
|
|
48
42
|
export type VisibilityColumnDef = {
|
|
49
43
|
enableHiding?: boolean
|
|
50
|
-
defaultCanHide?: boolean
|
|
51
44
|
}
|
|
52
45
|
|
|
53
|
-
export type VisibilityRow<TGenerics extends
|
|
46
|
+
export type VisibilityRow<TGenerics extends TableGenerics> = {
|
|
47
|
+
_getAllVisibleCells: () => Cell<TGenerics>[]
|
|
54
48
|
getVisibleCells: () => Cell<TGenerics>[]
|
|
55
49
|
}
|
|
56
50
|
|
|
@@ -58,21 +52,20 @@ export type VisibilityColumn = {
|
|
|
58
52
|
getCanHide: () => boolean
|
|
59
53
|
getIsVisible: () => boolean
|
|
60
54
|
toggleVisibility: (value?: boolean) => void
|
|
61
|
-
|
|
62
|
-
userProps?: TGetter
|
|
63
|
-
) => PropGetterValue<ToggleVisibilityProps, TGetter>
|
|
55
|
+
getToggleVisibilityHandler: () => (event: unknown) => void
|
|
64
56
|
}
|
|
65
57
|
|
|
66
58
|
//
|
|
67
59
|
|
|
68
|
-
export const Visibility = {
|
|
69
|
-
getInitialState: (): VisibilityTableState => {
|
|
60
|
+
export const Visibility: TableFeature = {
|
|
61
|
+
getInitialState: (state): VisibilityTableState => {
|
|
70
62
|
return {
|
|
71
63
|
columnVisibility: {},
|
|
64
|
+
...state,
|
|
72
65
|
}
|
|
73
66
|
},
|
|
74
67
|
|
|
75
|
-
getDefaultOptions: <TGenerics extends
|
|
68
|
+
getDefaultOptions: <TGenerics extends TableGenerics>(
|
|
76
69
|
instance: TableInstance<TGenerics>
|
|
77
70
|
): VisibilityDefaultOptions => {
|
|
78
71
|
return {
|
|
@@ -80,93 +73,125 @@ export const Visibility = {
|
|
|
80
73
|
}
|
|
81
74
|
},
|
|
82
75
|
|
|
83
|
-
|
|
84
|
-
return {
|
|
85
|
-
defaultIsVisible: true,
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
|
|
89
|
-
createColumn: <TGenerics extends PartialGenerics>(
|
|
76
|
+
createColumn: <TGenerics extends TableGenerics>(
|
|
90
77
|
column: Column<TGenerics>,
|
|
91
78
|
instance: TableInstance<TGenerics>
|
|
92
79
|
): VisibilityColumn => {
|
|
93
80
|
return {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
type: 'checkbox',
|
|
101
|
-
checked: column.getIsVisible?.(),
|
|
102
|
-
title: 'Toggle Column Visibility',
|
|
103
|
-
onChange: (e: MouseEvent | TouchEvent) => {
|
|
104
|
-
column.toggleVisibility?.((e.target as HTMLInputElement).checked)
|
|
105
|
-
},
|
|
81
|
+
toggleVisibility: value => {
|
|
82
|
+
if (column.getCanHide()) {
|
|
83
|
+
instance.setColumnVisibility(old => ({
|
|
84
|
+
...old,
|
|
85
|
+
[column.id]: value ?? !column.getIsVisible(),
|
|
86
|
+
}))
|
|
106
87
|
}
|
|
88
|
+
},
|
|
89
|
+
getIsVisible: () => {
|
|
90
|
+
return instance.getState().columnVisibility?.[column.id] ?? true
|
|
91
|
+
},
|
|
107
92
|
|
|
108
|
-
|
|
93
|
+
getCanHide: () => {
|
|
94
|
+
return (
|
|
95
|
+
(column.columnDef.enableHiding ?? true) &&
|
|
96
|
+
(instance.options.enableHiding ?? true)
|
|
97
|
+
)
|
|
98
|
+
},
|
|
99
|
+
getToggleVisibilityHandler: () => {
|
|
100
|
+
return (e: unknown) => {
|
|
101
|
+
column.toggleVisibility?.(
|
|
102
|
+
((e as MouseEvent).target as HTMLInputElement).checked
|
|
103
|
+
)
|
|
104
|
+
}
|
|
109
105
|
},
|
|
110
106
|
}
|
|
111
107
|
},
|
|
112
108
|
|
|
113
|
-
|
|
109
|
+
createRow: <TGenerics extends TableGenerics>(
|
|
110
|
+
row: Row<TGenerics>,
|
|
114
111
|
instance: TableInstance<TGenerics>
|
|
115
|
-
):
|
|
112
|
+
): VisibilityRow<TGenerics> => {
|
|
116
113
|
return {
|
|
117
|
-
|
|
114
|
+
_getAllVisibleCells: memo(
|
|
115
|
+
() => [row.getAllCells(), instance.getState().columnVisibility],
|
|
116
|
+
cells => {
|
|
117
|
+
return cells.filter(cell => cell.column.getIsVisible())
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
key:
|
|
121
|
+
process.env.NODE_ENV === 'production' && 'row._getAllVisibleCells',
|
|
122
|
+
debug: () => instance.options.debugAll ?? instance.options.debugRows,
|
|
123
|
+
}
|
|
124
|
+
),
|
|
125
|
+
getVisibleCells: memo(
|
|
118
126
|
() => [
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
.filter(d => d.getIsVisible?.())
|
|
123
|
-
.map(d => d.id)
|
|
124
|
-
.join('_'),
|
|
127
|
+
row.getLeftVisibleCells(),
|
|
128
|
+
row.getCenterVisibleCells(),
|
|
129
|
+
row.getRightVisibleCells(),
|
|
125
130
|
],
|
|
126
|
-
|
|
127
|
-
return allFlatColumns.filter(d => d.getIsVisible?.())
|
|
128
|
-
},
|
|
131
|
+
(left, center, right) => [...left, ...center, ...right],
|
|
129
132
|
{
|
|
130
|
-
key: '
|
|
131
|
-
debug: () =>
|
|
132
|
-
instance.options.debugAll ?? instance.options.debugColumns,
|
|
133
|
+
key: process.env.NODE_ENV === 'development' && 'row.getVisibleCells',
|
|
134
|
+
debug: () => instance.options.debugAll ?? instance.options.debugRows,
|
|
133
135
|
}
|
|
134
136
|
),
|
|
137
|
+
}
|
|
138
|
+
},
|
|
135
139
|
|
|
136
|
-
|
|
140
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
141
|
+
instance: TableInstance<TGenerics>
|
|
142
|
+
): VisibilityInstance<TGenerics> => {
|
|
143
|
+
const makeVisibleColumnsMethod = (
|
|
144
|
+
key: string,
|
|
145
|
+
getColumns: () => Column<TGenerics>[]
|
|
146
|
+
): (() => Column<TGenerics>[]) => {
|
|
147
|
+
return memo(
|
|
137
148
|
() => [
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
.
|
|
141
|
-
.filter(d => d.getIsVisible?.())
|
|
149
|
+
getColumns(),
|
|
150
|
+
getColumns()
|
|
151
|
+
.filter(d => d.getIsVisible())
|
|
142
152
|
.map(d => d.id)
|
|
143
153
|
.join('_'),
|
|
144
154
|
],
|
|
145
|
-
|
|
146
|
-
return
|
|
155
|
+
columns => {
|
|
156
|
+
return columns.filter(d => d.getIsVisible?.())
|
|
147
157
|
},
|
|
148
158
|
{
|
|
149
|
-
key
|
|
159
|
+
key,
|
|
150
160
|
debug: () =>
|
|
151
161
|
instance.options.debugAll ?? instance.options.debugColumns,
|
|
152
162
|
}
|
|
163
|
+
)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return {
|
|
167
|
+
getVisibleFlatColumns: makeVisibleColumnsMethod(
|
|
168
|
+
'getVisibleFlatColumns',
|
|
169
|
+
() => instance.getAllFlatColumns()
|
|
170
|
+
),
|
|
171
|
+
getVisibleLeafColumns: makeVisibleColumnsMethod(
|
|
172
|
+
'getVisibleLeafColumns',
|
|
173
|
+
() => instance.getAllLeafColumns()
|
|
174
|
+
),
|
|
175
|
+
getLeftVisibleLeafColumns: makeVisibleColumnsMethod(
|
|
176
|
+
'getLeftVisibleLeafColumns',
|
|
177
|
+
() => instance.getLeftLeafColumns()
|
|
178
|
+
),
|
|
179
|
+
getRightVisibleLeafColumns: makeVisibleColumnsMethod(
|
|
180
|
+
'getRightVisibleLeafColumns',
|
|
181
|
+
() => instance.getRightLeafColumns()
|
|
182
|
+
),
|
|
183
|
+
getCenterVisibleLeafColumns: makeVisibleColumnsMethod(
|
|
184
|
+
'getCenterVisibleLeafColumns',
|
|
185
|
+
() => instance.getCenterLeafColumns()
|
|
153
186
|
),
|
|
154
187
|
|
|
155
188
|
setColumnVisibility: updater =>
|
|
156
|
-
instance.options.onColumnVisibilityChange?.(
|
|
157
|
-
updater,
|
|
158
|
-
functionalUpdate(updater, instance.getState().columnVisibility)
|
|
159
|
-
),
|
|
189
|
+
instance.options.onColumnVisibilityChange?.(updater),
|
|
160
190
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
instance.setColumnVisibility(old => ({
|
|
166
|
-
...old,
|
|
167
|
-
[columnId]: value ?? !instance.getColumnIsVisible(columnId),
|
|
168
|
-
}))
|
|
169
|
-
}
|
|
191
|
+
resetColumnVisibility: defaultState => {
|
|
192
|
+
instance.setColumnVisibility(
|
|
193
|
+
defaultState ? {} : instance.initialState.columnVisibility ?? {}
|
|
194
|
+
)
|
|
170
195
|
},
|
|
171
196
|
|
|
172
197
|
toggleAllColumnsVisible: value => {
|
|
@@ -183,59 +208,18 @@ export const Visibility = {
|
|
|
183
208
|
)
|
|
184
209
|
},
|
|
185
210
|
|
|
186
|
-
getColumnIsVisible: columnId => {
|
|
187
|
-
const column = instance.getColumn(columnId)
|
|
188
|
-
|
|
189
|
-
if (!column) {
|
|
190
|
-
throw new Error()
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
return (
|
|
194
|
-
instance.getState().columnVisibility?.[columnId] ??
|
|
195
|
-
column.defaultIsVisible ??
|
|
196
|
-
true
|
|
197
|
-
)
|
|
198
|
-
},
|
|
199
|
-
|
|
200
|
-
getColumnCanHide: columnId => {
|
|
201
|
-
const column = instance.getColumn(columnId)
|
|
202
|
-
|
|
203
|
-
if (!column) {
|
|
204
|
-
throw new Error()
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
return (
|
|
208
|
-
instance.options.enableHiding ??
|
|
209
|
-
column.enableHiding ??
|
|
210
|
-
column.defaultCanHide ??
|
|
211
|
-
true
|
|
212
|
-
)
|
|
213
|
-
},
|
|
214
|
-
|
|
215
211
|
getIsAllColumnsVisible: () =>
|
|
216
212
|
!instance.getAllLeafColumns().some(column => !column.getIsVisible?.()),
|
|
217
213
|
|
|
218
214
|
getIsSomeColumnsVisible: () =>
|
|
219
215
|
instance.getAllLeafColumns().some(column => column.getIsVisible?.()),
|
|
220
216
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
)
|
|
227
|
-
},
|
|
228
|
-
type: 'checkbox',
|
|
229
|
-
title: 'Toggle visibility for all columns',
|
|
230
|
-
checked: instance.getIsAllColumnsVisible(),
|
|
231
|
-
indeterminate:
|
|
232
|
-
!instance.getIsAllColumnsVisible() &&
|
|
233
|
-
instance.getIsSomeColumnsVisible()
|
|
234
|
-
? 'indeterminate'
|
|
235
|
-
: undefined,
|
|
217
|
+
getToggleAllColumnsVisibilityHandler: () => {
|
|
218
|
+
return (e: unknown) => {
|
|
219
|
+
instance.toggleAllColumnsVisible(
|
|
220
|
+
((e as MouseEvent).target as HTMLInputElement)?.checked
|
|
221
|
+
)
|
|
236
222
|
}
|
|
237
|
-
|
|
238
|
-
return propGetter(props, userProps)
|
|
239
223
|
},
|
|
240
224
|
}
|
|
241
225
|
},
|
package/src/filterFns.ts
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { FilterFn } from './features/Filters'
|
|
2
|
+
|
|
3
|
+
const includesString: FilterFn<any> = (
|
|
4
|
+
row,
|
|
5
|
+
columnId: string,
|
|
6
|
+
filterValue: string
|
|
7
|
+
) => {
|
|
8
|
+
const search = filterValue.toLowerCase()
|
|
9
|
+
return row.getValue(columnId).toLowerCase().includes(search)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
includesString.autoRemove = (val: any) => testFalsey(val)
|
|
13
|
+
|
|
14
|
+
const includesStringSensitive: FilterFn<any> = (
|
|
15
|
+
row,
|
|
16
|
+
columnId: string,
|
|
17
|
+
filterValue: string
|
|
18
|
+
) => {
|
|
19
|
+
return row.getValue(columnId).includes(filterValue)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
includesStringSensitive.autoRemove = (val: any) => testFalsey(val)
|
|
23
|
+
|
|
24
|
+
const equalsString: FilterFn<any> = (
|
|
25
|
+
row,
|
|
26
|
+
columnId: string,
|
|
27
|
+
filterValue: string
|
|
28
|
+
) => {
|
|
29
|
+
return row.getValue(columnId).toLowerCase() === filterValue.toLowerCase()
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
equalsString.autoRemove = (val: any) => testFalsey(val)
|
|
33
|
+
|
|
34
|
+
const arrIncludes: FilterFn<any> = (
|
|
35
|
+
row,
|
|
36
|
+
columnId: string,
|
|
37
|
+
filterValue: unknown
|
|
38
|
+
) => {
|
|
39
|
+
return row.getValue(columnId).includes(filterValue)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
arrIncludes.autoRemove = (val: any) => testFalsey(val) || !val?.length
|
|
43
|
+
|
|
44
|
+
const arrIncludesAll: FilterFn<any> = (
|
|
45
|
+
row,
|
|
46
|
+
columnId: string,
|
|
47
|
+
filterValue: unknown[]
|
|
48
|
+
) => {
|
|
49
|
+
return !filterValue.some(val => !row.getValue(columnId).includes(val))
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
arrIncludesAll.autoRemove = (val: any) => testFalsey(val) || !val?.length
|
|
53
|
+
|
|
54
|
+
const arrIncludesSome: FilterFn<any> = (
|
|
55
|
+
row,
|
|
56
|
+
columnId: string,
|
|
57
|
+
filterValue: unknown[]
|
|
58
|
+
) => {
|
|
59
|
+
return filterValue.some(val => row.getValue(columnId).includes(val))
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
arrIncludesSome.autoRemove = (val: any) => testFalsey(val) || !val?.length
|
|
63
|
+
|
|
64
|
+
const equals: FilterFn<any> = (row, columnId: string, filterValue: unknown) => {
|
|
65
|
+
return row.getValue(columnId) === filterValue
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
equals.autoRemove = (val: any) => testFalsey(val)
|
|
69
|
+
|
|
70
|
+
const weakEquals: FilterFn<any> = (
|
|
71
|
+
row,
|
|
72
|
+
columnId: string,
|
|
73
|
+
filterValue: unknown
|
|
74
|
+
) => {
|
|
75
|
+
return row.getValue(columnId) == filterValue
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
weakEquals.autoRemove = (val: any) => testFalsey(val)
|
|
79
|
+
|
|
80
|
+
const inNumberRange: FilterFn<any> = (
|
|
81
|
+
row,
|
|
82
|
+
columnId: string,
|
|
83
|
+
filterValue: [number, number]
|
|
84
|
+
) => {
|
|
85
|
+
let [min, max] = filterValue
|
|
86
|
+
|
|
87
|
+
const rowValue = row.getValue(columnId)
|
|
88
|
+
return rowValue >= min && rowValue <= max
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
inNumberRange.resolveFilterValue = (val: [any, any]) => {
|
|
92
|
+
let [unsafeMin, unsafeMax] = val
|
|
93
|
+
|
|
94
|
+
let parsedMin =
|
|
95
|
+
typeof unsafeMin !== 'number' ? parseFloat(unsafeMin as string) : unsafeMin
|
|
96
|
+
let parsedMax =
|
|
97
|
+
typeof unsafeMax !== 'number' ? parseFloat(unsafeMax as string) : unsafeMax
|
|
98
|
+
|
|
99
|
+
let min =
|
|
100
|
+
unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin
|
|
101
|
+
let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax
|
|
102
|
+
|
|
103
|
+
if (min > max) {
|
|
104
|
+
const temp = min
|
|
105
|
+
min = max
|
|
106
|
+
max = temp
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return [min, max] as const
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
inNumberRange.autoRemove = (val: any) =>
|
|
113
|
+
testFalsey(val) || (testFalsey(val[0]) && testFalsey(val[1]))
|
|
114
|
+
|
|
115
|
+
// Export
|
|
116
|
+
|
|
117
|
+
export const filterFns = {
|
|
118
|
+
includesString,
|
|
119
|
+
includesStringSensitive,
|
|
120
|
+
equalsString,
|
|
121
|
+
arrIncludes,
|
|
122
|
+
arrIncludesAll,
|
|
123
|
+
arrIncludesSome,
|
|
124
|
+
equals,
|
|
125
|
+
weakEquals,
|
|
126
|
+
inNumberRange,
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export type BuiltInFilterFn = keyof typeof filterFns
|
|
130
|
+
|
|
131
|
+
// Utils
|
|
132
|
+
|
|
133
|
+
function testFalsey(val: any) {
|
|
134
|
+
return val === undefined || val === null || val === ''
|
|
135
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export * from './core/instance'
|
|
2
|
+
export * from './types'
|
|
3
|
+
export * from './createTable'
|
|
4
|
+
export * from './core/column'
|
|
5
|
+
export * from './core/headers'
|
|
6
|
+
export * from './core/row'
|
|
7
|
+
export * from './features/ColumnSizing'
|
|
8
|
+
export * from './features/Expanding'
|
|
9
|
+
export * from './features/Filters'
|
|
10
|
+
export * from './features/Grouping'
|
|
11
|
+
export * from './features/Ordering'
|
|
12
|
+
export * from './features/Pagination'
|
|
13
|
+
export * from './features/Pinning'
|
|
14
|
+
export * from './features/RowSelection'
|
|
15
|
+
export * from './features/Sorting'
|
|
16
|
+
export * from './features/Visibility'
|
|
17
|
+
export * from './filterFns'
|
|
18
|
+
export * from './sortingFns'
|
|
19
|
+
export * from './aggregationFns'
|
|
20
|
+
export * from './utils'
|
|
21
|
+
export * from './utils/getCoreRowModel'
|
|
22
|
+
export * from './utils/getFilteredRowModel'
|
|
23
|
+
export * from './utils/getFacetedRowModel'
|
|
24
|
+
export * from './utils/getFacetedUniqueValues'
|
|
25
|
+
export * from './utils/getFacetedMinMaxValues'
|
|
26
|
+
export * from './utils/getSortedRowModel'
|
|
27
|
+
export * from './utils/getGroupedRowModel'
|
|
28
|
+
export * from './utils/getExpandedRowModel'
|
|
29
|
+
export * from './utils/getPaginationRowModel'
|
|
@@ -1,40 +1,69 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SortingFn } from './features/Sorting'
|
|
2
2
|
|
|
3
3
|
export const reSplitAlphaNumeric = /([0-9]+)/gm
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
datetime,
|
|
11
|
-
basic,
|
|
5
|
+
const alphanumeric: SortingFn<any> = (rowA, rowB, columnId) => {
|
|
6
|
+
return compareAlphanumeric(
|
|
7
|
+
toString(rowA.getValue(columnId)).toLowerCase(),
|
|
8
|
+
toString(rowB.getValue(columnId)).toLowerCase()
|
|
9
|
+
)
|
|
12
10
|
}
|
|
13
11
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
function alphanumeric<TGenerics extends PartialGenerics>(
|
|
17
|
-
rowA: Row<TGenerics>,
|
|
18
|
-
rowB: Row<TGenerics>,
|
|
19
|
-
columnId: string
|
|
20
|
-
) {
|
|
12
|
+
const alphanumericCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {
|
|
21
13
|
return compareAlphanumeric(
|
|
22
|
-
toString(rowA.
|
|
23
|
-
toString(rowB.
|
|
14
|
+
toString(rowA.getValue(columnId)),
|
|
15
|
+
toString(rowB.getValue(columnId))
|
|
24
16
|
)
|
|
25
17
|
}
|
|
26
18
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
19
|
+
// The text filter is more basic (less numeric support)
|
|
20
|
+
// but is much faster
|
|
21
|
+
const text: SortingFn<any> = (rowA, rowB, columnId) => {
|
|
22
|
+
return compareBasic(
|
|
23
|
+
toString(rowA.getValue(columnId)).toLowerCase(),
|
|
24
|
+
toString(rowB.getValue(columnId)).toLowerCase()
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// The text filter is more basic (less numeric support)
|
|
29
|
+
// but is much faster
|
|
30
|
+
const textCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {
|
|
31
|
+
return compareBasic(
|
|
32
|
+
toString(rowA.getValue(columnId)),
|
|
33
|
+
toString(rowB.getValue(columnId))
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const datetime: SortingFn<any> = (rowA, rowB, columnId) => {
|
|
38
|
+
return compareBasic(
|
|
39
|
+
(rowA.getValue(columnId) as Date).getTime(),
|
|
40
|
+
(rowB.getValue(columnId) as Date).getTime()
|
|
35
41
|
)
|
|
36
42
|
}
|
|
37
43
|
|
|
44
|
+
const basic: SortingFn<any> = (rowA, rowB, columnId) => {
|
|
45
|
+
return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId))
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Utils
|
|
49
|
+
|
|
50
|
+
function compareBasic(a: any, b: any) {
|
|
51
|
+
return a === b ? 0 : a > b ? 1 : -1
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function toString(a: any) {
|
|
55
|
+
if (typeof a === 'number') {
|
|
56
|
+
if (isNaN(a) || a === Infinity || a === -Infinity) {
|
|
57
|
+
return ''
|
|
58
|
+
}
|
|
59
|
+
return String(a)
|
|
60
|
+
}
|
|
61
|
+
if (typeof a === 'string') {
|
|
62
|
+
return a
|
|
63
|
+
}
|
|
64
|
+
return ''
|
|
65
|
+
}
|
|
66
|
+
|
|
38
67
|
// Mixed sorting is slow, but very inclusive of many edge cases.
|
|
39
68
|
// It handles numbers, mixed alphanumeric combinations, and even
|
|
40
69
|
// null, undefined, and Infinity
|
|
@@ -82,66 +111,15 @@ function compareAlphanumeric(aStr: string, bStr: string) {
|
|
|
82
111
|
return a.length - b.length
|
|
83
112
|
}
|
|
84
113
|
|
|
85
|
-
//
|
|
86
|
-
// but is much faster
|
|
87
|
-
function text<TGenerics extends PartialGenerics>(
|
|
88
|
-
rowA: Row<TGenerics>,
|
|
89
|
-
rowB: Row<TGenerics>,
|
|
90
|
-
columnId: string
|
|
91
|
-
) {
|
|
92
|
-
return compareBasic(
|
|
93
|
-
toString(rowA.values[columnId]).toLowerCase(),
|
|
94
|
-
toString(rowB.values[columnId]).toLowerCase()
|
|
95
|
-
)
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// The text filter is more basic (less numeric support)
|
|
99
|
-
// but is much faster
|
|
100
|
-
function textCaseSensitive<TGenerics extends PartialGenerics>(
|
|
101
|
-
rowA: Row<TGenerics>,
|
|
102
|
-
rowB: Row<TGenerics>,
|
|
103
|
-
columnId: string
|
|
104
|
-
) {
|
|
105
|
-
return compareBasic(
|
|
106
|
-
toString(rowA.values[columnId]),
|
|
107
|
-
toString(rowB.values[columnId])
|
|
108
|
-
)
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
function datetime<TGenerics extends PartialGenerics>(
|
|
112
|
-
rowA: Row<TGenerics>,
|
|
113
|
-
rowB: Row<TGenerics>,
|
|
114
|
-
columnId: string
|
|
115
|
-
) {
|
|
116
|
-
return compareBasic(
|
|
117
|
-
(rowA.values[columnId] as Date).getTime(),
|
|
118
|
-
(rowB.values[columnId] as Date).getTime()
|
|
119
|
-
)
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function basic<TGenerics extends PartialGenerics>(
|
|
123
|
-
rowA: Row<TGenerics>,
|
|
124
|
-
rowB: Row<TGenerics>,
|
|
125
|
-
columnId: string
|
|
126
|
-
) {
|
|
127
|
-
return compareBasic(rowA.values[columnId], rowB.values[columnId])
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// Utils
|
|
114
|
+
// Exports
|
|
131
115
|
|
|
132
|
-
|
|
133
|
-
|
|
116
|
+
export const sortingFns = {
|
|
117
|
+
alphanumeric,
|
|
118
|
+
alphanumericCaseSensitive,
|
|
119
|
+
text,
|
|
120
|
+
textCaseSensitive,
|
|
121
|
+
datetime,
|
|
122
|
+
basic,
|
|
134
123
|
}
|
|
135
124
|
|
|
136
|
-
|
|
137
|
-
if (typeof a === 'number') {
|
|
138
|
-
if (isNaN(a) || a === Infinity || a === -Infinity) {
|
|
139
|
-
return ''
|
|
140
|
-
}
|
|
141
|
-
return String(a)
|
|
142
|
-
}
|
|
143
|
-
if (typeof a === 'string') {
|
|
144
|
-
return a
|
|
145
|
-
}
|
|
146
|
-
return ''
|
|
147
|
-
}
|
|
125
|
+
export type BuiltInSortingFn = keyof typeof sortingFns
|