@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
package/src/features/Sorting.ts
CHANGED
|
@@ -1,27 +1,21 @@
|
|
|
1
|
-
import { MouseEvent, TouchEvent } from 'react'
|
|
2
1
|
import { RowModel } from '..'
|
|
3
|
-
import {
|
|
2
|
+
import { TableFeature } from '../core/instance'
|
|
3
|
+
import {
|
|
4
|
+
BuiltInSortingFn,
|
|
5
|
+
reSplitAlphaNumeric,
|
|
6
|
+
sortingFns,
|
|
7
|
+
} from '../sortingFns'
|
|
4
8
|
|
|
5
9
|
import {
|
|
6
10
|
Column,
|
|
7
|
-
Getter,
|
|
8
|
-
Header,
|
|
9
11
|
OnChangeFn,
|
|
10
|
-
|
|
11
|
-
PropGetterValue,
|
|
12
|
+
TableGenerics,
|
|
12
13
|
TableInstance,
|
|
13
14
|
Row,
|
|
14
15
|
Updater,
|
|
15
16
|
} from '../types'
|
|
16
17
|
|
|
17
|
-
import {
|
|
18
|
-
functionalUpdate,
|
|
19
|
-
isFunction,
|
|
20
|
-
makeStateUpdater,
|
|
21
|
-
memo,
|
|
22
|
-
Overwrite,
|
|
23
|
-
propGetter,
|
|
24
|
-
} from '../utils'
|
|
18
|
+
import { isFunction, makeStateUpdater, Overwrite } from '../utils'
|
|
25
19
|
|
|
26
20
|
export type SortDirection = 'asc' | 'desc'
|
|
27
21
|
|
|
@@ -32,197 +26,134 @@ export type ColumnSort = {
|
|
|
32
26
|
|
|
33
27
|
export type SortingState = ColumnSort[]
|
|
34
28
|
|
|
35
|
-
export type
|
|
29
|
+
export type SortingTableState = {
|
|
30
|
+
sorting: SortingState
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type SortingFn<TGenerics extends TableGenerics> = {
|
|
36
34
|
(rowA: Row<TGenerics>, rowB: Row<TGenerics>, columnId: string): number
|
|
37
35
|
}
|
|
38
36
|
|
|
39
|
-
export type
|
|
37
|
+
export type CustomSortingFns<TGenerics extends TableGenerics> = Record<
|
|
40
38
|
string,
|
|
41
39
|
SortingFn<TGenerics>
|
|
42
40
|
>
|
|
43
41
|
|
|
44
|
-
export type
|
|
45
|
-
sorting: SortingState
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export type SortType<TGenerics extends PartialGenerics> =
|
|
42
|
+
export type SortingFnOption<TGenerics extends TableGenerics> =
|
|
49
43
|
| 'auto'
|
|
50
|
-
|
|
|
44
|
+
| BuiltInSortingFn
|
|
51
45
|
| keyof TGenerics['SortingFns']
|
|
52
46
|
| SortingFn<TGenerics>
|
|
53
47
|
|
|
54
|
-
export type SortingColumnDef<TGenerics extends
|
|
55
|
-
|
|
48
|
+
export type SortingColumnDef<TGenerics extends TableGenerics> = {
|
|
49
|
+
sortingFn?: SortingFnOption<Overwrite<TGenerics, { Value: any }>>
|
|
56
50
|
sortDescFirst?: boolean
|
|
57
51
|
enableSorting?: boolean
|
|
58
52
|
enableMultiSort?: boolean
|
|
59
|
-
defaultCanSort?: boolean
|
|
60
53
|
invertSorting?: boolean
|
|
61
54
|
sortUndefined?: false | -1 | 1
|
|
62
55
|
}
|
|
63
56
|
|
|
64
|
-
export type SortingColumn<TGenerics extends
|
|
65
|
-
|
|
57
|
+
export type SortingColumn<TGenerics extends TableGenerics> = {
|
|
58
|
+
getAutoSortingFn: () => SortingFn<TGenerics>
|
|
59
|
+
getAutoSortDir: () => SortDirection
|
|
60
|
+
getSortingFn: () => SortingFn<TGenerics>
|
|
66
61
|
getCanSort: () => boolean
|
|
67
62
|
getCanMultiSort: () => boolean
|
|
68
63
|
getSortIndex: () => number
|
|
69
64
|
getIsSorted: () => false | SortDirection
|
|
65
|
+
clearSorting: () => void
|
|
70
66
|
toggleSorting: (desc?: boolean, isMulti?: boolean) => void
|
|
71
|
-
|
|
72
|
-
userProps?: TGetter
|
|
73
|
-
) => undefined | PropGetterValue<ToggleSortingProps, TGetter>
|
|
67
|
+
getToggleSortingHandler: () => undefined | ((event: unknown) => void)
|
|
74
68
|
}
|
|
75
69
|
|
|
76
|
-
export type SortingOptions<TGenerics extends
|
|
77
|
-
|
|
70
|
+
export type SortingOptions<TGenerics extends TableGenerics> = {
|
|
71
|
+
manualSorting?: boolean
|
|
72
|
+
sortingFns?: TGenerics['SortingFns']
|
|
78
73
|
onSortingChange?: OnChangeFn<SortingState>
|
|
79
|
-
autoResetSorting?: boolean
|
|
80
74
|
enableSorting?: boolean
|
|
81
75
|
enableSortingRemoval?: boolean
|
|
82
76
|
enableMultiRemove?: boolean
|
|
83
77
|
enableMultiSort?: boolean
|
|
84
78
|
sortDescFirst?: boolean
|
|
85
|
-
|
|
86
|
-
instance: TableInstance<TGenerics>,
|
|
87
|
-
rowModel: RowModel<TGenerics>
|
|
88
|
-
) => RowModel<TGenerics>
|
|
79
|
+
getSortedRowModel?: (instance: TableInstance<any>) => () => RowModel<any>
|
|
89
80
|
maxMultiSortColCount?: number
|
|
90
|
-
isMultiSortEvent?: (e:
|
|
81
|
+
isMultiSortEvent?: (e: unknown) => boolean
|
|
91
82
|
}
|
|
92
83
|
|
|
93
|
-
export type
|
|
94
|
-
title?: string
|
|
95
|
-
onClick?: (event: MouseEvent | TouchEvent) => void
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export type SortingInstance<TGenerics extends PartialGenerics> = {
|
|
99
|
-
_notifySortingReset: () => void
|
|
100
|
-
getColumnAutoSortingFn: (columnId: string) => SortingFn<TGenerics> | undefined
|
|
101
|
-
getColumnAutoSortDir: (columnId: string) => SortDirection
|
|
102
|
-
|
|
103
|
-
getColumnSortingFn: (columnId: string) => SortingFn<TGenerics> | undefined
|
|
104
|
-
|
|
84
|
+
export type SortingInstance<TGenerics extends TableGenerics> = {
|
|
105
85
|
setSorting: (updater: Updater<SortingState>) => void
|
|
106
|
-
|
|
107
|
-
columnId: string,
|
|
108
|
-
desc?: boolean,
|
|
109
|
-
multi?: boolean
|
|
110
|
-
) => void
|
|
111
|
-
resetSorting: () => void
|
|
112
|
-
getColumnCanSort: (columnId: string) => boolean
|
|
113
|
-
getColumnCanMultiSort: (columnId: string) => boolean
|
|
114
|
-
getColumnIsSorted: (columnId: string) => false | 'asc' | 'desc'
|
|
115
|
-
getColumnSortIndex: (columnId: string) => number
|
|
116
|
-
getToggleSortingProps: <TGetter extends Getter<ToggleSortingProps>>(
|
|
117
|
-
columnId: string,
|
|
118
|
-
userProps?: TGetter
|
|
119
|
-
) => undefined | PropGetterValue<ToggleSortingProps, TGetter>
|
|
86
|
+
resetSorting: (defaultState?: boolean) => void
|
|
120
87
|
getPreSortedRowModel: () => RowModel<TGenerics>
|
|
121
88
|
getSortedRowModel: () => RowModel<TGenerics>
|
|
89
|
+
_getSortedRowModel?: () => RowModel<TGenerics>
|
|
122
90
|
}
|
|
123
91
|
|
|
124
92
|
//
|
|
125
93
|
|
|
126
|
-
export const Sorting = {
|
|
127
|
-
|
|
128
|
-
TGenerics extends PartialGenerics
|
|
129
|
-
>(): SortingColumnDef<TGenerics> => {
|
|
94
|
+
export const Sorting: TableFeature = {
|
|
95
|
+
getInitialState: (state): SortingTableState => {
|
|
130
96
|
return {
|
|
131
|
-
|
|
97
|
+
sorting: [],
|
|
98
|
+
...state,
|
|
132
99
|
}
|
|
133
100
|
},
|
|
134
101
|
|
|
135
|
-
|
|
102
|
+
getDefaultColumnDef: <
|
|
103
|
+
TGenerics extends TableGenerics
|
|
104
|
+
>(): SortingColumnDef<TGenerics> => {
|
|
136
105
|
return {
|
|
137
|
-
|
|
106
|
+
sortingFn: 'auto',
|
|
138
107
|
}
|
|
139
108
|
},
|
|
140
109
|
|
|
141
|
-
getDefaultOptions: <TGenerics extends
|
|
110
|
+
getDefaultOptions: <TGenerics extends TableGenerics>(
|
|
142
111
|
instance: TableInstance<TGenerics>
|
|
143
112
|
): SortingOptions<TGenerics> => {
|
|
144
113
|
return {
|
|
145
114
|
onSortingChange: makeStateUpdater('sorting', instance),
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return e.shiftKey
|
|
115
|
+
isMultiSortEvent: (e: unknown) => {
|
|
116
|
+
return (e as MouseEvent).shiftKey
|
|
149
117
|
},
|
|
150
118
|
}
|
|
151
119
|
},
|
|
152
120
|
|
|
153
|
-
createColumn: <TGenerics extends
|
|
121
|
+
createColumn: <TGenerics extends TableGenerics>(
|
|
154
122
|
column: Column<TGenerics>,
|
|
155
123
|
instance: TableInstance<TGenerics>
|
|
156
124
|
): SortingColumn<TGenerics> => {
|
|
157
125
|
return {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
getCanMultiSort: () => instance.getColumnCanMultiSort(column.id),
|
|
161
|
-
getSortIndex: () => instance.getColumnSortIndex(column.id),
|
|
162
|
-
getIsSorted: () => instance.getColumnIsSorted(column.id),
|
|
163
|
-
toggleSorting: (desc, isMulti) =>
|
|
164
|
-
instance.toggleColumnSorting(column.id, desc, isMulti),
|
|
165
|
-
getToggleSortingProps: userProps =>
|
|
166
|
-
instance.getToggleSortingProps(column.id, userProps),
|
|
167
|
-
}
|
|
168
|
-
},
|
|
169
|
-
|
|
170
|
-
getInstance: <TGenerics extends PartialGenerics>(
|
|
171
|
-
instance: TableInstance<TGenerics>
|
|
172
|
-
): SortingInstance<TGenerics> => {
|
|
173
|
-
let registered = false
|
|
174
|
-
|
|
175
|
-
return {
|
|
176
|
-
_notifySortingReset: () => {
|
|
177
|
-
if (!registered) {
|
|
178
|
-
registered = true
|
|
179
|
-
return
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
if (instance.options.autoResetAll === false) {
|
|
183
|
-
return
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
if (
|
|
187
|
-
instance.options.autoResetAll === true ||
|
|
188
|
-
instance.options.autoResetSorting
|
|
189
|
-
) {
|
|
190
|
-
instance.resetSorting()
|
|
191
|
-
}
|
|
192
|
-
},
|
|
193
|
-
getColumnAutoSortingFn: columnId => {
|
|
194
|
-
const firstRows = instance
|
|
195
|
-
.getGlobalFilteredRowModel()
|
|
196
|
-
.flatRows.slice(100)
|
|
126
|
+
getAutoSortingFn: () => {
|
|
127
|
+
const firstRows = instance.getFilteredRowModel().flatRows.slice(10)
|
|
197
128
|
|
|
198
129
|
let isString = false
|
|
199
130
|
|
|
200
131
|
for (const row of firstRows) {
|
|
201
|
-
const value = row?.
|
|
132
|
+
const value = row?.getValue(column.id)
|
|
202
133
|
|
|
203
134
|
if (Object.prototype.toString.call(value) === '[object Date]') {
|
|
204
|
-
return
|
|
135
|
+
return sortingFns.datetime
|
|
205
136
|
}
|
|
206
137
|
|
|
207
138
|
if (typeof value === 'string') {
|
|
208
139
|
isString = true
|
|
209
140
|
|
|
210
141
|
if (value.split(reSplitAlphaNumeric).length > 1) {
|
|
211
|
-
return
|
|
142
|
+
return sortingFns.alphanumeric
|
|
212
143
|
}
|
|
213
144
|
}
|
|
214
145
|
}
|
|
215
146
|
|
|
216
147
|
if (isString) {
|
|
217
|
-
return
|
|
148
|
+
return sortingFns.text
|
|
218
149
|
}
|
|
219
150
|
|
|
220
|
-
return
|
|
151
|
+
return sortingFns.basic
|
|
221
152
|
},
|
|
222
|
-
|
|
223
|
-
const firstRow = instance.
|
|
153
|
+
getAutoSortDir: () => {
|
|
154
|
+
const firstRow = instance.getFilteredRowModel().flatRows[0]
|
|
224
155
|
|
|
225
|
-
const value = firstRow?.
|
|
156
|
+
const value = firstRow?.getValue(column.id)
|
|
226
157
|
|
|
227
158
|
if (typeof value === 'string') {
|
|
228
159
|
return 'asc'
|
|
@@ -230,39 +161,25 @@ export const Sorting = {
|
|
|
230
161
|
|
|
231
162
|
return 'desc'
|
|
232
163
|
},
|
|
233
|
-
|
|
234
|
-
const
|
|
235
|
-
const userSortTypes = instance.options.sortTypes
|
|
164
|
+
getSortingFn: () => {
|
|
165
|
+
const userSortingFn = instance.options.sortingFns
|
|
236
166
|
|
|
237
167
|
if (!column) {
|
|
238
168
|
throw new Error()
|
|
239
169
|
}
|
|
240
170
|
|
|
241
|
-
return isFunction(column.
|
|
242
|
-
? column.
|
|
243
|
-
: column.
|
|
244
|
-
?
|
|
245
|
-
: (
|
|
246
|
-
column.
|
|
171
|
+
return isFunction(column.columnDef.sortingFn)
|
|
172
|
+
? column.columnDef.sortingFn
|
|
173
|
+
: column.columnDef.sortingFn === 'auto'
|
|
174
|
+
? column.getAutoSortingFn()
|
|
175
|
+
: (userSortingFn as Record<string, any>)?.[
|
|
176
|
+
column.columnDef.sortingFn as string
|
|
247
177
|
] ??
|
|
248
|
-
(
|
|
249
|
-
column.
|
|
178
|
+
(sortingFns[
|
|
179
|
+
column.columnDef.sortingFn as BuiltInSortingFn
|
|
250
180
|
] as SortingFn<TGenerics>)
|
|
251
181
|
},
|
|
252
|
-
|
|
253
|
-
setSorting: updater =>
|
|
254
|
-
instance.options.onSortingChange?.(
|
|
255
|
-
updater,
|
|
256
|
-
functionalUpdate(updater, instance.getState().sorting)
|
|
257
|
-
),
|
|
258
|
-
|
|
259
|
-
toggleColumnSorting: (columnId, desc, multi) => {
|
|
260
|
-
const column = instance.getColumn(columnId)
|
|
261
|
-
|
|
262
|
-
if (!column) {
|
|
263
|
-
throw new Error()
|
|
264
|
-
}
|
|
265
|
-
|
|
182
|
+
toggleSorting: (desc, multi) => {
|
|
266
183
|
// if (column.columns.length) {
|
|
267
184
|
// column.columns.forEach((c, i) => {
|
|
268
185
|
// if (c.id) {
|
|
@@ -274,8 +191,8 @@ export const Sorting = {
|
|
|
274
191
|
|
|
275
192
|
instance.setSorting(old => {
|
|
276
193
|
// Find any existing sorting for this column
|
|
277
|
-
const existingSorting = old?.find(d => d.id ===
|
|
278
|
-
const existingIndex = old?.findIndex(d => d.id ===
|
|
194
|
+
const existingSorting = old?.find(d => d.id === column.id)
|
|
195
|
+
const existingIndex = old?.findIndex(d => d.id === column.id)
|
|
279
196
|
const hasDescDefined = typeof desc !== 'undefined' && desc !== null
|
|
280
197
|
|
|
281
198
|
let newSorting: SortingState = []
|
|
@@ -301,9 +218,9 @@ export const Sorting = {
|
|
|
301
218
|
}
|
|
302
219
|
|
|
303
220
|
const sortDescFirst =
|
|
304
|
-
column.sortDescFirst ??
|
|
221
|
+
column.columnDef.sortDescFirst ??
|
|
305
222
|
instance.options.sortDescFirst ??
|
|
306
|
-
|
|
223
|
+
column.getAutoSortDir() === 'desc'
|
|
307
224
|
|
|
308
225
|
// Handle toggle states that will remove the sorting
|
|
309
226
|
if (
|
|
@@ -321,7 +238,7 @@ export const Sorting = {
|
|
|
321
238
|
if (sortAction === 'replace') {
|
|
322
239
|
newSorting = [
|
|
323
240
|
{
|
|
324
|
-
id:
|
|
241
|
+
id: column.id,
|
|
325
242
|
desc: hasDescDefined ? desc! : !!sortDescFirst,
|
|
326
243
|
},
|
|
327
244
|
]
|
|
@@ -329,7 +246,7 @@ export const Sorting = {
|
|
|
329
246
|
newSorting = [
|
|
330
247
|
...old,
|
|
331
248
|
{
|
|
332
|
-
id:
|
|
249
|
+
id: column.id,
|
|
333
250
|
desc: hasDescDefined ? desc! : !!sortDescFirst,
|
|
334
251
|
},
|
|
335
252
|
]
|
|
@@ -343,7 +260,7 @@ export const Sorting = {
|
|
|
343
260
|
} else if (sortAction === 'toggle' && old?.length) {
|
|
344
261
|
// This flips (or sets) the
|
|
345
262
|
newSorting = old.map(d => {
|
|
346
|
-
if (d.id ===
|
|
263
|
+
if (d.id === column.id) {
|
|
347
264
|
return {
|
|
348
265
|
...d,
|
|
349
266
|
desc: hasDescDefined ? desc! : !existingSorting?.desc,
|
|
@@ -352,109 +269,92 @@ export const Sorting = {
|
|
|
352
269
|
return d
|
|
353
270
|
})
|
|
354
271
|
} else if (sortAction === 'remove' && old?.length) {
|
|
355
|
-
newSorting = old.filter(d => d.id !==
|
|
272
|
+
newSorting = old.filter(d => d.id !== column.id)
|
|
356
273
|
}
|
|
357
274
|
|
|
358
275
|
return newSorting
|
|
359
276
|
})
|
|
360
277
|
},
|
|
361
278
|
|
|
362
|
-
|
|
363
|
-
const column = instance.getColumn(columnId)
|
|
364
|
-
|
|
365
|
-
if (!column) {
|
|
366
|
-
throw new Error()
|
|
367
|
-
}
|
|
368
|
-
|
|
279
|
+
getCanSort: () => {
|
|
369
280
|
return (
|
|
370
|
-
column.enableSorting ??
|
|
371
|
-
instance.options.enableSorting ??
|
|
372
|
-
column.defaultCanSort ??
|
|
281
|
+
(column.columnDef.enableSorting ?? true) &&
|
|
282
|
+
(instance.options.enableSorting ?? true) &&
|
|
373
283
|
!!column.accessorFn
|
|
374
|
-
// (!!column.accessorFn ||
|
|
375
|
-
// column.columns?.some(c => c.id && instance.getColumnCanSort(c.id))) ??
|
|
376
|
-
// false
|
|
377
284
|
)
|
|
378
285
|
},
|
|
379
286
|
|
|
380
|
-
|
|
381
|
-
const column = instance.getColumn(columnId)
|
|
382
|
-
|
|
383
|
-
if (!column) {
|
|
384
|
-
throw new Error()
|
|
385
|
-
}
|
|
386
|
-
|
|
287
|
+
getCanMultiSort: () => {
|
|
387
288
|
return (
|
|
388
|
-
column.enableMultiSort ??
|
|
289
|
+
column.columnDef.enableMultiSort ??
|
|
389
290
|
instance.options.enableMultiSort ??
|
|
390
291
|
!!column.accessorFn
|
|
391
292
|
)
|
|
392
293
|
},
|
|
393
294
|
|
|
394
|
-
|
|
295
|
+
getIsSorted: () => {
|
|
395
296
|
const columnSort = instance
|
|
396
297
|
.getState()
|
|
397
|
-
.sorting?.find(d => d.id ===
|
|
298
|
+
.sorting?.find(d => d.id === column.id)
|
|
398
299
|
|
|
399
300
|
return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'
|
|
400
301
|
},
|
|
401
302
|
|
|
402
|
-
|
|
403
|
-
instance.getState().sorting?.findIndex(d => d.id ===
|
|
303
|
+
getSortIndex: () =>
|
|
304
|
+
instance.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,
|
|
404
305
|
|
|
405
|
-
|
|
406
|
-
|
|
306
|
+
clearSorting: () => {
|
|
307
|
+
//clear sorting for just 1 column
|
|
308
|
+
instance.setSorting(old =>
|
|
309
|
+
old?.length ? old.filter(d => d.id !== column.id) : []
|
|
310
|
+
)
|
|
407
311
|
},
|
|
408
312
|
|
|
409
|
-
|
|
410
|
-
const column = instance.getColumn(columnId)
|
|
411
|
-
|
|
412
|
-
if (!column) {
|
|
413
|
-
throw new Error()
|
|
414
|
-
}
|
|
415
|
-
|
|
313
|
+
getToggleSortingHandler: () => {
|
|
416
314
|
const canSort = column.getCanSort()
|
|
417
315
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
: false
|
|
428
|
-
)
|
|
429
|
-
}
|
|
430
|
-
: undefined,
|
|
316
|
+
return (e: unknown) => {
|
|
317
|
+
if (!canSort) return
|
|
318
|
+
;(e as any).persist?.()
|
|
319
|
+
column.toggleSorting?.(
|
|
320
|
+
undefined,
|
|
321
|
+
column.getCanMultiSort()
|
|
322
|
+
? instance.options.isMultiSortEvent?.(e)
|
|
323
|
+
: false
|
|
324
|
+
)
|
|
431
325
|
}
|
|
432
|
-
|
|
433
|
-
return propGetter(initialProps, userProps)
|
|
434
326
|
},
|
|
327
|
+
}
|
|
328
|
+
},
|
|
435
329
|
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
instance.getGlobalFilteredRowModel(),
|
|
441
|
-
instance.options.sortRowsFn,
|
|
442
|
-
],
|
|
443
|
-
(sorting, rowModel, sortingFn) => {
|
|
444
|
-
if (!sortingFn || !sorting?.length) {
|
|
445
|
-
return rowModel
|
|
446
|
-
}
|
|
330
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
331
|
+
instance: TableInstance<TGenerics>
|
|
332
|
+
): SortingInstance<TGenerics> => {
|
|
333
|
+
let registered = false
|
|
447
334
|
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
335
|
+
return {
|
|
336
|
+
setSorting: updater => instance.options.onSortingChange?.(updater),
|
|
337
|
+
resetSorting: defaultState => {
|
|
338
|
+
instance.setSorting(
|
|
339
|
+
defaultState ? [] : instance.initialState?.sorting ?? []
|
|
340
|
+
)
|
|
341
|
+
},
|
|
342
|
+
getPreSortedRowModel: () => instance.getFilteredRowModel(),
|
|
343
|
+
getSortedRowModel: () => {
|
|
344
|
+
if (
|
|
345
|
+
!instance._getSortedRowModel &&
|
|
346
|
+
instance.options.getSortedRowModel
|
|
347
|
+
) {
|
|
348
|
+
instance._getSortedRowModel =
|
|
349
|
+
instance.options.getSortedRowModel(instance)
|
|
456
350
|
}
|
|
457
|
-
|
|
351
|
+
|
|
352
|
+
if (instance.options.manualSorting || !instance._getSortedRowModel) {
|
|
353
|
+
return instance.getPreSortedRowModel()
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
return instance._getSortedRowModel()
|
|
357
|
+
},
|
|
458
358
|
}
|
|
459
359
|
},
|
|
460
360
|
}
|