@tanstack/react-table 8.0.0-alpha.4 → 8.0.0-alpha.42

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