@tanstack/table-core 8.0.0-alpha.55 → 8.0.0-alpha.59
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 +18 -404
- package/build/cjs/core.js.map +1 -1
- package/build/cjs/createTable.js +3 -3
- package/build/cjs/createTable.js.map +1 -1
- package/build/cjs/features/Cells.js +107 -0
- package/build/cjs/features/Cells.js.map +1 -0
- package/build/cjs/features/ColumnSizing.js +96 -54
- package/build/cjs/features/ColumnSizing.js.map +1 -1
- package/build/cjs/features/Columns.js +216 -0
- package/build/cjs/features/Columns.js.map +1 -0
- package/build/cjs/features/Expanding.js +13 -21
- package/build/cjs/features/Expanding.js.map +1 -1
- package/build/cjs/features/Filters.js +3 -3
- package/build/cjs/features/Filters.js.map +1 -1
- package/build/cjs/features/Grouping.js +8 -11
- package/build/cjs/features/Grouping.js.map +1 -1
- package/build/cjs/features/Headers.js +79 -220
- 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 +5 -5
- package/build/cjs/features/Pagination.js.map +1 -1
- package/build/cjs/features/Pinning.js +172 -2
- package/build/cjs/features/Pinning.js.map +1 -1
- package/build/cjs/features/RowSelection.js +16 -48
- package/build/cjs/features/RowSelection.js.map +1 -1
- package/build/cjs/features/Rows.js +84 -0
- package/build/cjs/features/Rows.js.map +1 -0
- package/build/cjs/features/Sorting.js +9 -12
- package/build/cjs/features/Sorting.js.map +1 -1
- package/build/cjs/features/Visibility.js +59 -38
- package/build/cjs/features/Visibility.js.map +1 -1
- package/build/cjs/filterFns.js +16 -0
- package/build/cjs/filterFns.js.map +1 -1
- package/build/cjs/index.js +0 -1
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/utils.js +0 -16
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +866 -856
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +424 -322
- package/build/types/core.d.ts +9 -88
- package/build/types/createTable.d.ts +10 -11
- package/build/types/features/Cells.d.ts +13 -0
- package/build/types/features/ColumnSizing.d.ts +24 -30
- package/build/types/features/Columns.d.ts +54 -0
- package/build/types/features/Expanding.d.ts +6 -9
- package/build/types/features/Filters.d.ts +3 -1
- package/build/types/features/Grouping.d.ts +6 -9
- package/build/types/features/Headers.d.ts +3 -15
- package/build/types/features/Ordering.d.ts +1 -1
- package/build/types/features/Pagination.d.ts +6 -6
- package/build/types/features/Pinning.d.ts +18 -4
- package/build/types/features/RowSelection.d.ts +6 -13
- package/build/types/features/Rows.d.ts +27 -0
- package/build/types/features/Sorting.d.ts +5 -8
- package/build/types/features/Visibility.d.ts +9 -7
- package/build/types/filterFns.d.ts +5 -0
- package/build/types/types.d.ts +27 -69
- package/build/types/utils.d.ts +1 -5
- package/build/umd/index.development.js +844 -835
- 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 +55 -601
- package/src/createTable.ts +13 -17
- package/src/features/Cells.ts +130 -0
- package/src/features/ColumnSizing.ts +111 -89
- package/src/features/Columns.ts +288 -0
- package/src/features/Expanding.ts +20 -42
- package/src/features/Filters.ts +11 -3
- package/src/features/Grouping.ts +13 -39
- package/src/features/Headers.ts +49 -233
- package/src/features/Ordering.ts +1 -1
- package/src/features/Pagination.ts +14 -4
- package/src/features/Pinning.ts +194 -3
- package/src/features/RowSelection.ts +26 -88
- package/src/features/Rows.ts +123 -0
- package/src/features/Sorting.ts +20 -43
- package/src/features/Visibility.ts +82 -63
- package/src/filterFns.ts +20 -0
- package/src/types.ts +59 -133
- package/src/utils/getColumnFilteredRowModelAsync.ts +1 -5
- package/src/utils/getGlobalFilteredRowModelAsync.ts +2 -6
- package/src/utils/getSortedRowModelAsync.ts +0 -1
- package/src/utils.ts +2 -31
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
|
-
Getter,
|
|
3
2
|
OnChangeFn,
|
|
4
3
|
TableGenerics,
|
|
5
|
-
PropGetterValue,
|
|
6
4
|
TableInstance,
|
|
7
5
|
Row,
|
|
8
6
|
RowModel,
|
|
9
7
|
Updater,
|
|
10
8
|
} from '../types'
|
|
11
|
-
import {
|
|
9
|
+
import { makeStateUpdater, memo } from '../utils'
|
|
12
10
|
|
|
13
11
|
export type RowSelectionState = Record<string, boolean>
|
|
14
12
|
|
|
@@ -41,40 +39,22 @@ export type RowSelectionOptions<TGenerics extends TableGenerics> = {
|
|
|
41
39
|
// ) => RowModel<TGenerics>
|
|
42
40
|
}
|
|
43
41
|
|
|
44
|
-
type ToggleRowSelectedProps = {
|
|
45
|
-
onChange?: (e: unknown) => void
|
|
46
|
-
checked?: boolean
|
|
47
|
-
title?: string
|
|
48
|
-
indeterminate?: boolean
|
|
49
|
-
}
|
|
50
|
-
|
|
51
42
|
export type RowSelectionRow = {
|
|
52
43
|
getIsSelected: () => boolean
|
|
53
44
|
getIsSomeSelected: () => boolean
|
|
54
45
|
getCanSelect: () => boolean
|
|
55
46
|
getCanMultiSelect: () => boolean
|
|
56
47
|
toggleSelected: (value?: boolean) => void
|
|
57
|
-
|
|
58
|
-
userProps?: TGetter
|
|
59
|
-
) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
|
|
48
|
+
getToggleSelectedHandler: () => (event: unknown) => void
|
|
60
49
|
}
|
|
61
50
|
|
|
62
51
|
export type RowSelectionInstance<TGenerics extends TableGenerics> = {
|
|
63
52
|
queueResetRowSelection: () => void
|
|
64
|
-
|
|
65
|
-
rowId: string
|
|
66
|
-
|
|
67
|
-
) =>
|
|
68
|
-
|
|
69
|
-
TGetter extends Getter<ToggleRowSelectedProps>
|
|
70
|
-
>(
|
|
71
|
-
userProps?: TGetter
|
|
72
|
-
) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
|
|
73
|
-
getToggleAllPageRowsSelectedProps: <
|
|
74
|
-
TGetter extends Getter<ToggleRowSelectedProps>
|
|
75
|
-
>(
|
|
76
|
-
userProps?: TGetter
|
|
77
|
-
) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
|
|
53
|
+
getToggleRowSelectedHandler: (
|
|
54
|
+
rowId: string
|
|
55
|
+
) => undefined | ((e: unknown) => void)
|
|
56
|
+
getToggleAllRowsSelectedHandler: () => (event: unknown) => void
|
|
57
|
+
getToggleAllPageRowsSelectedHandler: () => (event: unknown) => void
|
|
78
58
|
setRowSelection: (updater: Updater<RowSelectionState>) => void
|
|
79
59
|
resetRowSelection: () => void
|
|
80
60
|
toggleRowSelected: (rowId: string, value?: boolean) => void
|
|
@@ -120,7 +100,7 @@ export const RowSelection = {
|
|
|
120
100
|
}
|
|
121
101
|
},
|
|
122
102
|
|
|
123
|
-
|
|
103
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
124
104
|
instance: TableInstance<TGenerics>
|
|
125
105
|
): RowSelectionInstance<TGenerics> => {
|
|
126
106
|
let registered = false
|
|
@@ -460,77 +440,35 @@ export const RowSelection = {
|
|
|
460
440
|
: !!paginationFlatRows?.length
|
|
461
441
|
},
|
|
462
442
|
|
|
463
|
-
|
|
443
|
+
getToggleRowSelectedHandler: rowId => {
|
|
464
444
|
const row = instance.getRow(rowId)
|
|
465
445
|
|
|
466
446
|
const isSelected = row.getIsSelected()
|
|
467
447
|
const isSomeSelected = row.getIsSomeSelected()
|
|
468
448
|
const canSelect = row.getCanSelect()
|
|
469
449
|
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
)
|
|
476
|
-
}
|
|
477
|
-
: undefined,
|
|
478
|
-
checked: isSelected,
|
|
479
|
-
title: 'Toggle Row Selected',
|
|
480
|
-
indeterminate: isSomeSelected,
|
|
481
|
-
// onChange: forInput
|
|
482
|
-
// ? (e: Event) => e.stopPropagation()
|
|
483
|
-
// : (e: Event) => {
|
|
484
|
-
// if (instance.options.isAdditiveSelectEvent(e)) {
|
|
485
|
-
// row.toggleSelected()
|
|
486
|
-
// } else if (instance.options.isInclusiveSelectEvent(e)) {
|
|
487
|
-
// instance.addRowSelectionRange(row.id)
|
|
488
|
-
// } else {
|
|
489
|
-
// instance.setRowSelection({})
|
|
490
|
-
// row.toggleSelected()
|
|
491
|
-
// }
|
|
492
|
-
|
|
493
|
-
// if (props.onClick) props.onClick(e)
|
|
494
|
-
// },
|
|
450
|
+
return (e: unknown) => {
|
|
451
|
+
if (!canSelect) return
|
|
452
|
+
row.toggleSelected(
|
|
453
|
+
((e as MouseEvent).target as HTMLInputElement)?.checked
|
|
454
|
+
)
|
|
495
455
|
}
|
|
496
|
-
|
|
497
|
-
return propGetter(initialProps, userProps)
|
|
498
456
|
},
|
|
499
457
|
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
onChange: (e: unknown) => {
|
|
506
|
-
instance.toggleAllRowsSelected(
|
|
507
|
-
((e as MouseEvent).target as HTMLInputElement).checked
|
|
508
|
-
)
|
|
509
|
-
},
|
|
510
|
-
checked: isAllRowsSelected,
|
|
511
|
-
title: 'Toggle All Rows Selected',
|
|
512
|
-
indeterminate: isSomeRowsSelected,
|
|
458
|
+
getToggleAllRowsSelectedHandler: () => {
|
|
459
|
+
return (e: unknown) => {
|
|
460
|
+
instance.toggleAllRowsSelected(
|
|
461
|
+
((e as MouseEvent).target as HTMLInputElement).checked
|
|
462
|
+
)
|
|
513
463
|
}
|
|
514
|
-
|
|
515
|
-
return propGetter(initialProps, userProps)
|
|
516
464
|
},
|
|
517
465
|
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
onChange: (e: unknown) => {
|
|
524
|
-
instance.toggleAllPageRowsSelected(
|
|
525
|
-
((e as MouseEvent).target as HTMLInputElement).checked
|
|
526
|
-
)
|
|
527
|
-
},
|
|
528
|
-
checked: isAllPageRowsSelected,
|
|
529
|
-
title: 'Toggle All Current Page Rows Selected',
|
|
530
|
-
indeterminate: isSomePageRowsSelected,
|
|
466
|
+
getToggleAllPageRowsSelectedHandler: () => {
|
|
467
|
+
return (e: unknown) => {
|
|
468
|
+
instance.toggleAllPageRowsSelected(
|
|
469
|
+
((e as MouseEvent).target as HTMLInputElement).checked
|
|
470
|
+
)
|
|
531
471
|
}
|
|
532
|
-
|
|
533
|
-
return propGetter(initialProps, userProps)
|
|
534
472
|
},
|
|
535
473
|
}
|
|
536
474
|
},
|
|
@@ -543,8 +481,8 @@ export const RowSelection = {
|
|
|
543
481
|
getIsSelected: () => instance.getRowIsSelected(row.id),
|
|
544
482
|
getIsSomeSelected: () => instance.getRowIsSomeSelected(row.id),
|
|
545
483
|
toggleSelected: value => instance.toggleRowSelected(row.id, value),
|
|
546
|
-
|
|
547
|
-
instance.
|
|
484
|
+
getToggleSelectedHandler: () =>
|
|
485
|
+
instance.getToggleRowSelectedHandler(row.id)!,
|
|
548
486
|
getCanMultiSelect: () => instance.getRowCanMultiSelect(row.id),
|
|
549
487
|
getCanSelect: () => instance.getRowCanSelect(row.id),
|
|
550
488
|
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import {
|
|
2
|
+
TableGenerics,
|
|
3
|
+
TableInstance,
|
|
4
|
+
Row,
|
|
5
|
+
RowModel,
|
|
6
|
+
RowValues,
|
|
7
|
+
} from '../types'
|
|
8
|
+
import { flattenBy } from '../utils'
|
|
9
|
+
|
|
10
|
+
export type CoreRow<TGenerics extends TableGenerics> = {
|
|
11
|
+
id: string
|
|
12
|
+
index: number
|
|
13
|
+
original?: TGenerics['Row']
|
|
14
|
+
depth: number
|
|
15
|
+
values: RowValues
|
|
16
|
+
subRows: Row<TGenerics>[]
|
|
17
|
+
getLeafRows: () => Row<TGenerics>[]
|
|
18
|
+
originalSubRows?: TGenerics['Row'][]
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export type RowsOptions<TGenerics extends TableGenerics> = {
|
|
22
|
+
getCoreRowModel: (
|
|
23
|
+
instance: TableInstance<TGenerics>
|
|
24
|
+
) => () => RowModel<TGenerics>
|
|
25
|
+
getSubRows?: (
|
|
26
|
+
originalRow: TGenerics['Row'],
|
|
27
|
+
index: number
|
|
28
|
+
) => undefined | TGenerics['Row'][]
|
|
29
|
+
getRowId?: (
|
|
30
|
+
originalRow: TGenerics['Row'],
|
|
31
|
+
index: number,
|
|
32
|
+
parent?: Row<TGenerics>
|
|
33
|
+
) => string
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type RowsInstance<TGenerics extends TableGenerics> = {
|
|
37
|
+
getRowId: (
|
|
38
|
+
_: TGenerics['Row'],
|
|
39
|
+
index: number,
|
|
40
|
+
parent?: Row<TGenerics>
|
|
41
|
+
) => string
|
|
42
|
+
createRow: (
|
|
43
|
+
id: string,
|
|
44
|
+
original: TGenerics['Row'] | undefined,
|
|
45
|
+
rowIndex: number,
|
|
46
|
+
depth: number,
|
|
47
|
+
values: Record<string, any>
|
|
48
|
+
) => Row<TGenerics>
|
|
49
|
+
getCoreRowModel: () => RowModel<TGenerics>
|
|
50
|
+
_getCoreRowModel?: () => RowModel<TGenerics>
|
|
51
|
+
getRowModel: () => RowModel<TGenerics>
|
|
52
|
+
getRow: (id: string) => Row<TGenerics>
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
//
|
|
56
|
+
|
|
57
|
+
export const Rows = {
|
|
58
|
+
// createRow: <TGenerics extends TableGenerics>(
|
|
59
|
+
// row: Row<TGenerics>,
|
|
60
|
+
// instance: TableInstance<TGenerics>
|
|
61
|
+
// ): CellsRow<TGenerics> => {
|
|
62
|
+
// return {}
|
|
63
|
+
// },
|
|
64
|
+
|
|
65
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
66
|
+
instance: TableInstance<TGenerics>
|
|
67
|
+
): RowsInstance<TGenerics> => {
|
|
68
|
+
return {
|
|
69
|
+
getRowId: (
|
|
70
|
+
row: TGenerics['Row'],
|
|
71
|
+
index: number,
|
|
72
|
+
parent?: Row<TGenerics>
|
|
73
|
+
) =>
|
|
74
|
+
instance.options.getRowId?.(row, index, parent) ??
|
|
75
|
+
`${parent ? [parent.id, index].join('.') : index}`,
|
|
76
|
+
createRow: (id, original, rowIndex, depth, values) => {
|
|
77
|
+
let row: CoreRow<TGenerics> = {
|
|
78
|
+
id,
|
|
79
|
+
index: rowIndex,
|
|
80
|
+
original,
|
|
81
|
+
depth,
|
|
82
|
+
values,
|
|
83
|
+
subRows: [],
|
|
84
|
+
getLeafRows: () => flattenBy(row.subRows, d => d.subRows),
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
for (let i = 0; i < instance._features.length; i++) {
|
|
88
|
+
const feature = instance._features[i]
|
|
89
|
+
Object.assign(row, feature.createRow?.(row, instance))
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return row as Row<TGenerics>
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
getCoreRowModel: () => {
|
|
96
|
+
if (!instance._getCoreRowModel) {
|
|
97
|
+
instance._getCoreRowModel = instance.options.getCoreRowModel(instance)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return instance._getCoreRowModel()
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
// The final calls start at the bottom of the model,
|
|
104
|
+
// expanded rows, which then work their way up
|
|
105
|
+
|
|
106
|
+
getRowModel: () => {
|
|
107
|
+
return instance.getPaginationRowModel()
|
|
108
|
+
},
|
|
109
|
+
getRow: (id: string) => {
|
|
110
|
+
const row = instance.getRowModel().rowsById[id]
|
|
111
|
+
|
|
112
|
+
if (!row) {
|
|
113
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
114
|
+
throw new Error(`getRow expected an ID, but got ${id}`)
|
|
115
|
+
}
|
|
116
|
+
throw new Error()
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return row
|
|
120
|
+
},
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
}
|
package/src/features/Sorting.ts
CHANGED
|
@@ -7,24 +7,14 @@ import {
|
|
|
7
7
|
|
|
8
8
|
import {
|
|
9
9
|
Column,
|
|
10
|
-
Getter,
|
|
11
|
-
Header,
|
|
12
10
|
OnChangeFn,
|
|
13
11
|
TableGenerics,
|
|
14
|
-
PropGetterValue,
|
|
15
12
|
TableInstance,
|
|
16
13
|
Row,
|
|
17
14
|
Updater,
|
|
18
15
|
} from '../types'
|
|
19
16
|
|
|
20
|
-
import {
|
|
21
|
-
functionalUpdate,
|
|
22
|
-
isFunction,
|
|
23
|
-
makeStateUpdater,
|
|
24
|
-
memo,
|
|
25
|
-
Overwrite,
|
|
26
|
-
propGetter,
|
|
27
|
-
} from '../utils'
|
|
17
|
+
import { isFunction, makeStateUpdater, Overwrite } from '../utils'
|
|
28
18
|
|
|
29
19
|
export type SortDirection = 'asc' | 'desc'
|
|
30
20
|
|
|
@@ -72,12 +62,11 @@ export type SortingColumn<TGenerics extends TableGenerics> = {
|
|
|
72
62
|
getIsSorted: () => false | SortDirection
|
|
73
63
|
resetSorting: () => void
|
|
74
64
|
toggleSorting: (desc?: boolean, isMulti?: boolean) => void
|
|
75
|
-
|
|
76
|
-
userProps?: TGetter
|
|
77
|
-
) => undefined | PropGetterValue<ToggleSortingProps, TGetter>
|
|
65
|
+
getToggleSortingHandler: () => undefined | ((event: unknown) => void)
|
|
78
66
|
}
|
|
79
67
|
|
|
80
68
|
export type SortingOptions<TGenerics extends TableGenerics> = {
|
|
69
|
+
manualSorting?: boolean
|
|
81
70
|
sortingFns?: TGenerics['SortingFns']
|
|
82
71
|
onSortingChange?: OnChangeFn<SortingState>
|
|
83
72
|
autoResetSorting?: boolean
|
|
@@ -93,11 +82,6 @@ export type SortingOptions<TGenerics extends TableGenerics> = {
|
|
|
93
82
|
isMultiSortEvent?: (e: unknown) => boolean
|
|
94
83
|
}
|
|
95
84
|
|
|
96
|
-
export type ToggleSortingProps = {
|
|
97
|
-
title?: string
|
|
98
|
-
onClick?: (event: unknown) => void
|
|
99
|
-
}
|
|
100
|
-
|
|
101
85
|
export type SortingInstance<TGenerics extends TableGenerics> = {
|
|
102
86
|
queueResetSorting: () => void
|
|
103
87
|
getColumnAutoSortingFn: (columnId: string) => SortingFn<TGenerics> | undefined
|
|
@@ -116,10 +100,9 @@ export type SortingInstance<TGenerics extends TableGenerics> = {
|
|
|
116
100
|
getColumnCanMultiSort: (columnId: string) => boolean
|
|
117
101
|
getColumnIsSorted: (columnId: string) => false | 'asc' | 'desc'
|
|
118
102
|
getColumnSortIndex: (columnId: string) => number
|
|
119
|
-
|
|
120
|
-
columnId: string
|
|
121
|
-
|
|
122
|
-
) => undefined | PropGetterValue<ToggleSortingProps, TGetter>
|
|
103
|
+
getToggleSortingHandler: (
|
|
104
|
+
columnId: string
|
|
105
|
+
) => undefined | ((event: unknown) => void)
|
|
123
106
|
getPreSortedRowModel: () => RowModel<TGenerics>
|
|
124
107
|
getSortedRowModel: () => RowModel<TGenerics>
|
|
125
108
|
_getSortedRowModel?: () => RowModel<TGenerics>
|
|
@@ -167,12 +150,12 @@ export const Sorting = {
|
|
|
167
150
|
resetSorting: () => instance.resetSorting(column.id),
|
|
168
151
|
toggleSorting: (desc, isMulti) =>
|
|
169
152
|
instance.toggleColumnSorting(column.id, desc, isMulti),
|
|
170
|
-
|
|
171
|
-
instance.
|
|
153
|
+
getToggleSortingHandler: () =>
|
|
154
|
+
instance.getToggleSortingHandler(column.id)!,
|
|
172
155
|
}
|
|
173
156
|
},
|
|
174
157
|
|
|
175
|
-
|
|
158
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
176
159
|
instance: TableInstance<TGenerics>
|
|
177
160
|
): SortingInstance<TGenerics> => {
|
|
178
161
|
let registered = false
|
|
@@ -415,7 +398,7 @@ export const Sorting = {
|
|
|
415
398
|
}
|
|
416
399
|
},
|
|
417
400
|
|
|
418
|
-
|
|
401
|
+
getToggleSortingHandler: columnId => {
|
|
419
402
|
const column = instance.getColumn(columnId)
|
|
420
403
|
|
|
421
404
|
if (!column) {
|
|
@@ -424,22 +407,16 @@ export const Sorting = {
|
|
|
424
407
|
|
|
425
408
|
const canSort = column.getCanSort()
|
|
426
409
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
: false
|
|
437
|
-
)
|
|
438
|
-
}
|
|
439
|
-
: undefined,
|
|
410
|
+
return (e: unknown) => {
|
|
411
|
+
if (!canSort) return
|
|
412
|
+
;(e as any).persist?.()
|
|
413
|
+
column.toggleSorting?.(
|
|
414
|
+
undefined,
|
|
415
|
+
column.getCanMultiSort()
|
|
416
|
+
? instance.options.isMultiSortEvent?.(e)
|
|
417
|
+
: false
|
|
418
|
+
)
|
|
440
419
|
}
|
|
441
|
-
|
|
442
|
-
return propGetter(initialProps, userProps)
|
|
443
420
|
},
|
|
444
421
|
|
|
445
422
|
getPreSortedRowModel: () => instance.getGlobalFilteredRowModel(),
|
|
@@ -452,7 +429,7 @@ export const Sorting = {
|
|
|
452
429
|
instance.options.getSortedRowModel(instance)
|
|
453
430
|
}
|
|
454
431
|
|
|
455
|
-
if (!instance._getSortedRowModel) {
|
|
432
|
+
if (instance.options.manualSorting || !instance._getSortedRowModel) {
|
|
456
433
|
return instance.getPreSortedRowModel()
|
|
457
434
|
}
|
|
458
435
|
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Cell,
|
|
3
3
|
Column,
|
|
4
|
-
Getter,
|
|
5
4
|
OnChangeFn,
|
|
6
5
|
TableGenerics,
|
|
7
|
-
PropGetterValue,
|
|
8
6
|
TableInstance,
|
|
9
7
|
Updater,
|
|
8
|
+
Row,
|
|
10
9
|
} from '../types'
|
|
11
|
-
import { makeStateUpdater, memo
|
|
10
|
+
import { makeStateUpdater, memo } from '../utils'
|
|
12
11
|
|
|
13
12
|
export type VisibilityOptions = {
|
|
14
13
|
onColumnVisibilityChange?: OnChangeFn<VisibilityState>
|
|
@@ -28,6 +27,9 @@ export type VisibilityTableState = {
|
|
|
28
27
|
export type VisibilityInstance<TGenerics extends TableGenerics> = {
|
|
29
28
|
getVisibleFlatColumns: () => Column<TGenerics>[]
|
|
30
29
|
getVisibleLeafColumns: () => Column<TGenerics>[]
|
|
30
|
+
getLeftVisibleLeafColumns: () => Column<TGenerics>[]
|
|
31
|
+
getRightVisibleLeafColumns: () => Column<TGenerics>[]
|
|
32
|
+
getCenterVisibleLeafColumns: () => Column<TGenerics>[]
|
|
31
33
|
setColumnVisibility: (updater: Updater<VisibilityState>) => void
|
|
32
34
|
toggleColumnVisibility: (columnId: string, value?: boolean) => void
|
|
33
35
|
toggleAllColumnsVisible: (value?: boolean) => void
|
|
@@ -35,16 +37,11 @@ export type VisibilityInstance<TGenerics extends TableGenerics> = {
|
|
|
35
37
|
getColumnCanHide: (columnId: string) => boolean
|
|
36
38
|
getIsAllColumnsVisible: () => boolean
|
|
37
39
|
getIsSomeColumnsVisible: () => boolean
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
userProps?: TGetter
|
|
42
|
-
) => undefined | PropGetterValue<ToggleAllColumnsVisibilityProps, TGetter>
|
|
40
|
+
getToggleAllColumnsVisibilityHandler: () =>
|
|
41
|
+
| undefined
|
|
42
|
+
| ((event: unknown) => void)
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
type ToggleVisibilityProps = {}
|
|
46
|
-
type ToggleAllColumnsVisibilityProps = {}
|
|
47
|
-
|
|
48
45
|
export type VisibilityColumnDef = {
|
|
49
46
|
enableHiding?: boolean
|
|
50
47
|
defaultCanHide?: boolean
|
|
@@ -52,6 +49,7 @@ export type VisibilityColumnDef = {
|
|
|
52
49
|
}
|
|
53
50
|
|
|
54
51
|
export type VisibilityRow<TGenerics extends TableGenerics> = {
|
|
52
|
+
_getAllVisibleCells: () => Cell<TGenerics>[]
|
|
55
53
|
getVisibleCells: () => Cell<TGenerics>[]
|
|
56
54
|
}
|
|
57
55
|
|
|
@@ -59,9 +57,7 @@ export type VisibilityColumn = {
|
|
|
59
57
|
getCanHide: () => boolean
|
|
60
58
|
getIsVisible: () => boolean
|
|
61
59
|
toggleVisibility: (value?: boolean) => void
|
|
62
|
-
|
|
63
|
-
userProps?: TGetter
|
|
64
|
-
) => PropGetterValue<ToggleVisibilityProps, TGetter>
|
|
60
|
+
getToggleVisibilityHandler: () => (event: unknown) => void
|
|
65
61
|
}
|
|
66
62
|
|
|
67
63
|
//
|
|
@@ -96,63 +92,98 @@ export const Visibility = {
|
|
|
96
92
|
getIsVisible: () => instance.getColumnIsVisible(column.id),
|
|
97
93
|
toggleVisibility: value =>
|
|
98
94
|
instance.toggleColumnVisibility(column.id, value),
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
onChange: (e: unknown) => {
|
|
105
|
-
column.toggleVisibility?.(
|
|
106
|
-
((e as MouseEvent).target as HTMLInputElement).checked
|
|
107
|
-
)
|
|
108
|
-
},
|
|
95
|
+
getToggleVisibilityHandler: () => {
|
|
96
|
+
return (e: unknown) => {
|
|
97
|
+
column.toggleVisibility?.(
|
|
98
|
+
((e as MouseEvent).target as HTMLInputElement).checked
|
|
99
|
+
)
|
|
109
100
|
}
|
|
110
|
-
|
|
111
|
-
return propGetter(props, userProps)
|
|
112
101
|
},
|
|
113
102
|
}
|
|
114
103
|
},
|
|
115
104
|
|
|
116
|
-
|
|
105
|
+
createRow: <TGenerics extends TableGenerics>(
|
|
106
|
+
row: Row<TGenerics>,
|
|
117
107
|
instance: TableInstance<TGenerics>
|
|
118
|
-
):
|
|
108
|
+
): VisibilityRow<TGenerics> => {
|
|
119
109
|
return {
|
|
120
|
-
|
|
110
|
+
_getAllVisibleCells: memo(
|
|
121
111
|
() => [
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
.
|
|
125
|
-
.filter(d => d.getIsVisible?.())
|
|
112
|
+
row
|
|
113
|
+
.getAllCells()
|
|
114
|
+
.filter(cell => cell.column.getIsVisible())
|
|
126
115
|
.map(d => d.id)
|
|
127
116
|
.join('_'),
|
|
128
117
|
],
|
|
129
|
-
|
|
130
|
-
return
|
|
118
|
+
_ => {
|
|
119
|
+
return row.getAllCells().filter(cell => cell.column.getIsVisible())
|
|
131
120
|
},
|
|
132
121
|
{
|
|
133
|
-
key: '
|
|
134
|
-
debug: () =>
|
|
135
|
-
instance.options.debugAll ?? instance.options.debugColumns,
|
|
122
|
+
key: 'row._getAllVisibleCells',
|
|
123
|
+
debug: () => instance.options.debugAll ?? instance.options.debugRows,
|
|
136
124
|
}
|
|
137
125
|
),
|
|
126
|
+
getVisibleCells: memo(
|
|
127
|
+
() => [
|
|
128
|
+
row.getLeftVisibleCells(),
|
|
129
|
+
row.getCenterVisibleCells(),
|
|
130
|
+
row.getRightVisibleCells(),
|
|
131
|
+
],
|
|
132
|
+
(left, center, right) => [...left, ...center, ...right],
|
|
133
|
+
{
|
|
134
|
+
key: 'row.getVisibleCells',
|
|
135
|
+
debug: () => instance.options.debugAll ?? instance.options.debugRows,
|
|
136
|
+
}
|
|
137
|
+
),
|
|
138
|
+
}
|
|
139
|
+
},
|
|
138
140
|
|
|
139
|
-
|
|
141
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
142
|
+
instance: TableInstance<TGenerics>
|
|
143
|
+
): VisibilityInstance<TGenerics> => {
|
|
144
|
+
const makeVisibleColumnsMethod = (
|
|
145
|
+
key: string,
|
|
146
|
+
getColumns: () => Column<TGenerics>[]
|
|
147
|
+
): (() => Column<TGenerics>[]) => {
|
|
148
|
+
return memo(
|
|
140
149
|
() => [
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
.
|
|
144
|
-
.filter(d => d.getIsVisible?.())
|
|
150
|
+
getColumns(),
|
|
151
|
+
getColumns()
|
|
152
|
+
.filter(d => d.getIsVisible())
|
|
145
153
|
.map(d => d.id)
|
|
146
154
|
.join('_'),
|
|
147
155
|
],
|
|
148
|
-
|
|
149
|
-
return
|
|
156
|
+
columns => {
|
|
157
|
+
return columns.filter(d => d.getIsVisible?.())
|
|
150
158
|
},
|
|
151
159
|
{
|
|
152
|
-
key
|
|
160
|
+
key,
|
|
153
161
|
debug: () =>
|
|
154
162
|
instance.options.debugAll ?? instance.options.debugColumns,
|
|
155
163
|
}
|
|
164
|
+
)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return {
|
|
168
|
+
getVisibleFlatColumns: makeVisibleColumnsMethod(
|
|
169
|
+
'getVisibleFlatColumns',
|
|
170
|
+
() => instance.getAllFlatColumns()
|
|
171
|
+
),
|
|
172
|
+
getVisibleLeafColumns: makeVisibleColumnsMethod(
|
|
173
|
+
'getVisibleLeafColumns',
|
|
174
|
+
() => instance.getAllLeafColumns()
|
|
175
|
+
),
|
|
176
|
+
getLeftVisibleLeafColumns: makeVisibleColumnsMethod(
|
|
177
|
+
'getLeftVisibleLeafColumns',
|
|
178
|
+
() => instance.getLeftLeafColumns()
|
|
179
|
+
),
|
|
180
|
+
getRightVisibleLeafColumns: makeVisibleColumnsMethod(
|
|
181
|
+
'getRightVisibleLeafColumns',
|
|
182
|
+
() => instance.getRightLeafColumns()
|
|
183
|
+
),
|
|
184
|
+
getCenterVisibleLeafColumns: makeVisibleColumnsMethod(
|
|
185
|
+
'getCenterVisibleLeafColumns',
|
|
186
|
+
() => instance.getCenterLeafColumns()
|
|
156
187
|
),
|
|
157
188
|
|
|
158
189
|
setColumnVisibility: updater =>
|
|
@@ -218,24 +249,12 @@ export const Visibility = {
|
|
|
218
249
|
getIsSomeColumnsVisible: () =>
|
|
219
250
|
instance.getAllLeafColumns().some(column => column.getIsVisible?.()),
|
|
220
251
|
|
|
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,
|
|
252
|
+
getToggleAllColumnsVisibilityHandler: () => {
|
|
253
|
+
return (e: unknown) => {
|
|
254
|
+
instance.toggleAllColumnsVisible(
|
|
255
|
+
((e as MouseEvent).target as HTMLInputElement)?.checked
|
|
256
|
+
)
|
|
236
257
|
}
|
|
237
|
-
|
|
238
|
-
return propGetter(props, userProps)
|
|
239
258
|
},
|
|
240
259
|
}
|
|
241
260
|
},
|
package/src/filterFns.ts
CHANGED
|
@@ -7,6 +7,7 @@ export const filterFns = {
|
|
|
7
7
|
equalsStringSensitive,
|
|
8
8
|
arrIncludes,
|
|
9
9
|
arrIncludesAll,
|
|
10
|
+
arrIncludesSome,
|
|
10
11
|
equals,
|
|
11
12
|
weakEquals,
|
|
12
13
|
betweenNumberRange,
|
|
@@ -117,6 +118,25 @@ function arrIncludesAll<TGenerics extends TableGenerics>(
|
|
|
117
118
|
|
|
118
119
|
arrIncludesAll.autoRemove = (val: any) => testFalsey(val) || !val?.length
|
|
119
120
|
|
|
121
|
+
function arrIncludesSome<TGenerics extends TableGenerics>(
|
|
122
|
+
rows: Row<TGenerics>[],
|
|
123
|
+
columnIds: string[],
|
|
124
|
+
filterValue: unknown[]
|
|
125
|
+
) {
|
|
126
|
+
return rows.filter(row => {
|
|
127
|
+
return columnIds.some(id => {
|
|
128
|
+
const rowValue = row.values[id]
|
|
129
|
+
return (
|
|
130
|
+
rowValue &&
|
|
131
|
+
rowValue.length &&
|
|
132
|
+
filterValue.some(val => rowValue.includes(val))
|
|
133
|
+
)
|
|
134
|
+
})
|
|
135
|
+
})
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
arrIncludesSome.autoRemove = (val: any) => testFalsey(val) || !val?.length
|
|
139
|
+
|
|
120
140
|
function equals<TGenerics extends TableGenerics>(
|
|
121
141
|
rows: Row<TGenerics>[],
|
|
122
142
|
columnIds: string[],
|