@tanstack/react-table 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/react-table/src/index.js +139 -0
- package/build/cjs/react-table/src/index.js.map +1 -0
- package/build/cjs/table-core/build/esm/index.js +3867 -0
- package/build/cjs/table-core/build/esm/index.js.map +1 -0
- package/build/esm/index.js +3196 -4117
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +24 -813
- package/build/types/index.d.ts +16 -9
- package/build/umd/index.development.js +3234 -4125
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +11 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +10 -6
- package/src/index.tsx +111 -9
- 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/createTable.js +0 -122
- package/build/cjs/createTable.js.map +0 -1
- package/build/cjs/features/ColumnSizing.js +0 -318
- package/build/cjs/features/ColumnSizing.js.map +0 -1
- package/build/cjs/features/Expanding.js +0 -239
- package/build/cjs/features/Expanding.js.map +0 -1
- package/build/cjs/features/Filters.js +0 -414
- package/build/cjs/features/Filters.js.map +0 -1
- package/build/cjs/features/Grouping.js +0 -232
- package/build/cjs/features/Grouping.js.map +0 -1
- package/build/cjs/features/Headers.js +0 -629
- package/build/cjs/features/Headers.js.map +0 -1
- package/build/cjs/features/Ordering.js +0 -86
- package/build/cjs/features/Ordering.js.map +0 -1
- package/build/cjs/features/Pagination.js +0 -193
- package/build/cjs/features/Pagination.js.map +0 -1
- package/build/cjs/features/Pinning.js +0 -149
- package/build/cjs/features/Pinning.js.map +0 -1
- package/build/cjs/features/RowSelection.js +0 -526
- package/build/cjs/features/RowSelection.js.map +0 -1
- package/build/cjs/features/Sorting.js +0 -315
- package/build/cjs/features/Sorting.js.map +0 -1
- package/build/cjs/features/Visibility.js +0 -174
- package/build/cjs/features/Visibility.js.map +0 -1
- package/build/cjs/filterTypes.js +0 -172
- package/build/cjs/filterTypes.js.map +0 -1
- package/build/cjs/index.js +0 -44
- package/build/cjs/index.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/cjs/utils.js +0 -167
- package/build/cjs/utils.js.map +0 -1
- package/build/types/aggregationTypes.d.ts +0 -22
- package/build/types/core.d.ts +0 -105
- package/build/types/createTable.d.ts +0 -42
- package/build/types/features/ColumnSizing.d.ts +0 -73
- package/build/types/features/Expanding.d.ts +0 -48
- package/build/types/features/Filters.d.ts +0 -90
- package/build/types/features/Grouping.d.ts +0 -83
- package/build/types/features/Headers.d.ts +0 -41
- package/build/types/features/Ordering.d.ts +0 -19
- package/build/types/features/Pagination.d.ts +0 -39
- package/build/types/features/Pinning.d.ts +0 -39
- package/build/types/features/RowSelection.d.ts +0 -58
- package/build/types/features/Sorting.d.ts +0 -79
- package/build/types/features/Visibility.d.ts +0 -47
- package/build/types/filterTypes.d.ts +0 -50
- package/build/types/sortTypes.d.ts +0 -18
- package/build/types/types.d.ts +0 -138
- 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/build/types/utils.d.ts +0 -23
- package/src/aggregationTypes.ts +0 -115
- package/src/core.tsx +0 -763
- package/src/createTable.tsx +0 -186
- package/src/features/ColumnSizing.ts +0 -424
- package/src/features/Expanding.ts +0 -318
- package/src/features/Filters.ts +0 -560
- package/src/features/Grouping.ts +0 -361
- package/src/features/Headers.ts +0 -729
- package/src/features/Ordering.ts +0 -110
- package/src/features/Pagination.ts +0 -250
- package/src/features/Pinning.ts +0 -174
- package/src/features/RowSelection.ts +0 -651
- package/src/features/Sorting.ts +0 -453
- package/src/features/Visibility.ts +0 -238
- package/src/filterTypes.ts +0 -188
- package/src/sortTypes.ts +0 -147
- package/src/types.ts +0 -311
- 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/createTable.tsx
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import * as React from 'react'
|
|
2
|
-
import { createTableInstance } from './core'
|
|
3
|
-
import { CustomFilterTypes } from './features/Filters'
|
|
4
|
-
import { CustomAggregationTypes } from './features/Grouping'
|
|
5
|
-
import { CustomSortingTypes } from './features/Sorting'
|
|
6
|
-
import {
|
|
7
|
-
TableInstance,
|
|
8
|
-
ColumnDef,
|
|
9
|
-
AccessorFn,
|
|
10
|
-
Options,
|
|
11
|
-
DefaultGenerics,
|
|
12
|
-
PartialGenerics,
|
|
13
|
-
_NonGenerated,
|
|
14
|
-
} from './types'
|
|
15
|
-
import { Overwrite, PartialKeys } from './utils'
|
|
16
|
-
|
|
17
|
-
export type CreatTableFactory<TGenerics extends Partial<DefaultGenerics>> = <
|
|
18
|
-
TRow
|
|
19
|
-
>() => CreateTable<Overwrite<TGenerics, { Row: TRow }>>
|
|
20
|
-
|
|
21
|
-
export type CreateTableOptions<
|
|
22
|
-
TFilterFns extends CustomFilterTypes<any>,
|
|
23
|
-
TSortingFns extends CustomSortingTypes<any>,
|
|
24
|
-
TAggregationFns extends CustomAggregationTypes<any>
|
|
25
|
-
> = {
|
|
26
|
-
filterFns?: TFilterFns
|
|
27
|
-
sortingFns?: TSortingFns
|
|
28
|
-
aggregationFns?: TAggregationFns
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function createTableFactory<
|
|
32
|
-
TFilterFns extends CustomFilterTypes<any>,
|
|
33
|
-
TSortingFns extends CustomSortingTypes<any>,
|
|
34
|
-
TAggregationFns extends CustomAggregationTypes<any>
|
|
35
|
-
>(
|
|
36
|
-
opts: CreateTableOptions<TFilterFns, TSortingFns, TAggregationFns>
|
|
37
|
-
): CreatTableFactory<
|
|
38
|
-
Overwrite<
|
|
39
|
-
PartialGenerics,
|
|
40
|
-
{
|
|
41
|
-
FilterFns: TFilterFns
|
|
42
|
-
SortingFns: TSortingFns
|
|
43
|
-
AggregationFns: TAggregationFns
|
|
44
|
-
}
|
|
45
|
-
>
|
|
46
|
-
> {
|
|
47
|
-
return () => _createTable(undefined, undefined, opts)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export type CreateTable<TGenerics extends Partial<DefaultGenerics>> = {
|
|
51
|
-
createColumns: (columns: ColumnDef<TGenerics>[]) => ColumnDef<TGenerics>[]
|
|
52
|
-
createGroup: (
|
|
53
|
-
column: Overwrite<
|
|
54
|
-
| Overwrite<
|
|
55
|
-
_NonGenerated<ColumnDef<TGenerics>>,
|
|
56
|
-
{
|
|
57
|
-
header: string
|
|
58
|
-
id?: string
|
|
59
|
-
}
|
|
60
|
-
>
|
|
61
|
-
| Overwrite<
|
|
62
|
-
_NonGenerated<ColumnDef<TGenerics>>,
|
|
63
|
-
{
|
|
64
|
-
id: string
|
|
65
|
-
header?: string | ColumnDef<TGenerics>['header']
|
|
66
|
-
}
|
|
67
|
-
>,
|
|
68
|
-
{ accessorFn?: never; accessorKey?: never }
|
|
69
|
-
>
|
|
70
|
-
) => ColumnDef<TGenerics>
|
|
71
|
-
createDisplayColumn: (
|
|
72
|
-
column: PartialKeys<
|
|
73
|
-
_NonGenerated<ColumnDef<TGenerics>>,
|
|
74
|
-
'accessorFn' | 'accessorKey'
|
|
75
|
-
>
|
|
76
|
-
) => ColumnDef<TGenerics>
|
|
77
|
-
createDataColumn: <
|
|
78
|
-
TAccessor extends AccessorFn<TGenerics['Row']> | keyof TGenerics['Row']
|
|
79
|
-
>(
|
|
80
|
-
accessor: TAccessor,
|
|
81
|
-
column: Overwrite<
|
|
82
|
-
TAccessor extends (...args: any[]) => any
|
|
83
|
-
? // Accessor Fn
|
|
84
|
-
_NonGenerated<ColumnDef<TGenerics>>
|
|
85
|
-
: TAccessor extends keyof TGenerics['Row']
|
|
86
|
-
? // Accessor Key
|
|
87
|
-
Overwrite<
|
|
88
|
-
_NonGenerated<ColumnDef<TGenerics>>,
|
|
89
|
-
{
|
|
90
|
-
id?: string
|
|
91
|
-
}
|
|
92
|
-
>
|
|
93
|
-
: never,
|
|
94
|
-
{
|
|
95
|
-
accessorFn?: never
|
|
96
|
-
accessorKey?: never
|
|
97
|
-
}
|
|
98
|
-
>
|
|
99
|
-
) => ColumnDef<TGenerics>
|
|
100
|
-
useTable: (
|
|
101
|
-
options: PartialKeys<
|
|
102
|
-
Omit<Options<TGenerics>, keyof CreateTableOptions<any, any, any>>,
|
|
103
|
-
'state' | 'onStateChange'
|
|
104
|
-
>
|
|
105
|
-
) => TableInstance<TGenerics>
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export function createTable<TRow>() {
|
|
109
|
-
return _createTable<Overwrite<PartialGenerics, { Row: TRow }>>()
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
function _createTable<TGenerics extends PartialGenerics>(
|
|
113
|
-
_?: undefined,
|
|
114
|
-
__?: undefined,
|
|
115
|
-
opts?: CreateTableOptions<any, any, any>
|
|
116
|
-
): CreateTable<TGenerics> {
|
|
117
|
-
return {
|
|
118
|
-
createColumns: columns => columns,
|
|
119
|
-
createDisplayColumn: column => column as any,
|
|
120
|
-
createGroup: column => column as any,
|
|
121
|
-
createDataColumn: (accessor, column): any => {
|
|
122
|
-
column = {
|
|
123
|
-
...column,
|
|
124
|
-
id: column.id,
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
if (typeof accessor === 'string') {
|
|
128
|
-
return {
|
|
129
|
-
...column,
|
|
130
|
-
id: column.id ?? accessor,
|
|
131
|
-
accessorKey: accessor,
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
if (typeof accessor === 'function') {
|
|
136
|
-
return {
|
|
137
|
-
...column,
|
|
138
|
-
accessorFn: accessor,
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
throw new Error('Invalid accessor')
|
|
143
|
-
},
|
|
144
|
-
useTable: (
|
|
145
|
-
options: PartialKeys<
|
|
146
|
-
Omit<Options<TGenerics>, keyof CreateTableOptions<any, any, any>>,
|
|
147
|
-
'state' | 'onStateChange'
|
|
148
|
-
>
|
|
149
|
-
): TableInstance<TGenerics> => {
|
|
150
|
-
// Compose in the generic options to the user options
|
|
151
|
-
const resolvedOptions = {
|
|
152
|
-
...(opts ?? {}),
|
|
153
|
-
state: {}, // Dummy state
|
|
154
|
-
onStateChange: () => {}, // noop
|
|
155
|
-
...options,
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// Create a new table instance and store it in state
|
|
159
|
-
const [instance] = React.useState(() =>
|
|
160
|
-
createTableInstance<TGenerics>(resolvedOptions)
|
|
161
|
-
)
|
|
162
|
-
|
|
163
|
-
// By default, manage table state here using the instance's initial state
|
|
164
|
-
const [state, setState] = React.useState(() => instance.initialState)
|
|
165
|
-
|
|
166
|
-
// Compose the default state above with any user state. This will allow the user
|
|
167
|
-
// to only control a subset of the state if desired.
|
|
168
|
-
instance.setOptions(prev => ({
|
|
169
|
-
...prev,
|
|
170
|
-
...options,
|
|
171
|
-
state: {
|
|
172
|
-
...state,
|
|
173
|
-
...options.state,
|
|
174
|
-
},
|
|
175
|
-
// Similarly, we'll maintain both our internal state and any user-provided
|
|
176
|
-
// state.
|
|
177
|
-
onStateChange: updater => {
|
|
178
|
-
setState(updater)
|
|
179
|
-
options.onStateChange?.(updater)
|
|
180
|
-
},
|
|
181
|
-
}))
|
|
182
|
-
|
|
183
|
-
return instance
|
|
184
|
-
},
|
|
185
|
-
}
|
|
186
|
-
}
|
|
@@ -1,424 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
MouseEvent as ReactMouseEvent,
|
|
3
|
-
TouchEvent as ReactTouchEvent,
|
|
4
|
-
} from 'react'
|
|
5
|
-
import {
|
|
6
|
-
Column,
|
|
7
|
-
Getter,
|
|
8
|
-
Header,
|
|
9
|
-
OnChangeFn,
|
|
10
|
-
PartialGenerics,
|
|
11
|
-
PropGetterValue,
|
|
12
|
-
TableInstance,
|
|
13
|
-
Updater,
|
|
14
|
-
} from '../types'
|
|
15
|
-
import { functionalUpdate, makeStateUpdater, memo, propGetter } from '../utils'
|
|
16
|
-
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
export type ColumnSizing = Record<string, number>
|
|
20
|
-
|
|
21
|
-
export type ColumnSizingInfoState = {
|
|
22
|
-
startOffset: null | number
|
|
23
|
-
startSize: null | number
|
|
24
|
-
deltaOffset: null | number
|
|
25
|
-
deltaPercentage: null | number
|
|
26
|
-
isResizingColumn: false | string
|
|
27
|
-
columnSizingStart: [string, number][]
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export type ColumnSizingTableState = {
|
|
31
|
-
columnSizing: ColumnSizing
|
|
32
|
-
columnSizingInfo: ColumnSizingInfoState
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export type ColumnResizeMode = 'onChange' | 'onEnd'
|
|
36
|
-
|
|
37
|
-
export type ColumnSizingOptions = {
|
|
38
|
-
enableColumnResizing?: boolean
|
|
39
|
-
columnResizeMode?: ColumnResizeMode
|
|
40
|
-
onColumnSizingChange?: OnChangeFn<ColumnSizing>
|
|
41
|
-
onColumnSizingInfoChange?: OnChangeFn<ColumnSizingInfoState>
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export type ColumnSizingDefaultOptions = {
|
|
45
|
-
columnResizeMode: ColumnResizeMode
|
|
46
|
-
onColumnSizingChange: OnChangeFn<ColumnSizing>
|
|
47
|
-
onColumnSizingInfoChange: OnChangeFn<ColumnSizingInfoState>
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export type ColumnResizerProps = {
|
|
51
|
-
title?: string
|
|
52
|
-
onMouseDown?: (e: ReactMouseEvent) => void
|
|
53
|
-
onTouchStart?: (e: ReactTouchEvent) => void
|
|
54
|
-
draggable?: boolean
|
|
55
|
-
role?: string
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export type ColumnSizingInstance<TGenerics extends PartialGenerics> = {
|
|
59
|
-
setColumnSizing: (updater: Updater<ColumnSizing>) => void
|
|
60
|
-
setColumnSizingInfo: (updater: Updater<ColumnSizingInfoState>) => void
|
|
61
|
-
resetColumnSizing: () => void
|
|
62
|
-
resetColumnSize: (columnId: string) => void
|
|
63
|
-
resetHeaderSize: (headerId: string) => void
|
|
64
|
-
resetHeaderSizeInfo: () => void
|
|
65
|
-
getColumnCanResize: (columnId: string) => boolean
|
|
66
|
-
getHeaderCanResize: (headerId: string) => boolean
|
|
67
|
-
getHeaderResizerProps: <TGetter extends Getter<ColumnResizerProps>>(
|
|
68
|
-
headerId: string,
|
|
69
|
-
userProps?: TGetter
|
|
70
|
-
) => undefined | PropGetterValue<ColumnResizerProps, TGetter>
|
|
71
|
-
getColumnIsResizing: (columnId: string) => boolean
|
|
72
|
-
getHeaderIsResizing: (headerId: string) => boolean
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export type ColumnSizingColumnDef = {
|
|
76
|
-
enableResizing?: boolean
|
|
77
|
-
defaultCanResize?: boolean
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export type ColumnSizingColumn<TGenerics extends PartialGenerics> = {
|
|
81
|
-
getCanResize: () => boolean
|
|
82
|
-
getIsResizing: () => boolean
|
|
83
|
-
resetSize: () => void
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export type ColumnSizingHeader<TGenerics extends PartialGenerics> = {
|
|
87
|
-
getCanResize: () => boolean
|
|
88
|
-
getIsResizing: () => boolean
|
|
89
|
-
getResizerProps: <TGetter extends Getter<ColumnResizerProps>>(
|
|
90
|
-
userProps?: TGetter
|
|
91
|
-
) => undefined | PropGetterValue<ColumnResizerProps, TGetter>
|
|
92
|
-
resetSize: () => void
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
//
|
|
96
|
-
|
|
97
|
-
export const defaultColumnSizing = {
|
|
98
|
-
width: 150,
|
|
99
|
-
minWidth: 20,
|
|
100
|
-
maxWidth: Number.MAX_SAFE_INTEGER,
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export function getInitialState(): ColumnSizingTableState {
|
|
104
|
-
return {
|
|
105
|
-
columnSizing: {},
|
|
106
|
-
columnSizingInfo: {
|
|
107
|
-
startOffset: null,
|
|
108
|
-
startSize: null,
|
|
109
|
-
deltaOffset: null,
|
|
110
|
-
deltaPercentage: null,
|
|
111
|
-
isResizingColumn: false,
|
|
112
|
-
columnSizingStart: [],
|
|
113
|
-
},
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
export function getDefaultOptions<TGenerics extends PartialGenerics>(
|
|
118
|
-
instance: TableInstance<TGenerics>
|
|
119
|
-
): ColumnSizingDefaultOptions {
|
|
120
|
-
return {
|
|
121
|
-
columnResizeMode: 'onEnd',
|
|
122
|
-
onColumnSizingChange: makeStateUpdater('columnSizing', instance),
|
|
123
|
-
onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', instance),
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
export function getInstance<TGenerics extends PartialGenerics>(
|
|
128
|
-
instance: TableInstance<TGenerics>
|
|
129
|
-
): ColumnSizingInstance<TGenerics> {
|
|
130
|
-
return {
|
|
131
|
-
setColumnSizing: updater =>
|
|
132
|
-
instance.options.onColumnSizingChange?.(
|
|
133
|
-
updater,
|
|
134
|
-
functionalUpdate(updater, instance.getState().columnSizing)
|
|
135
|
-
),
|
|
136
|
-
setColumnSizingInfo: updater =>
|
|
137
|
-
instance.options.onColumnSizingInfoChange?.(
|
|
138
|
-
updater,
|
|
139
|
-
functionalUpdate(updater, instance.getState().columnSizingInfo)
|
|
140
|
-
),
|
|
141
|
-
resetColumnSizing: () => {
|
|
142
|
-
instance.setColumnSizing(instance.initialState.columnSizing ?? {})
|
|
143
|
-
},
|
|
144
|
-
resetHeaderSizeInfo: () => {
|
|
145
|
-
instance.setColumnSizingInfo(instance.initialState.columnSizingInfo ?? {})
|
|
146
|
-
},
|
|
147
|
-
resetColumnSize: columnId => {
|
|
148
|
-
instance.setColumnSizing(({ [columnId]: _, ...rest }) => {
|
|
149
|
-
return rest
|
|
150
|
-
})
|
|
151
|
-
},
|
|
152
|
-
resetHeaderSize: headerId => {
|
|
153
|
-
const header = instance.getHeader(headerId)
|
|
154
|
-
|
|
155
|
-
return instance.resetColumnSize(header.column.id)
|
|
156
|
-
},
|
|
157
|
-
getHeaderCanResize: headerId => {
|
|
158
|
-
const header = instance.getHeader(headerId)
|
|
159
|
-
|
|
160
|
-
if (!header) {
|
|
161
|
-
throw new Error()
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
return instance.getColumnCanResize(header.column.id)
|
|
165
|
-
},
|
|
166
|
-
getColumnCanResize: columnId => {
|
|
167
|
-
const column = instance.getColumn(columnId)
|
|
168
|
-
|
|
169
|
-
if (!column) {
|
|
170
|
-
throw new Error()
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
return (
|
|
174
|
-
column.enableResizing ??
|
|
175
|
-
instance.options.enableColumnResizing ??
|
|
176
|
-
column.defaultCanResize ??
|
|
177
|
-
true
|
|
178
|
-
)
|
|
179
|
-
},
|
|
180
|
-
getColumnIsResizing: columnId => {
|
|
181
|
-
const column = instance.getColumn(columnId)
|
|
182
|
-
|
|
183
|
-
if (!column) {
|
|
184
|
-
throw new Error()
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
return instance.getState().columnSizingInfo.isResizingColumn === columnId
|
|
188
|
-
},
|
|
189
|
-
getHeaderIsResizing: headerId => {
|
|
190
|
-
const header = instance.getHeader(headerId)
|
|
191
|
-
|
|
192
|
-
if (!header) {
|
|
193
|
-
throw new Error()
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
return instance.getColumnIsResizing(header.column.id)
|
|
197
|
-
},
|
|
198
|
-
|
|
199
|
-
getHeaderResizerProps: (headerId, userProps) => {
|
|
200
|
-
const header = instance.getHeader(headerId)
|
|
201
|
-
const column = instance.getColumn(header.column.id)
|
|
202
|
-
|
|
203
|
-
const canResize = column.getCanResize()
|
|
204
|
-
|
|
205
|
-
const onResizeStart = (e: ReactMouseEvent | ReactTouchEvent) => {
|
|
206
|
-
if (isTouchStartEvent(e)) {
|
|
207
|
-
// lets not respond to multiple touches (e.g. 2 or 3 fingers)
|
|
208
|
-
if (e.touches && e.touches.length > 1) {
|
|
209
|
-
return
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
const header = headerId ? instance.getHeader(headerId) : undefined
|
|
214
|
-
|
|
215
|
-
const startSize = header ? header.getWidth() : column.getWidth()
|
|
216
|
-
|
|
217
|
-
const columnSizingStart: [string, number][] = header
|
|
218
|
-
? header.getLeafHeaders().map(d => [d.column.id, d.getWidth()])
|
|
219
|
-
: [[column.id, column.getWidth()]]
|
|
220
|
-
|
|
221
|
-
const clientX = isTouchStartEvent(e)
|
|
222
|
-
? Math.round(e.touches[0].clientX)
|
|
223
|
-
: e.clientX
|
|
224
|
-
|
|
225
|
-
const updateOffset = (
|
|
226
|
-
eventType: 'move' | 'end',
|
|
227
|
-
clientXPos?: number
|
|
228
|
-
) => {
|
|
229
|
-
if (typeof clientXPos !== 'number') {
|
|
230
|
-
return
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
let newColumnSizing: ColumnSizing = {}
|
|
234
|
-
|
|
235
|
-
instance.setColumnSizingInfo(old => {
|
|
236
|
-
const deltaOffset = clientXPos - (old?.startOffset ?? 0)
|
|
237
|
-
const deltaPercentage = Math.max(
|
|
238
|
-
deltaOffset / (old?.startSize ?? 0),
|
|
239
|
-
-0.999999
|
|
240
|
-
)
|
|
241
|
-
|
|
242
|
-
old.columnSizingStart.forEach(([columnId, headerWidth]) => {
|
|
243
|
-
newColumnSizing[columnId] =
|
|
244
|
-
Math.round(
|
|
245
|
-
Math.max(headerWidth + headerWidth * deltaPercentage, 0) * 100
|
|
246
|
-
) / 100
|
|
247
|
-
})
|
|
248
|
-
|
|
249
|
-
return {
|
|
250
|
-
...old,
|
|
251
|
-
deltaOffset,
|
|
252
|
-
deltaPercentage,
|
|
253
|
-
}
|
|
254
|
-
})
|
|
255
|
-
|
|
256
|
-
if (
|
|
257
|
-
instance.options.columnResizeMode === 'onChange' ||
|
|
258
|
-
eventType === 'end'
|
|
259
|
-
) {
|
|
260
|
-
instance.setColumnSizing(old => ({
|
|
261
|
-
...old,
|
|
262
|
-
...newColumnSizing,
|
|
263
|
-
}))
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
const onMove = (clientXPos?: number) => updateOffset('move', clientXPos)
|
|
268
|
-
|
|
269
|
-
const onEnd = (clientXPos?: number) => {
|
|
270
|
-
updateOffset('end', clientXPos)
|
|
271
|
-
|
|
272
|
-
instance.setColumnSizingInfo(old => ({
|
|
273
|
-
...old,
|
|
274
|
-
isResizingColumn: false,
|
|
275
|
-
startOffset: null,
|
|
276
|
-
startSize: null,
|
|
277
|
-
deltaOffset: null,
|
|
278
|
-
deltaPercentage: null,
|
|
279
|
-
columnSizingStart: [],
|
|
280
|
-
}))
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
const mouseEvents = {
|
|
284
|
-
moveHandler: (e: MouseEvent) => onMove(e.clientX),
|
|
285
|
-
upHandler: (e: MouseEvent) => {
|
|
286
|
-
document.removeEventListener('mousemove', mouseEvents.moveHandler)
|
|
287
|
-
document.removeEventListener('mouseup', mouseEvents.upHandler)
|
|
288
|
-
onEnd(e.clientX)
|
|
289
|
-
},
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
const touchEvents = {
|
|
293
|
-
moveHandler: (e: TouchEvent) => {
|
|
294
|
-
if (e.cancelable) {
|
|
295
|
-
e.preventDefault()
|
|
296
|
-
e.stopPropagation()
|
|
297
|
-
}
|
|
298
|
-
onMove(e.touches[0].clientX)
|
|
299
|
-
return false
|
|
300
|
-
},
|
|
301
|
-
upHandler: (e: TouchEvent) => {
|
|
302
|
-
document.removeEventListener('touchmove', touchEvents.moveHandler)
|
|
303
|
-
document.removeEventListener('touchend', touchEvents.upHandler)
|
|
304
|
-
if (e.cancelable) {
|
|
305
|
-
e.preventDefault()
|
|
306
|
-
e.stopPropagation()
|
|
307
|
-
}
|
|
308
|
-
onEnd(e.touches[0].clientX)
|
|
309
|
-
},
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
const passiveIfSupported = passiveEventSupported()
|
|
313
|
-
? { passive: false }
|
|
314
|
-
: false
|
|
315
|
-
|
|
316
|
-
if (isTouchStartEvent(e)) {
|
|
317
|
-
document.addEventListener(
|
|
318
|
-
'touchmove',
|
|
319
|
-
touchEvents.moveHandler,
|
|
320
|
-
passiveIfSupported
|
|
321
|
-
)
|
|
322
|
-
document.addEventListener(
|
|
323
|
-
'touchend',
|
|
324
|
-
touchEvents.upHandler,
|
|
325
|
-
passiveIfSupported
|
|
326
|
-
)
|
|
327
|
-
} else {
|
|
328
|
-
document.addEventListener(
|
|
329
|
-
'mousemove',
|
|
330
|
-
mouseEvents.moveHandler,
|
|
331
|
-
passiveIfSupported
|
|
332
|
-
)
|
|
333
|
-
document.addEventListener(
|
|
334
|
-
'mouseup',
|
|
335
|
-
mouseEvents.upHandler,
|
|
336
|
-
passiveIfSupported
|
|
337
|
-
)
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
instance.setColumnSizingInfo(old => ({
|
|
341
|
-
...old,
|
|
342
|
-
startOffset: clientX,
|
|
343
|
-
startSize,
|
|
344
|
-
deltaOffset: 0,
|
|
345
|
-
deltaPercentage: 0,
|
|
346
|
-
columnSizingStart,
|
|
347
|
-
isResizingColumn: column.id,
|
|
348
|
-
}))
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
const initialProps: ColumnResizerProps = canResize
|
|
352
|
-
? {
|
|
353
|
-
title: 'Toggle Grouping',
|
|
354
|
-
draggable: false,
|
|
355
|
-
role: 'separator',
|
|
356
|
-
onMouseDown: (e: ReactMouseEvent) => {
|
|
357
|
-
e.persist()
|
|
358
|
-
onResizeStart(e)
|
|
359
|
-
},
|
|
360
|
-
onTouchStart: (e: ReactTouchEvent) => {
|
|
361
|
-
e.persist()
|
|
362
|
-
onResizeStart(e)
|
|
363
|
-
},
|
|
364
|
-
}
|
|
365
|
-
: {}
|
|
366
|
-
|
|
367
|
-
return propGetter(initialProps, userProps)
|
|
368
|
-
},
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
export function createColumn<TGenerics extends PartialGenerics>(
|
|
373
|
-
column: Column<TGenerics>,
|
|
374
|
-
instance: TableInstance<TGenerics>
|
|
375
|
-
): ColumnSizingColumn<TGenerics> {
|
|
376
|
-
return {
|
|
377
|
-
getIsResizing: () => instance.getColumnIsResizing(column.id),
|
|
378
|
-
getCanResize: () => instance.getColumnCanResize(column.id),
|
|
379
|
-
resetSize: () => instance.resetColumnSize(column.id),
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
export function createHeader<TGenerics extends PartialGenerics>(
|
|
384
|
-
header: Header<TGenerics>,
|
|
385
|
-
instance: TableInstance<TGenerics>
|
|
386
|
-
): ColumnSizingHeader<TGenerics> {
|
|
387
|
-
return {
|
|
388
|
-
getIsResizing: () => instance.getColumnIsResizing(header.column.id),
|
|
389
|
-
getCanResize: () => instance.getColumnCanResize(header.column.id),
|
|
390
|
-
resetSize: () => instance.resetColumnSize(header.column.id),
|
|
391
|
-
getResizerProps: userProps =>
|
|
392
|
-
instance.getHeaderResizerProps(header.id, userProps),
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
let passiveSupported: boolean | null = null
|
|
397
|
-
export function passiveEventSupported() {
|
|
398
|
-
if (typeof passiveSupported === 'boolean') return passiveSupported
|
|
399
|
-
|
|
400
|
-
let supported = false
|
|
401
|
-
try {
|
|
402
|
-
const options = {
|
|
403
|
-
get passive() {
|
|
404
|
-
supported = true
|
|
405
|
-
return false
|
|
406
|
-
},
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
const noop = () => {}
|
|
410
|
-
|
|
411
|
-
window.addEventListener('test', noop, options)
|
|
412
|
-
window.removeEventListener('test', noop)
|
|
413
|
-
} catch (err) {
|
|
414
|
-
supported = false
|
|
415
|
-
}
|
|
416
|
-
passiveSupported = supported
|
|
417
|
-
return passiveSupported
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
function isTouchStartEvent(
|
|
421
|
-
e: ReactTouchEvent | ReactMouseEvent
|
|
422
|
-
): e is ReactTouchEvent {
|
|
423
|
-
return e.type === 'touchstart'
|
|
424
|
-
}
|