@tanstack/table-core 8.0.0-alpha.9 → 8.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/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/.DS_Store +0 -0
- 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 +361 -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 +122 -194
- package/src/features/Filters.ts +301 -381
- package/src/features/Grouping.ts +160 -220
- package/src/features/Ordering.ts +24 -25
- package/src/features/Pagination.ts +90 -73
- package/src/features/Pinning.ts +186 -63
- package/src/features/RowSelection.ts +107 -245
- package/src/features/Sorting.ts +127 -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/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,136 @@ 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
|
-
|
|
88
|
-
) => RowModel<TGenerics>
|
|
79
|
+
getSortedRowModel?: (
|
|
80
|
+
instance: TableInstance<TGenerics>
|
|
81
|
+
) => () => RowModel<TGenerics>
|
|
89
82
|
maxMultiSortColCount?: number
|
|
90
|
-
isMultiSortEvent?: (e:
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export type ToggleSortingProps = {
|
|
94
|
-
title?: string
|
|
95
|
-
onClick?: (event: MouseEvent | TouchEvent) => void
|
|
83
|
+
isMultiSortEvent?: (e: unknown) => boolean
|
|
96
84
|
}
|
|
97
85
|
|
|
98
|
-
export type SortingInstance<TGenerics extends
|
|
99
|
-
_notifySortingReset: () => void
|
|
100
|
-
getColumnAutoSortingFn: (columnId: string) => SortingFn<TGenerics> | undefined
|
|
101
|
-
getColumnAutoSortDir: (columnId: string) => SortDirection
|
|
102
|
-
|
|
103
|
-
getColumnSortingFn: (columnId: string) => SortingFn<TGenerics> | undefined
|
|
104
|
-
|
|
86
|
+
export type SortingInstance<TGenerics extends TableGenerics> = {
|
|
105
87
|
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>
|
|
88
|
+
resetSorting: (defaultState?: boolean) => void
|
|
120
89
|
getPreSortedRowModel: () => RowModel<TGenerics>
|
|
121
90
|
getSortedRowModel: () => RowModel<TGenerics>
|
|
91
|
+
_getSortedRowModel?: () => RowModel<TGenerics>
|
|
122
92
|
}
|
|
123
93
|
|
|
124
94
|
//
|
|
125
95
|
|
|
126
|
-
export const Sorting = {
|
|
127
|
-
|
|
128
|
-
TGenerics extends PartialGenerics
|
|
129
|
-
>(): SortingColumnDef<TGenerics> => {
|
|
96
|
+
export const Sorting: TableFeature = {
|
|
97
|
+
getInitialState: (state): SortingTableState => {
|
|
130
98
|
return {
|
|
131
|
-
|
|
99
|
+
sorting: [],
|
|
100
|
+
...state,
|
|
132
101
|
}
|
|
133
102
|
},
|
|
134
103
|
|
|
135
|
-
|
|
104
|
+
getDefaultColumnDef: <
|
|
105
|
+
TGenerics extends TableGenerics
|
|
106
|
+
>(): SortingColumnDef<TGenerics> => {
|
|
136
107
|
return {
|
|
137
|
-
|
|
108
|
+
sortingFn: 'auto',
|
|
138
109
|
}
|
|
139
110
|
},
|
|
140
111
|
|
|
141
|
-
getDefaultOptions: <TGenerics extends
|
|
112
|
+
getDefaultOptions: <TGenerics extends TableGenerics>(
|
|
142
113
|
instance: TableInstance<TGenerics>
|
|
143
114
|
): SortingOptions<TGenerics> => {
|
|
144
115
|
return {
|
|
145
116
|
onSortingChange: makeStateUpdater('sorting', instance),
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return e.shiftKey
|
|
117
|
+
isMultiSortEvent: (e: unknown) => {
|
|
118
|
+
return (e as MouseEvent).shiftKey
|
|
149
119
|
},
|
|
150
120
|
}
|
|
151
121
|
},
|
|
152
122
|
|
|
153
|
-
createColumn: <TGenerics extends
|
|
123
|
+
createColumn: <TGenerics extends TableGenerics>(
|
|
154
124
|
column: Column<TGenerics>,
|
|
155
125
|
instance: TableInstance<TGenerics>
|
|
156
126
|
): SortingColumn<TGenerics> => {
|
|
157
127
|
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)
|
|
128
|
+
getAutoSortingFn: () => {
|
|
129
|
+
const firstRows = instance.getFilteredRowModel().flatRows.slice(10)
|
|
197
130
|
|
|
198
131
|
let isString = false
|
|
199
132
|
|
|
200
133
|
for (const row of firstRows) {
|
|
201
|
-
const value = row?.
|
|
134
|
+
const value = row?.getValue(column.id)
|
|
202
135
|
|
|
203
136
|
if (Object.prototype.toString.call(value) === '[object Date]') {
|
|
204
|
-
return
|
|
137
|
+
return sortingFns.datetime
|
|
205
138
|
}
|
|
206
139
|
|
|
207
140
|
if (typeof value === 'string') {
|
|
208
141
|
isString = true
|
|
209
142
|
|
|
210
143
|
if (value.split(reSplitAlphaNumeric).length > 1) {
|
|
211
|
-
return
|
|
144
|
+
return sortingFns.alphanumeric
|
|
212
145
|
}
|
|
213
146
|
}
|
|
214
147
|
}
|
|
215
148
|
|
|
216
149
|
if (isString) {
|
|
217
|
-
return
|
|
150
|
+
return sortingFns.text
|
|
218
151
|
}
|
|
219
152
|
|
|
220
|
-
return
|
|
153
|
+
return sortingFns.basic
|
|
221
154
|
},
|
|
222
|
-
|
|
223
|
-
const firstRow = instance.
|
|
155
|
+
getAutoSortDir: () => {
|
|
156
|
+
const firstRow = instance.getFilteredRowModel().flatRows[0]
|
|
224
157
|
|
|
225
|
-
const value = firstRow?.
|
|
158
|
+
const value = firstRow?.getValue(column.id)
|
|
226
159
|
|
|
227
160
|
if (typeof value === 'string') {
|
|
228
161
|
return 'asc'
|
|
@@ -230,39 +163,25 @@ export const Sorting = {
|
|
|
230
163
|
|
|
231
164
|
return 'desc'
|
|
232
165
|
},
|
|
233
|
-
|
|
234
|
-
const
|
|
235
|
-
const userSortTypes = instance.options.sortTypes
|
|
166
|
+
getSortingFn: () => {
|
|
167
|
+
const userSortingFn = instance.options.sortingFns
|
|
236
168
|
|
|
237
169
|
if (!column) {
|
|
238
170
|
throw new Error()
|
|
239
171
|
}
|
|
240
172
|
|
|
241
|
-
return isFunction(column.
|
|
242
|
-
? column.
|
|
243
|
-
: column.
|
|
244
|
-
?
|
|
245
|
-
: (
|
|
246
|
-
column.
|
|
173
|
+
return isFunction(column.columnDef.sortingFn)
|
|
174
|
+
? column.columnDef.sortingFn
|
|
175
|
+
: column.columnDef.sortingFn === 'auto'
|
|
176
|
+
? column.getAutoSortingFn()
|
|
177
|
+
: (userSortingFn as Record<string, any>)?.[
|
|
178
|
+
column.columnDef.sortingFn as string
|
|
247
179
|
] ??
|
|
248
|
-
(
|
|
249
|
-
column.
|
|
180
|
+
(sortingFns[
|
|
181
|
+
column.columnDef.sortingFn as BuiltInSortingFn
|
|
250
182
|
] as SortingFn<TGenerics>)
|
|
251
183
|
},
|
|
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
|
-
|
|
184
|
+
toggleSorting: (desc, multi) => {
|
|
266
185
|
// if (column.columns.length) {
|
|
267
186
|
// column.columns.forEach((c, i) => {
|
|
268
187
|
// if (c.id) {
|
|
@@ -274,8 +193,8 @@ export const Sorting = {
|
|
|
274
193
|
|
|
275
194
|
instance.setSorting(old => {
|
|
276
195
|
// Find any existing sorting for this column
|
|
277
|
-
const existingSorting = old?.find(d => d.id ===
|
|
278
|
-
const existingIndex = old?.findIndex(d => d.id ===
|
|
196
|
+
const existingSorting = old?.find(d => d.id === column.id)
|
|
197
|
+
const existingIndex = old?.findIndex(d => d.id === column.id)
|
|
279
198
|
const hasDescDefined = typeof desc !== 'undefined' && desc !== null
|
|
280
199
|
|
|
281
200
|
let newSorting: SortingState = []
|
|
@@ -301,9 +220,9 @@ export const Sorting = {
|
|
|
301
220
|
}
|
|
302
221
|
|
|
303
222
|
const sortDescFirst =
|
|
304
|
-
column.sortDescFirst ??
|
|
223
|
+
column.columnDef.sortDescFirst ??
|
|
305
224
|
instance.options.sortDescFirst ??
|
|
306
|
-
|
|
225
|
+
column.getAutoSortDir() === 'desc'
|
|
307
226
|
|
|
308
227
|
// Handle toggle states that will remove the sorting
|
|
309
228
|
if (
|
|
@@ -321,7 +240,7 @@ export const Sorting = {
|
|
|
321
240
|
if (sortAction === 'replace') {
|
|
322
241
|
newSorting = [
|
|
323
242
|
{
|
|
324
|
-
id:
|
|
243
|
+
id: column.id,
|
|
325
244
|
desc: hasDescDefined ? desc! : !!sortDescFirst,
|
|
326
245
|
},
|
|
327
246
|
]
|
|
@@ -329,7 +248,7 @@ export const Sorting = {
|
|
|
329
248
|
newSorting = [
|
|
330
249
|
...old,
|
|
331
250
|
{
|
|
332
|
-
id:
|
|
251
|
+
id: column.id,
|
|
333
252
|
desc: hasDescDefined ? desc! : !!sortDescFirst,
|
|
334
253
|
},
|
|
335
254
|
]
|
|
@@ -343,7 +262,7 @@ export const Sorting = {
|
|
|
343
262
|
} else if (sortAction === 'toggle' && old?.length) {
|
|
344
263
|
// This flips (or sets) the
|
|
345
264
|
newSorting = old.map(d => {
|
|
346
|
-
if (d.id ===
|
|
265
|
+
if (d.id === column.id) {
|
|
347
266
|
return {
|
|
348
267
|
...d,
|
|
349
268
|
desc: hasDescDefined ? desc! : !existingSorting?.desc,
|
|
@@ -352,109 +271,92 @@ export const Sorting = {
|
|
|
352
271
|
return d
|
|
353
272
|
})
|
|
354
273
|
} else if (sortAction === 'remove' && old?.length) {
|
|
355
|
-
newSorting = old.filter(d => d.id !==
|
|
274
|
+
newSorting = old.filter(d => d.id !== column.id)
|
|
356
275
|
}
|
|
357
276
|
|
|
358
277
|
return newSorting
|
|
359
278
|
})
|
|
360
279
|
},
|
|
361
280
|
|
|
362
|
-
|
|
363
|
-
const column = instance.getColumn(columnId)
|
|
364
|
-
|
|
365
|
-
if (!column) {
|
|
366
|
-
throw new Error()
|
|
367
|
-
}
|
|
368
|
-
|
|
281
|
+
getCanSort: () => {
|
|
369
282
|
return (
|
|
370
|
-
column.enableSorting ??
|
|
371
|
-
instance.options.enableSorting ??
|
|
372
|
-
column.defaultCanSort ??
|
|
283
|
+
(column.columnDef.enableSorting ?? true) &&
|
|
284
|
+
(instance.options.enableSorting ?? true) &&
|
|
373
285
|
!!column.accessorFn
|
|
374
|
-
// (!!column.accessorFn ||
|
|
375
|
-
// column.columns?.some(c => c.id && instance.getColumnCanSort(c.id))) ??
|
|
376
|
-
// false
|
|
377
286
|
)
|
|
378
287
|
},
|
|
379
288
|
|
|
380
|
-
|
|
381
|
-
const column = instance.getColumn(columnId)
|
|
382
|
-
|
|
383
|
-
if (!column) {
|
|
384
|
-
throw new Error()
|
|
385
|
-
}
|
|
386
|
-
|
|
289
|
+
getCanMultiSort: () => {
|
|
387
290
|
return (
|
|
388
|
-
column.enableMultiSort ??
|
|
291
|
+
column.columnDef.enableMultiSort ??
|
|
389
292
|
instance.options.enableMultiSort ??
|
|
390
293
|
!!column.accessorFn
|
|
391
294
|
)
|
|
392
295
|
},
|
|
393
296
|
|
|
394
|
-
|
|
297
|
+
getIsSorted: () => {
|
|
395
298
|
const columnSort = instance
|
|
396
299
|
.getState()
|
|
397
|
-
.sorting?.find(d => d.id ===
|
|
300
|
+
.sorting?.find(d => d.id === column.id)
|
|
398
301
|
|
|
399
302
|
return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'
|
|
400
303
|
},
|
|
401
304
|
|
|
402
|
-
|
|
403
|
-
instance.getState().sorting?.findIndex(d => d.id ===
|
|
305
|
+
getSortIndex: () =>
|
|
306
|
+
instance.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,
|
|
404
307
|
|
|
405
|
-
|
|
406
|
-
|
|
308
|
+
clearSorting: () => {
|
|
309
|
+
//clear sorting for just 1 column
|
|
310
|
+
instance.setSorting(old =>
|
|
311
|
+
old?.length ? old.filter(d => d.id !== column.id) : []
|
|
312
|
+
)
|
|
407
313
|
},
|
|
408
314
|
|
|
409
|
-
|
|
410
|
-
const column = instance.getColumn(columnId)
|
|
411
|
-
|
|
412
|
-
if (!column) {
|
|
413
|
-
throw new Error()
|
|
414
|
-
}
|
|
415
|
-
|
|
315
|
+
getToggleSortingHandler: () => {
|
|
416
316
|
const canSort = column.getCanSort()
|
|
417
317
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
: false
|
|
428
|
-
)
|
|
429
|
-
}
|
|
430
|
-
: undefined,
|
|
318
|
+
return (e: unknown) => {
|
|
319
|
+
if (!canSort) return
|
|
320
|
+
;(e as any).persist?.()
|
|
321
|
+
column.toggleSorting?.(
|
|
322
|
+
undefined,
|
|
323
|
+
column.getCanMultiSort()
|
|
324
|
+
? instance.options.isMultiSortEvent?.(e)
|
|
325
|
+
: false
|
|
326
|
+
)
|
|
431
327
|
}
|
|
432
|
-
|
|
433
|
-
return propGetter(initialProps, userProps)
|
|
434
328
|
},
|
|
329
|
+
}
|
|
330
|
+
},
|
|
435
331
|
|
|
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
|
-
}
|
|
332
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
333
|
+
instance: TableInstance<TGenerics>
|
|
334
|
+
): SortingInstance<TGenerics> => {
|
|
335
|
+
let registered = false
|
|
447
336
|
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
337
|
+
return {
|
|
338
|
+
setSorting: updater => instance.options.onSortingChange?.(updater),
|
|
339
|
+
resetSorting: defaultState => {
|
|
340
|
+
instance.setSorting(
|
|
341
|
+
defaultState ? [] : instance.initialState?.sorting ?? []
|
|
342
|
+
)
|
|
343
|
+
},
|
|
344
|
+
getPreSortedRowModel: () => instance.getFilteredRowModel(),
|
|
345
|
+
getSortedRowModel: () => {
|
|
346
|
+
if (
|
|
347
|
+
!instance._getSortedRowModel &&
|
|
348
|
+
instance.options.getSortedRowModel
|
|
349
|
+
) {
|
|
350
|
+
instance._getSortedRowModel =
|
|
351
|
+
instance.options.getSortedRowModel(instance)
|
|
456
352
|
}
|
|
457
|
-
|
|
353
|
+
|
|
354
|
+
if (instance.options.manualSorting || !instance._getSortedRowModel) {
|
|
355
|
+
return instance.getPreSortedRowModel()
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
return instance._getSortedRowModel()
|
|
359
|
+
},
|
|
458
360
|
}
|
|
459
361
|
},
|
|
460
362
|
}
|