@tanstack/react-table 8.0.0-alpha.8 → 8.0.0-alpha.83

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 (113) hide show
  1. package/build/cjs/react-table/src/index.js +138 -0
  2. package/build/cjs/react-table/src/index.js.map +1 -0
  3. package/build/cjs/table-core/build/esm/index.js +3982 -0
  4. package/build/cjs/table-core/build/esm/index.js.map +1 -0
  5. package/build/esm/index.js +3269 -4049
  6. package/build/esm/index.js.map +1 -1
  7. package/build/stats-html.html +1 -1
  8. package/build/stats-react.json +24 -797
  9. package/build/types/index.d.ts +16 -8
  10. package/build/umd/index.development.js +3375 -4119
  11. package/build/umd/index.development.js.map +1 -1
  12. package/build/umd/index.production.js +11 -1
  13. package/build/umd/index.production.js.map +1 -1
  14. package/package.json +7 -9
  15. package/src/index.tsx +111 -8
  16. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  17. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  18. package/build/cjs/aggregationTypes.js +0 -130
  19. package/build/cjs/aggregationTypes.js.map +0 -1
  20. package/build/cjs/core.js +0 -560
  21. package/build/cjs/core.js.map +0 -1
  22. package/build/cjs/createTable.js +0 -108
  23. package/build/cjs/createTable.js.map +0 -1
  24. package/build/cjs/features/ColumnSizing.js +0 -317
  25. package/build/cjs/features/ColumnSizing.js.map +0 -1
  26. package/build/cjs/features/Expanding.js +0 -251
  27. package/build/cjs/features/Expanding.js.map +0 -1
  28. package/build/cjs/features/Filters.js +0 -445
  29. package/build/cjs/features/Filters.js.map +0 -1
  30. package/build/cjs/features/Grouping.js +0 -249
  31. package/build/cjs/features/Grouping.js.map +0 -1
  32. package/build/cjs/features/Headers.js +0 -549
  33. package/build/cjs/features/Headers.js.map +0 -1
  34. package/build/cjs/features/Ordering.js +0 -86
  35. package/build/cjs/features/Ordering.js.map +0 -1
  36. package/build/cjs/features/Pagination.js +0 -198
  37. package/build/cjs/features/Pagination.js.map +0 -1
  38. package/build/cjs/features/Pinning.js +0 -149
  39. package/build/cjs/features/Pinning.js.map +0 -1
  40. package/build/cjs/features/RowSelection.js +0 -541
  41. package/build/cjs/features/RowSelection.js.map +0 -1
  42. package/build/cjs/features/Sorting.js +0 -327
  43. package/build/cjs/features/Sorting.js.map +0 -1
  44. package/build/cjs/features/Visibility.js +0 -166
  45. package/build/cjs/features/Visibility.js.map +0 -1
  46. package/build/cjs/filterTypes.js +0 -172
  47. package/build/cjs/filterTypes.js.map +0 -1
  48. package/build/cjs/index.js +0 -32
  49. package/build/cjs/index.js.map +0 -1
  50. package/build/cjs/sortTypes.js +0 -122
  51. package/build/cjs/sortTypes.js.map +0 -1
  52. package/build/cjs/utils/columnFilterRowsFn.js +0 -131
  53. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  54. package/build/cjs/utils/expandRowsFn.js +0 -38
  55. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  56. package/build/cjs/utils/globalFilterRowsFn.js +0 -101
  57. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  58. package/build/cjs/utils/groupRowsFn.js +0 -155
  59. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  60. package/build/cjs/utils/paginateRowsFn.js +0 -44
  61. package/build/cjs/utils/paginateRowsFn.js.map +0 -1
  62. package/build/cjs/utils/sortRowsFn.js +0 -94
  63. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  64. package/build/cjs/utils.js +0 -141
  65. package/build/cjs/utils.js.map +0 -1
  66. package/build/types/aggregationTypes.d.ts +0 -22
  67. package/build/types/core.d.ts +0 -110
  68. package/build/types/createTable.d.ts +0 -52
  69. package/build/types/features/ColumnSizing.d.ts +0 -67
  70. package/build/types/features/Expanding.d.ts +0 -53
  71. package/build/types/features/Filters.d.ts +0 -98
  72. package/build/types/features/Grouping.d.ts +0 -82
  73. package/build/types/features/Headers.d.ts +0 -41
  74. package/build/types/features/Ordering.d.ts +0 -19
  75. package/build/types/features/Pagination.d.ts +0 -44
  76. package/build/types/features/Pinning.d.ts +0 -39
  77. package/build/types/features/RowSelection.d.ts +0 -66
  78. package/build/types/features/Sorting.d.ts +0 -78
  79. package/build/types/features/Visibility.d.ts +0 -47
  80. package/build/types/filterTypes.d.ts +0 -50
  81. package/build/types/sortTypes.d.ts +0 -18
  82. package/build/types/types.d.ts +0 -127
  83. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  84. package/build/types/utils/expandRowsFn.d.ts +0 -2
  85. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  86. package/build/types/utils/groupRowsFn.d.ts +0 -2
  87. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  88. package/build/types/utils/sortRowsFn.d.ts +0 -2
  89. package/build/types/utils.d.ts +0 -24
  90. package/src/aggregationTypes.ts +0 -115
  91. package/src/core.tsx +0 -1096
  92. package/src/createTable.tsx +0 -244
  93. package/src/features/ColumnSizing.ts +0 -453
  94. package/src/features/Expanding.ts +0 -406
  95. package/src/features/Filters.ts +0 -762
  96. package/src/features/Grouping.ts +0 -466
  97. package/src/features/Headers.ts +0 -912
  98. package/src/features/Ordering.ts +0 -133
  99. package/src/features/Pagination.ts +0 -325
  100. package/src/features/Pinning.ts +0 -198
  101. package/src/features/RowSelection.ts +0 -831
  102. package/src/features/Sorting.ts +0 -547
  103. package/src/features/Visibility.ts +0 -279
  104. package/src/filterTypes.ts +0 -251
  105. package/src/sortTypes.ts +0 -159
  106. package/src/types.ts +0 -331
  107. package/src/utils/columnFilterRowsFn.ts +0 -155
  108. package/src/utils/expandRowsFn.ts +0 -50
  109. package/src/utils/globalFilterRowsFn.ts +0 -122
  110. package/src/utils/groupRowsFn.ts +0 -194
  111. package/src/utils/paginateRowsFn.ts +0 -34
  112. package/src/utils/sortRowsFn.ts +0 -115
  113. package/src/utils.tsx +0 -195
@@ -1,244 +0,0 @@
1
- import * as React from 'react'
2
- import { useSyncExternalStore } from 'use-sync-external-store/shim'
3
- import { Cell, Column, Row } from '.'
4
- import { createTableInstance } from './core'
5
- import {
6
- ReactTable,
7
- ColumnDef,
8
- AccessorFn,
9
- Options,
10
- Renderable,
11
- Header,
12
- } from './types'
13
- import { Overwrite } from './utils'
14
-
15
- export type TableHelper<
16
- TData,
17
- TValue,
18
- TFilterFns,
19
- TSortingFns,
20
- TAggregationFns
21
- > = {
22
- RowType<TTData>(): TableHelper<
23
- TTData,
24
- TValue,
25
- TFilterFns,
26
- TSortingFns,
27
- TAggregationFns
28
- >
29
-
30
- FilterFns: <TTFilterFns>(
31
- filterFns: TTFilterFns
32
- ) => TableHelper<TData, TValue, TTFilterFns, TSortingFns, TAggregationFns>
33
-
34
- SortingFns: <TTSortingFns>(
35
- sortingFns: TTSortingFns
36
- ) => TableHelper<TData, TValue, TFilterFns, TTSortingFns, TAggregationFns>
37
-
38
- AggregationFns: <TTAggregationFns>(
39
- aggregationFns: TTAggregationFns
40
- ) => TableHelper<TData, TValue, TFilterFns, TSortingFns, TTAggregationFns>
41
-
42
- createColumns: (
43
- columns: ColumnDef<
44
- TData,
45
- TValue,
46
- TFilterFns,
47
- TSortingFns,
48
- TAggregationFns
49
- >[]
50
- ) => ColumnDef<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]
51
-
52
- createGroup: (
53
- column: Overwrite<
54
- ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>,
55
- | {
56
- __generated?: never
57
- accessorFn?: never
58
- accessorKey?: never
59
- header: string
60
- id?: string
61
- }
62
- | {
63
- __generated?: never
64
- accessorFn?: never
65
- accessorKey?: never
66
- id: string
67
- header?:
68
- | string
69
- | Renderable<{
70
- instance: ReactTable<
71
- TData,
72
- TValue,
73
- TFilterFns,
74
- TSortingFns,
75
- TAggregationFns
76
- >
77
- header: Header<
78
- TData,
79
- TValue,
80
- TFilterFns,
81
- TSortingFns,
82
- TAggregationFns
83
- >
84
- column: Column<
85
- TData,
86
- TValue,
87
- TFilterFns,
88
- TSortingFns,
89
- TAggregationFns
90
- >
91
- }>
92
- }
93
- >
94
- ) => ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>
95
-
96
- createDisplayColumn: (
97
- column: Overwrite<
98
- ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>,
99
- { __generated?: never; accessorFn?: never; accessorKey?: never }
100
- >
101
- ) => ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>
102
-
103
- createDataColumn: <TAccessor extends AccessorFn<TData> | keyof TData>(
104
- accessor: TAccessor,
105
- column: TAccessor extends (...args: any[]) => any
106
- ? // Accessor Fn
107
- Overwrite<
108
- ColumnDef<
109
- TData,
110
- ReturnType<TAccessor>,
111
- TFilterFns,
112
- TSortingFns,
113
- TAggregationFns
114
- >,
115
- {
116
- __generated?: never
117
- accessorFn?: never
118
- accessorKey?: never
119
- id: string
120
- }
121
- >
122
- : TAccessor extends keyof TData
123
- ? // Accessor Key
124
- Overwrite<
125
- ColumnDef<
126
- TData,
127
- TData[TAccessor],
128
- TFilterFns,
129
- TSortingFns,
130
- TAggregationFns
131
- >,
132
- {
133
- __generated?: never
134
- accessorFn?: never
135
- accessorKey?: never
136
- id?: string
137
- }
138
- >
139
- : never
140
- ) => ColumnDef<
141
- TData,
142
- TAccessor extends (...args: any[]) => any
143
- ? ReturnType<TAccessor>
144
- : TAccessor extends keyof TData
145
- ? TData[TAccessor]
146
- : never,
147
- TFilterFns,
148
- TSortingFns,
149
- TAggregationFns
150
- >
151
-
152
- useTable: <TData, TValue, TFilterFns, TSortingFns, TAggregationFns>(
153
- options: Options<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
154
- ) => ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
155
-
156
- types: {
157
- instance: ReactTable<
158
- TData,
159
- TValue,
160
- TFilterFns,
161
- TSortingFns,
162
- TAggregationFns
163
- >
164
- columnDef: ColumnDef<
165
- TData,
166
- TValue,
167
- TFilterFns,
168
- TSortingFns,
169
- TAggregationFns
170
- >
171
- column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
172
- row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
173
- cell: Cell<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
174
- }
175
- }
176
-
177
- export function createTable<
178
- TData,
179
- TValue,
180
- TFilterFns,
181
- TSortingFns,
182
- TAggregationFns
183
- >(): TableHelper<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {
184
- return {
185
- RowType: () => createTable(),
186
- FilterFns: () => createTable(),
187
- SortingFns: () => createTable(),
188
- AggregationFns: () => createTable(),
189
- createColumns: columns => columns,
190
- createDisplayColumn: column => ({
191
- ...column,
192
- __generated: true,
193
- }),
194
- createGroup: column => ({
195
- ...column,
196
- __generated: true,
197
- }),
198
- createDataColumn: (accessor, column) => {
199
- column = {
200
- ...column,
201
- id: column.id,
202
- }
203
-
204
- if (typeof accessor === 'string') {
205
- return {
206
- ...column,
207
- id: column.id ?? accessor,
208
- accessorKey: accessor,
209
- __generated: true,
210
- }
211
- }
212
-
213
- if (typeof accessor === 'function') {
214
- return {
215
- ...column,
216
- accessorFn: accessor,
217
- __generated: true,
218
- }
219
- }
220
-
221
- throw new Error('Invalid accessor')
222
- },
223
- useTable: <TData, TValue, TFilterFns, TSortingFns, TAggregationFns>(
224
- options: Options<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
225
- ): ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> => {
226
- const [instance] = React.useState(() =>
227
- createTableInstance<
228
- TData,
229
- TValue,
230
- TFilterFns,
231
- TSortingFns,
232
- TAggregationFns
233
- >(options)
234
- )
235
-
236
- useSyncExternalStore(instance.subscribe, () => instance.internalState)
237
-
238
- instance.updateOptions(options)
239
-
240
- return instance
241
- },
242
- types: undefined as any,
243
- } as TableHelper<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
244
- }
@@ -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
- }