@tanstack/table-core 8.0.0-alpha.65 → 8.0.0-alpha.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/core.js +0 -2
- package/build/cjs/core.js.map +1 -1
- package/build/cjs/features/Cells.js +1 -1
- package/build/cjs/features/Cells.js.map +1 -1
- package/build/cjs/features/ColumnSizing.js +65 -140
- package/build/cjs/features/ColumnSizing.js.map +1 -1
- package/build/cjs/features/Columns.js +5 -5
- package/build/cjs/features/Columns.js.map +1 -1
- package/build/cjs/features/Expanding.js +49 -87
- package/build/cjs/features/Expanding.js.map +1 -1
- package/build/cjs/features/Filters.js +89 -145
- package/build/cjs/features/Filters.js.map +1 -1
- package/build/cjs/features/Grouping.js +30 -58
- package/build/cjs/features/Grouping.js.map +1 -1
- package/build/cjs/features/Headers.js +16 -40
- package/build/cjs/features/Headers.js.map +1 -1
- package/build/cjs/features/Ordering.js +1 -1
- package/build/cjs/features/Ordering.js.map +1 -1
- package/build/cjs/features/Pagination.js +1 -1
- package/build/cjs/features/Pagination.js.map +1 -1
- package/build/cjs/features/Pinning.js +70 -95
- package/build/cjs/features/Pinning.js.map +1 -1
- package/build/cjs/features/RowSelection.js +60 -112
- package/build/cjs/features/RowSelection.js.map +1 -1
- package/build/cjs/features/Sorting.js +33 -83
- package/build/cjs/features/Sorting.js.map +1 -1
- package/build/cjs/features/Visibility.js +16 -39
- package/build/cjs/features/Visibility.js.map +1 -1
- package/build/cjs/utils/getCoreRowModelAsync.js +1 -1
- package/build/cjs/utils/getCoreRowModelAsync.js.map +1 -1
- package/build/cjs/utils/getCoreRowModelSync.js +1 -1
- package/build/cjs/utils/getCoreRowModelSync.js.map +1 -1
- package/build/cjs/utils/getExpandedRowModel.js +2 -2
- package/build/cjs/utils/getExpandedRowModel.js.map +1 -1
- package/build/cjs/utils/getFilteredRowModelSync.js +64 -69
- package/build/cjs/utils/getFilteredRowModelSync.js.map +1 -1
- package/build/cjs/utils/getGroupedRowModel.js +1 -1
- package/build/cjs/utils/getGroupedRowModel.js.map +1 -1
- package/build/cjs/utils/getPaginationRowModel.js +1 -1
- package/build/cjs/utils/getPaginationRowModel.js.map +1 -1
- package/build/cjs/utils/getSortedRowModelSync.js +3 -3
- package/build/cjs/utils/getSortedRowModelSync.js.map +1 -1
- package/build/esm/index.js +546 -924
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +354 -354
- package/build/types/features/ColumnSizing.d.ts +2 -13
- package/build/types/features/Expanding.d.ts +1 -6
- package/build/types/features/Filters.d.ts +12 -14
- package/build/types/features/Grouping.d.ts +0 -7
- package/build/types/features/Pinning.d.ts +0 -4
- package/build/types/features/RowSelection.d.ts +1 -7
- package/build/types/features/Sorting.d.ts +3 -14
- package/build/types/features/Visibility.d.ts +0 -4
- package/build/types/types.d.ts +0 -2
- package/build/umd/index.development.js +534 -912
- 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/core.ts +0 -2
- package/src/features/Cells.ts +1 -1
- package/src/features/ColumnSizing.ts +67 -125
- package/src/features/Columns.ts +6 -5
- package/src/features/Expanding.ts +58 -105
- package/src/features/Filters.ts +122 -172
- package/src/features/Grouping.ts +36 -60
- package/src/features/Headers.ts +18 -40
- package/src/features/Ordering.ts +1 -1
- package/src/features/Pagination.ts +1 -1
- package/src/features/Pinning.ts +66 -89
- package/src/features/RowSelection.ts +63 -115
- package/src/features/Sorting.ts +36 -94
- package/src/features/Visibility.ts +19 -49
- package/src/types.ts +0 -2
- package/src/utils/getCoreRowModelAsync.ts +1 -1
- package/src/utils/getCoreRowModelSync.ts +1 -1
- package/src/utils/getExpandedRowModel.ts +2 -2
- package/src/utils/getFilteredRowModelAsync.ts +118 -10
- package/src/utils/getFilteredRowModelSync.ts +95 -104
- package/src/utils/getGroupedRowModel.ts +1 -1
- package/src/utils/getPaginationRowModel.ts +1 -1
- package/src/utils/getSortedRowModelAsync.ts +1 -1
- package/src/utils/getSortedRowModelSync.ts +4 -4
package/src/features/Pinning.ts
CHANGED
|
@@ -50,10 +50,6 @@ export type ColumnPinningRow<TGenerics extends TableGenerics> = {
|
|
|
50
50
|
export type ColumnPinningInstance<TGenerics extends TableGenerics> = {
|
|
51
51
|
setColumnPinning: (updater: Updater<ColumnPinningState>) => void
|
|
52
52
|
resetColumnPinning: () => void
|
|
53
|
-
pinColumn: (columnId: string, position: ColumnPinningPosition) => void
|
|
54
|
-
getColumnCanPin: (columnId: string) => boolean
|
|
55
|
-
getColumnIsPinned: (columnId: string) => ColumnPinningPosition
|
|
56
|
-
getColumnPinnedIndex: (columnId: string) => number
|
|
57
53
|
getIsSomeColumnsPinned: () => boolean
|
|
58
54
|
getLeftLeafColumns: () => Column<TGenerics>[]
|
|
59
55
|
getRightLeafColumns: () => Column<TGenerics>[]
|
|
@@ -86,10 +82,69 @@ export const Pinning: TableFeature = {
|
|
|
86
82
|
instance: TableInstance<TGenerics>
|
|
87
83
|
): ColumnPinningColumn => {
|
|
88
84
|
return {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
85
|
+
pin: position => {
|
|
86
|
+
const columnIds = column
|
|
87
|
+
.getLeafColumns()
|
|
88
|
+
.map(d => d.id)
|
|
89
|
+
.filter(Boolean) as string[]
|
|
90
|
+
|
|
91
|
+
instance.setColumnPinning(old => {
|
|
92
|
+
if (position === 'right') {
|
|
93
|
+
return {
|
|
94
|
+
left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
|
|
95
|
+
right: [
|
|
96
|
+
...(old?.right ?? []).filter(d => !columnIds?.includes(d)),
|
|
97
|
+
...columnIds,
|
|
98
|
+
],
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (position === 'left') {
|
|
103
|
+
return {
|
|
104
|
+
left: [
|
|
105
|
+
...(old?.left ?? []).filter(d => !columnIds?.includes(d)),
|
|
106
|
+
...columnIds,
|
|
107
|
+
],
|
|
108
|
+
right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
|
|
114
|
+
right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
|
|
115
|
+
}
|
|
116
|
+
})
|
|
117
|
+
},
|
|
118
|
+
|
|
119
|
+
getCanPin: () => {
|
|
120
|
+
const leafColumns = column.getLeafColumns()
|
|
121
|
+
|
|
122
|
+
return leafColumns.some(
|
|
123
|
+
d =>
|
|
124
|
+
(d.enablePinning ?? true) &&
|
|
125
|
+
(instance.options.enablePinning ?? true)
|
|
126
|
+
)
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
getIsPinned: () => {
|
|
130
|
+
const leafColumnIds = column.getLeafColumns().map(d => d.id)
|
|
131
|
+
|
|
132
|
+
const { left, right } = instance.getState().columnPinning
|
|
133
|
+
|
|
134
|
+
const isLeft = leafColumnIds.some(d => left?.includes(d))
|
|
135
|
+
const isRight = leafColumnIds.some(d => right?.includes(d))
|
|
136
|
+
|
|
137
|
+
return isLeft ? 'left' : isRight ? 'right' : false
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
getPinnedIndex: () => {
|
|
141
|
+
const position = column.getIsPinned()
|
|
142
|
+
|
|
143
|
+
return position
|
|
144
|
+
? instance.getState().columnPinning?.[position]?.indexOf(column.id) ??
|
|
145
|
+
-1
|
|
146
|
+
: 0
|
|
147
|
+
},
|
|
93
148
|
}
|
|
94
149
|
},
|
|
95
150
|
|
|
@@ -168,84 +223,6 @@ export const Pinning: TableFeature = {
|
|
|
168
223
|
resetColumnPinning: () =>
|
|
169
224
|
instance.setColumnPinning(instance.initialState?.columnPinning ?? {}),
|
|
170
225
|
|
|
171
|
-
pinColumn: (columnId, position) => {
|
|
172
|
-
const column = instance.getColumn(columnId)
|
|
173
|
-
|
|
174
|
-
const columnIds = column
|
|
175
|
-
?.getLeafColumns()
|
|
176
|
-
.map(d => d.id)
|
|
177
|
-
.filter(Boolean) as string[]
|
|
178
|
-
|
|
179
|
-
instance.setColumnPinning(old => {
|
|
180
|
-
if (position === 'right') {
|
|
181
|
-
return {
|
|
182
|
-
left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
|
|
183
|
-
right: [
|
|
184
|
-
...(old?.right ?? []).filter(d => !columnIds?.includes(d)),
|
|
185
|
-
...columnIds,
|
|
186
|
-
],
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
if (position === 'left') {
|
|
191
|
-
return {
|
|
192
|
-
left: [
|
|
193
|
-
...(old?.left ?? []).filter(d => !columnIds?.includes(d)),
|
|
194
|
-
...columnIds,
|
|
195
|
-
],
|
|
196
|
-
right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
return {
|
|
201
|
-
left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
|
|
202
|
-
right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
|
|
203
|
-
}
|
|
204
|
-
})
|
|
205
|
-
},
|
|
206
|
-
|
|
207
|
-
getColumnCanPin: columnId => {
|
|
208
|
-
const column = instance.getColumn(columnId)
|
|
209
|
-
|
|
210
|
-
if (!column) {
|
|
211
|
-
throw new Error()
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
const leafColumns = column.getLeafColumns()
|
|
215
|
-
|
|
216
|
-
return leafColumns.some(
|
|
217
|
-
d =>
|
|
218
|
-
(d.enablePinning ?? true) &&
|
|
219
|
-
(instance.options.enablePinning ?? true)
|
|
220
|
-
)
|
|
221
|
-
},
|
|
222
|
-
|
|
223
|
-
getColumnIsPinned: columnId => {
|
|
224
|
-
const column = instance.getColumn(columnId)
|
|
225
|
-
|
|
226
|
-
if (!column) {
|
|
227
|
-
throw new Error()
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
const leafColumnIds = column.getLeafColumns().map(d => d.id)
|
|
231
|
-
|
|
232
|
-
const { left, right } = instance.getState().columnPinning
|
|
233
|
-
|
|
234
|
-
const isLeft = leafColumnIds.some(d => left?.includes(d))
|
|
235
|
-
const isRight = leafColumnIds.some(d => right?.includes(d))
|
|
236
|
-
|
|
237
|
-
return isLeft ? 'left' : isRight ? 'right' : false
|
|
238
|
-
},
|
|
239
|
-
|
|
240
|
-
getColumnPinnedIndex: columnId => {
|
|
241
|
-
const position = instance.getColumnIsPinned(columnId)
|
|
242
|
-
|
|
243
|
-
return position
|
|
244
|
-
? instance.getState().columnPinning?.[position]?.indexOf(columnId) ??
|
|
245
|
-
-1
|
|
246
|
-
: 0
|
|
247
|
-
},
|
|
248
|
-
|
|
249
226
|
getIsSomeColumnsPinned: () => {
|
|
250
227
|
const { left, right } = instance.getState().columnPinning
|
|
251
228
|
|
|
@@ -263,7 +240,7 @@ export const Pinning: TableFeature = {
|
|
|
263
240
|
.filter(Boolean)
|
|
264
241
|
},
|
|
265
242
|
{
|
|
266
|
-
key: process.env.NODE_ENV === '
|
|
243
|
+
key: process.env.NODE_ENV === 'development' && 'getLeftLeafColumns',
|
|
267
244
|
debug: () =>
|
|
268
245
|
instance.options.debugAll ?? instance.options.debugColumns,
|
|
269
246
|
}
|
|
@@ -280,7 +257,7 @@ export const Pinning: TableFeature = {
|
|
|
280
257
|
.filter(Boolean)
|
|
281
258
|
},
|
|
282
259
|
{
|
|
283
|
-
key: process.env.NODE_ENV === '
|
|
260
|
+
key: process.env.NODE_ENV === 'development' && 'getRightLeafColumns',
|
|
284
261
|
debug: () =>
|
|
285
262
|
instance.options.debugAll ?? instance.options.debugColumns,
|
|
286
263
|
}
|
|
@@ -298,7 +275,7 @@ export const Pinning: TableFeature = {
|
|
|
298
275
|
return allColumns.filter(d => !leftAndRight.includes(d.id))
|
|
299
276
|
},
|
|
300
277
|
{
|
|
301
|
-
key: process.env.NODE_ENV === '
|
|
278
|
+
key: process.env.NODE_ENV === 'development' && 'getCenterLeafColumns',
|
|
302
279
|
debug: () =>
|
|
303
280
|
instance.options.debugAll ?? instance.options.debugColumns,
|
|
304
281
|
}
|
|
@@ -44,25 +44,16 @@ export type RowSelectionRow = {
|
|
|
44
44
|
getIsSomeSelected: () => boolean
|
|
45
45
|
getCanSelect: () => boolean
|
|
46
46
|
getCanMultiSelect: () => boolean
|
|
47
|
+
getCanSelectSubRows: () => boolean
|
|
47
48
|
toggleSelected: (value?: boolean) => void
|
|
48
49
|
getToggleSelectedHandler: () => (event: unknown) => void
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
export type RowSelectionInstance<TGenerics extends TableGenerics> = {
|
|
52
|
-
getToggleRowSelectedHandler: (
|
|
53
|
-
rowId: string
|
|
54
|
-
) => undefined | ((e: unknown) => void)
|
|
55
53
|
getToggleAllRowsSelectedHandler: () => (event: unknown) => void
|
|
56
54
|
getToggleAllPageRowsSelectedHandler: () => (event: unknown) => void
|
|
57
55
|
setRowSelection: (updater: Updater<RowSelectionState>) => void
|
|
58
56
|
resetRowSelection: () => void
|
|
59
|
-
toggleRowSelected: (rowId: string, value?: boolean) => void
|
|
60
|
-
getRowCanSelect: (rowId: string) => boolean
|
|
61
|
-
getRowCanSelectSubRows: (rowId: string) => boolean
|
|
62
|
-
getRowCanMultiSelect: (rowId: string) => boolean
|
|
63
|
-
// getGroupingRowCanSelect: (rowId: string) => boolean
|
|
64
|
-
getRowIsSelected: (rowId: string) => boolean
|
|
65
|
-
getRowIsSomeSelected: (rowId: string) => boolean
|
|
66
57
|
getIsAllRowsSelected: () => boolean
|
|
67
58
|
getIsAllPageRowsSelected: () => boolean
|
|
68
59
|
getIsSomeRowsSelected: () => boolean
|
|
@@ -148,24 +139,7 @@ export const RowSelection: TableFeature = {
|
|
|
148
139
|
|
|
149
140
|
return rowSelection
|
|
150
141
|
}),
|
|
151
|
-
toggleRowSelected: (rowId, value) => {
|
|
152
|
-
const row = instance.getRow(rowId)
|
|
153
|
-
const isSelected = row.getIsSelected()
|
|
154
|
-
|
|
155
|
-
instance.setRowSelection(old => {
|
|
156
|
-
value = typeof value !== 'undefined' ? value : !isSelected
|
|
157
|
-
|
|
158
|
-
if (isSelected === value) {
|
|
159
|
-
return old
|
|
160
|
-
}
|
|
161
142
|
|
|
162
|
-
const selectedRowIds = { ...old }
|
|
163
|
-
|
|
164
|
-
mutateRowIsSelected(selectedRowIds, rowId, value, instance)
|
|
165
|
-
|
|
166
|
-
return selectedRowIds
|
|
167
|
-
})
|
|
168
|
-
},
|
|
169
143
|
// addRowSelectionRange: rowId => {
|
|
170
144
|
// const {
|
|
171
145
|
// rows,
|
|
@@ -239,7 +213,7 @@ export const RowSelection: TableFeature = {
|
|
|
239
213
|
return selectRowsFn(instance, rowModel)
|
|
240
214
|
},
|
|
241
215
|
{
|
|
242
|
-
key: process.env.NODE_ENV === '
|
|
216
|
+
key: process.env.NODE_ENV === 'development' && 'getSelectedRowModel',
|
|
243
217
|
debug: () => instance.options.debugAll ?? instance.options.debugTable,
|
|
244
218
|
}
|
|
245
219
|
),
|
|
@@ -291,70 +265,6 @@ export const RowSelection: TableFeature = {
|
|
|
291
265
|
|
|
292
266
|
///
|
|
293
267
|
|
|
294
|
-
getRowIsSelected: rowId => {
|
|
295
|
-
const { rowSelection } = instance.getState()
|
|
296
|
-
const row = instance.getRow(rowId)
|
|
297
|
-
|
|
298
|
-
if (!row) {
|
|
299
|
-
throw new Error()
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
return isRowSelected(row, rowSelection, instance) === true
|
|
303
|
-
},
|
|
304
|
-
|
|
305
|
-
getRowIsSomeSelected: rowId => {
|
|
306
|
-
const { rowSelection } = instance.getState()
|
|
307
|
-
const row = instance.getRow(rowId)
|
|
308
|
-
|
|
309
|
-
if (!row) {
|
|
310
|
-
throw new Error()
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
return isRowSelected(row, rowSelection, instance) === 'some'
|
|
314
|
-
},
|
|
315
|
-
|
|
316
|
-
getRowCanSelect: rowId => {
|
|
317
|
-
const row = instance.getRow(rowId)
|
|
318
|
-
|
|
319
|
-
if (!row) {
|
|
320
|
-
throw new Error()
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
if (typeof instance.options.enableRowSelection === 'function') {
|
|
324
|
-
return instance.options.enableRowSelection(row)
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
return instance.options.enableRowSelection ?? true
|
|
328
|
-
},
|
|
329
|
-
|
|
330
|
-
getRowCanSelectSubRows: rowId => {
|
|
331
|
-
const row = instance.getRow(rowId)
|
|
332
|
-
|
|
333
|
-
if (!row) {
|
|
334
|
-
throw new Error()
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
if (typeof instance.options.enableSubRowSelection === 'function') {
|
|
338
|
-
return instance.options.enableSubRowSelection(row)
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
return instance.options.enableSubRowSelection ?? true
|
|
342
|
-
},
|
|
343
|
-
|
|
344
|
-
getRowCanMultiSelect: rowId => {
|
|
345
|
-
const row = instance.getRow(rowId)
|
|
346
|
-
|
|
347
|
-
if (!row) {
|
|
348
|
-
throw new Error()
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
if (typeof instance.options.enableMultiRowSelection === 'function') {
|
|
352
|
-
return instance.options.enableMultiRowSelection(row)
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
return instance.options.enableMultiRowSelection ?? true
|
|
356
|
-
},
|
|
357
|
-
|
|
358
268
|
// getGroupingRowCanSelect: rowId => {
|
|
359
269
|
// const row = instance.getRow(rowId)
|
|
360
270
|
|
|
@@ -416,21 +326,6 @@ export const RowSelection: TableFeature = {
|
|
|
416
326
|
: !!paginationFlatRows?.length
|
|
417
327
|
},
|
|
418
328
|
|
|
419
|
-
getToggleRowSelectedHandler: rowId => {
|
|
420
|
-
const row = instance.getRow(rowId)
|
|
421
|
-
|
|
422
|
-
const isSelected = row.getIsSelected()
|
|
423
|
-
const isSomeSelected = row.getIsSomeSelected()
|
|
424
|
-
const canSelect = row.getCanSelect()
|
|
425
|
-
|
|
426
|
-
return (e: unknown) => {
|
|
427
|
-
if (!canSelect) return
|
|
428
|
-
row.toggleSelected(
|
|
429
|
-
((e as MouseEvent).target as HTMLInputElement)?.checked
|
|
430
|
-
)
|
|
431
|
-
}
|
|
432
|
-
},
|
|
433
|
-
|
|
434
329
|
getToggleAllRowsSelectedHandler: () => {
|
|
435
330
|
return (e: unknown) => {
|
|
436
331
|
instance.toggleAllRowsSelected(
|
|
@@ -454,13 +349,66 @@ export const RowSelection: TableFeature = {
|
|
|
454
349
|
instance: TableInstance<TGenerics>
|
|
455
350
|
): RowSelectionRow => {
|
|
456
351
|
return {
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
352
|
+
toggleSelected: value => {
|
|
353
|
+
const isSelected = row.getIsSelected()
|
|
354
|
+
|
|
355
|
+
instance.setRowSelection(old => {
|
|
356
|
+
value = typeof value !== 'undefined' ? value : !isSelected
|
|
357
|
+
|
|
358
|
+
if (isSelected === value) {
|
|
359
|
+
return old
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
const selectedRowIds = { ...old }
|
|
363
|
+
|
|
364
|
+
mutateRowIsSelected(selectedRowIds, row.id, value, instance)
|
|
365
|
+
|
|
366
|
+
return selectedRowIds
|
|
367
|
+
})
|
|
368
|
+
},
|
|
369
|
+
getIsSelected: () => {
|
|
370
|
+
const { rowSelection } = instance.getState()
|
|
371
|
+
return isRowSelected(row, rowSelection, instance) === true
|
|
372
|
+
},
|
|
373
|
+
|
|
374
|
+
getIsSomeSelected: () => {
|
|
375
|
+
const { rowSelection } = instance.getState()
|
|
376
|
+
return isRowSelected(row, rowSelection, instance) === 'some'
|
|
377
|
+
},
|
|
378
|
+
|
|
379
|
+
getCanSelect: () => {
|
|
380
|
+
if (typeof instance.options.enableRowSelection === 'function') {
|
|
381
|
+
return instance.options.enableRowSelection(row)
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
return instance.options.enableRowSelection ?? true
|
|
385
|
+
},
|
|
386
|
+
|
|
387
|
+
getCanSelectSubRows: () => {
|
|
388
|
+
if (typeof instance.options.enableSubRowSelection === 'function') {
|
|
389
|
+
return instance.options.enableSubRowSelection(row)
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
return instance.options.enableSubRowSelection ?? true
|
|
393
|
+
},
|
|
394
|
+
|
|
395
|
+
getCanMultiSelect: () => {
|
|
396
|
+
if (typeof instance.options.enableMultiRowSelection === 'function') {
|
|
397
|
+
return instance.options.enableMultiRowSelection(row)
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
return instance.options.enableMultiRowSelection ?? true
|
|
401
|
+
},
|
|
402
|
+
getToggleSelectedHandler: () => {
|
|
403
|
+
const canSelect = row.getCanSelect()
|
|
404
|
+
|
|
405
|
+
return (e: unknown) => {
|
|
406
|
+
if (!canSelect) return
|
|
407
|
+
row.toggleSelected(
|
|
408
|
+
((e as MouseEvent).target as HTMLInputElement)?.checked
|
|
409
|
+
)
|
|
410
|
+
}
|
|
411
|
+
},
|
|
464
412
|
}
|
|
465
413
|
},
|
|
466
414
|
}
|
|
@@ -486,7 +434,7 @@ const mutateRowIsSelected = <TGenerics extends TableGenerics>(
|
|
|
486
434
|
}
|
|
487
435
|
// }
|
|
488
436
|
|
|
489
|
-
if (row.subRows?.length &&
|
|
437
|
+
if (row.subRows?.length && row.getCanSelectSubRows()) {
|
|
490
438
|
row.subRows.forEach(row =>
|
|
491
439
|
mutateRowIsSelected(selectedRowIds, row.id, value, instance)
|
|
492
440
|
)
|
package/src/features/Sorting.ts
CHANGED
|
@@ -50,13 +50,14 @@ export type SortingColumnDef<TGenerics extends TableGenerics> = {
|
|
|
50
50
|
sortDescFirst?: boolean
|
|
51
51
|
enableSorting?: boolean
|
|
52
52
|
enableMultiSort?: boolean
|
|
53
|
-
defaultCanSort?: boolean
|
|
54
53
|
invertSorting?: boolean
|
|
55
54
|
sortUndefined?: false | -1 | 1
|
|
56
55
|
}
|
|
57
56
|
|
|
58
57
|
export type SortingColumn<TGenerics extends TableGenerics> = {
|
|
59
|
-
|
|
58
|
+
getAutoSortingFn: () => SortingFn<TGenerics>
|
|
59
|
+
getAutoSortDir: () => SortDirection
|
|
60
|
+
getSortingFn: () => SortingFn<TGenerics>
|
|
60
61
|
getCanSort: () => boolean
|
|
61
62
|
getCanMultiSort: () => boolean
|
|
62
63
|
getSortIndex: () => number
|
|
@@ -83,25 +84,7 @@ export type SortingOptions<TGenerics extends TableGenerics> = {
|
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
export type SortingInstance<TGenerics extends TableGenerics> = {
|
|
86
|
-
getColumnAutoSortingFn: (columnId: string) => SortingFn<TGenerics> | undefined
|
|
87
|
-
getColumnAutoSortDir: (columnId: string) => SortDirection
|
|
88
|
-
|
|
89
|
-
getColumnSortingFn: (columnId: string) => SortingFn<TGenerics> | undefined
|
|
90
|
-
|
|
91
87
|
setSorting: (updater: Updater<SortingState>) => void
|
|
92
|
-
toggleColumnSorting: (
|
|
93
|
-
columnId: string,
|
|
94
|
-
desc?: boolean,
|
|
95
|
-
multi?: boolean
|
|
96
|
-
) => void
|
|
97
|
-
resetSorting: (columnId?: string) => void
|
|
98
|
-
getColumnCanSort: (columnId: string) => boolean
|
|
99
|
-
getColumnCanMultiSort: (columnId: string) => boolean
|
|
100
|
-
getColumnIsSorted: (columnId: string) => false | 'asc' | 'desc'
|
|
101
|
-
getColumnSortIndex: (columnId: string) => number
|
|
102
|
-
getToggleSortingHandler: (
|
|
103
|
-
columnId: string
|
|
104
|
-
) => undefined | ((event: unknown) => void)
|
|
105
88
|
getPreSortedRowModel: () => RowModel<TGenerics>
|
|
106
89
|
getSortedRowModel: () => RowModel<TGenerics>
|
|
107
90
|
_getSortedRowModel?: () => RowModel<TGenerics>
|
|
@@ -141,32 +124,13 @@ export const Sorting: TableFeature = {
|
|
|
141
124
|
instance: TableInstance<TGenerics>
|
|
142
125
|
): SortingColumn<TGenerics> => {
|
|
143
126
|
return {
|
|
144
|
-
|
|
145
|
-
getCanSort: () => instance.getColumnCanSort(column.id),
|
|
146
|
-
getCanMultiSort: () => instance.getColumnCanMultiSort(column.id),
|
|
147
|
-
getSortIndex: () => instance.getColumnSortIndex(column.id),
|
|
148
|
-
getIsSorted: () => instance.getColumnIsSorted(column.id),
|
|
149
|
-
resetSorting: () => instance.resetSorting(column.id),
|
|
150
|
-
toggleSorting: (desc, isMulti) =>
|
|
151
|
-
instance.toggleColumnSorting(column.id, desc, isMulti),
|
|
152
|
-
getToggleSortingHandler: () =>
|
|
153
|
-
instance.getToggleSortingHandler(column.id)!,
|
|
154
|
-
}
|
|
155
|
-
},
|
|
156
|
-
|
|
157
|
-
createInstance: <TGenerics extends TableGenerics>(
|
|
158
|
-
instance: TableInstance<TGenerics>
|
|
159
|
-
): SortingInstance<TGenerics> => {
|
|
160
|
-
let registered = false
|
|
161
|
-
|
|
162
|
-
return {
|
|
163
|
-
getColumnAutoSortingFn: columnId => {
|
|
127
|
+
getAutoSortingFn: () => {
|
|
164
128
|
const firstRows = instance.getFilteredRowModel().flatRows.slice(100)
|
|
165
129
|
|
|
166
130
|
let isString = false
|
|
167
131
|
|
|
168
132
|
for (const row of firstRows) {
|
|
169
|
-
const value = row?.values[
|
|
133
|
+
const value = row?.values[column.id]
|
|
170
134
|
|
|
171
135
|
if (Object.prototype.toString.call(value) === '[object Date]') {
|
|
172
136
|
return sortingFns.datetime
|
|
@@ -187,10 +151,10 @@ export const Sorting: TableFeature = {
|
|
|
187
151
|
|
|
188
152
|
return sortingFns.basic
|
|
189
153
|
},
|
|
190
|
-
|
|
154
|
+
getAutoSortDir: () => {
|
|
191
155
|
const firstRow = instance.getFilteredRowModel().flatRows[0]
|
|
192
156
|
|
|
193
|
-
const value = firstRow?.values[
|
|
157
|
+
const value = firstRow?.values[column.id]
|
|
194
158
|
|
|
195
159
|
if (typeof value === 'string') {
|
|
196
160
|
return 'asc'
|
|
@@ -198,8 +162,7 @@ export const Sorting: TableFeature = {
|
|
|
198
162
|
|
|
199
163
|
return 'desc'
|
|
200
164
|
},
|
|
201
|
-
|
|
202
|
-
const column = instance.getColumn(columnId)
|
|
165
|
+
getSortingFn: () => {
|
|
203
166
|
const userSortingFn = instance.options.sortingFns
|
|
204
167
|
|
|
205
168
|
if (!column) {
|
|
@@ -209,7 +172,7 @@ export const Sorting: TableFeature = {
|
|
|
209
172
|
return isFunction(column.sortingFn)
|
|
210
173
|
? column.sortingFn
|
|
211
174
|
: column.sortingFn === 'auto'
|
|
212
|
-
?
|
|
175
|
+
? column.getAutoSortingFn()
|
|
213
176
|
: (userSortingFn as Record<string, any>)?.[
|
|
214
177
|
column.sortingFn as string
|
|
215
178
|
] ??
|
|
@@ -217,16 +180,7 @@ export const Sorting: TableFeature = {
|
|
|
217
180
|
column.sortingFn as BuiltInSortingFn
|
|
218
181
|
] as SortingFn<TGenerics>)
|
|
219
182
|
},
|
|
220
|
-
|
|
221
|
-
setSorting: updater => instance.options.onSortingChange?.(updater),
|
|
222
|
-
|
|
223
|
-
toggleColumnSorting: (columnId, desc, multi) => {
|
|
224
|
-
const column = instance.getColumn(columnId)
|
|
225
|
-
|
|
226
|
-
if (!column) {
|
|
227
|
-
throw new Error()
|
|
228
|
-
}
|
|
229
|
-
|
|
183
|
+
toggleSorting: (desc, multi) => {
|
|
230
184
|
// if (column.columns.length) {
|
|
231
185
|
// column.columns.forEach((c, i) => {
|
|
232
186
|
// if (c.id) {
|
|
@@ -238,8 +192,8 @@ export const Sorting: TableFeature = {
|
|
|
238
192
|
|
|
239
193
|
instance.setSorting(old => {
|
|
240
194
|
// Find any existing sorting for this column
|
|
241
|
-
const existingSorting = old?.find(d => d.id ===
|
|
242
|
-
const existingIndex = old?.findIndex(d => d.id ===
|
|
195
|
+
const existingSorting = old?.find(d => d.id === column.id)
|
|
196
|
+
const existingIndex = old?.findIndex(d => d.id === column.id)
|
|
243
197
|
const hasDescDefined = typeof desc !== 'undefined' && desc !== null
|
|
244
198
|
|
|
245
199
|
let newSorting: SortingState = []
|
|
@@ -267,7 +221,7 @@ export const Sorting: TableFeature = {
|
|
|
267
221
|
const sortDescFirst =
|
|
268
222
|
column.sortDescFirst ??
|
|
269
223
|
instance.options.sortDescFirst ??
|
|
270
|
-
|
|
224
|
+
column.getAutoSortDir() === 'desc'
|
|
271
225
|
|
|
272
226
|
// Handle toggle states that will remove the sorting
|
|
273
227
|
if (
|
|
@@ -285,7 +239,7 @@ export const Sorting: TableFeature = {
|
|
|
285
239
|
if (sortAction === 'replace') {
|
|
286
240
|
newSorting = [
|
|
287
241
|
{
|
|
288
|
-
id:
|
|
242
|
+
id: column.id,
|
|
289
243
|
desc: hasDescDefined ? desc! : !!sortDescFirst,
|
|
290
244
|
},
|
|
291
245
|
]
|
|
@@ -293,7 +247,7 @@ export const Sorting: TableFeature = {
|
|
|
293
247
|
newSorting = [
|
|
294
248
|
...old,
|
|
295
249
|
{
|
|
296
|
-
id:
|
|
250
|
+
id: column.id,
|
|
297
251
|
desc: hasDescDefined ? desc! : !!sortDescFirst,
|
|
298
252
|
},
|
|
299
253
|
]
|
|
@@ -307,7 +261,7 @@ export const Sorting: TableFeature = {
|
|
|
307
261
|
} else if (sortAction === 'toggle' && old?.length) {
|
|
308
262
|
// This flips (or sets) the
|
|
309
263
|
newSorting = old.map(d => {
|
|
310
|
-
if (d.id ===
|
|
264
|
+
if (d.id === column.id) {
|
|
311
265
|
return {
|
|
312
266
|
...d,
|
|
313
267
|
desc: hasDescDefined ? desc! : !existingSorting?.desc,
|
|
@@ -316,38 +270,22 @@ export const Sorting: TableFeature = {
|
|
|
316
270
|
return d
|
|
317
271
|
})
|
|
318
272
|
} else if (sortAction === 'remove' && old?.length) {
|
|
319
|
-
newSorting = old.filter(d => d.id !==
|
|
273
|
+
newSorting = old.filter(d => d.id !== column.id)
|
|
320
274
|
}
|
|
321
275
|
|
|
322
276
|
return newSorting
|
|
323
277
|
})
|
|
324
278
|
},
|
|
325
279
|
|
|
326
|
-
|
|
327
|
-
const column = instance.getColumn(columnId)
|
|
328
|
-
|
|
329
|
-
if (!column) {
|
|
330
|
-
throw new Error()
|
|
331
|
-
}
|
|
332
|
-
|
|
280
|
+
getCanSort: () => {
|
|
333
281
|
return (
|
|
334
|
-
column.enableSorting ??
|
|
335
|
-
instance.options.enableSorting ??
|
|
336
|
-
column.defaultCanSort ??
|
|
282
|
+
(column.enableSorting ?? true) &&
|
|
283
|
+
(instance.options.enableSorting ?? true) &&
|
|
337
284
|
!!column.accessorFn
|
|
338
|
-
// (!!column.accessorFn ||
|
|
339
|
-
// column.columns?.some(c => c.id && instance.getColumnCanSort(c.id))) ??
|
|
340
|
-
// false
|
|
341
285
|
)
|
|
342
286
|
},
|
|
343
287
|
|
|
344
|
-
|
|
345
|
-
const column = instance.getColumn(columnId)
|
|
346
|
-
|
|
347
|
-
if (!column) {
|
|
348
|
-
throw new Error()
|
|
349
|
-
}
|
|
350
|
-
|
|
288
|
+
getCanMultiSort: () => {
|
|
351
289
|
return (
|
|
352
290
|
column.enableMultiSort ??
|
|
353
291
|
instance.options.enableMultiSort ??
|
|
@@ -355,16 +293,16 @@ export const Sorting: TableFeature = {
|
|
|
355
293
|
)
|
|
356
294
|
},
|
|
357
295
|
|
|
358
|
-
|
|
296
|
+
getIsSorted: () => {
|
|
359
297
|
const columnSort = instance
|
|
360
298
|
.getState()
|
|
361
|
-
.sorting?.find(d => d.id ===
|
|
299
|
+
.sorting?.find(d => d.id === column.id)
|
|
362
300
|
|
|
363
301
|
return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'
|
|
364
302
|
},
|
|
365
303
|
|
|
366
|
-
|
|
367
|
-
instance.getState().sorting?.findIndex(d => d.id ===
|
|
304
|
+
getSortIndex: () =>
|
|
305
|
+
instance.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,
|
|
368
306
|
|
|
369
307
|
resetSorting: (columnId?: string) => {
|
|
370
308
|
if (columnId) {
|
|
@@ -376,13 +314,7 @@ export const Sorting: TableFeature = {
|
|
|
376
314
|
}
|
|
377
315
|
},
|
|
378
316
|
|
|
379
|
-
getToggleSortingHandler:
|
|
380
|
-
const column = instance.getColumn(columnId)
|
|
381
|
-
|
|
382
|
-
if (!column) {
|
|
383
|
-
throw new Error()
|
|
384
|
-
}
|
|
385
|
-
|
|
317
|
+
getToggleSortingHandler: () => {
|
|
386
318
|
const canSort = column.getCanSort()
|
|
387
319
|
|
|
388
320
|
return (e: unknown) => {
|
|
@@ -396,6 +328,16 @@ export const Sorting: TableFeature = {
|
|
|
396
328
|
)
|
|
397
329
|
}
|
|
398
330
|
},
|
|
331
|
+
}
|
|
332
|
+
},
|
|
333
|
+
|
|
334
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
335
|
+
instance: TableInstance<TGenerics>
|
|
336
|
+
): SortingInstance<TGenerics> => {
|
|
337
|
+
let registered = false
|
|
338
|
+
|
|
339
|
+
return {
|
|
340
|
+
setSorting: updater => instance.options.onSortingChange?.(updater),
|
|
399
341
|
|
|
400
342
|
getPreSortedRowModel: () => instance.getFilteredRowModel(),
|
|
401
343
|
getSortedRowModel: () => {
|