@tanstack/react-table 8.0.0-alpha.7 → 8.0.0-alpha.72

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 +133 -0
  2. package/build/cjs/react-table/src/index.js.map +1 -0
  3. package/build/cjs/table-core/build/esm/index.js +4049 -0
  4. package/build/cjs/table-core/build/esm/index.js.map +1 -0
  5. package/build/esm/index.js +3357 -4071
  6. package/build/esm/index.js.map +1 -1
  7. package/build/stats-html.html +1 -1
  8. package/build/stats-react.json +24 -783
  9. package/build/types/index.d.ts +16 -8
  10. package/build/umd/index.development.js +3396 -4080
  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 +5 -1
  15. package/src/index.tsx +113 -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 -552
  21. package/build/cjs/core.js.map +0 -1
  22. package/build/cjs/createTable.js +0 -122
  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 -109
  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 -1091
  92. package/src/createTable.tsx +0 -264
  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,264 +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
- export type TableHelper<
15
- TData,
16
- TValue,
17
- TFilterFns,
18
- TSortingFns,
19
- TAggregationFns
20
- > = {
21
- RowType<TTData>(): TableHelper<
22
- TTData,
23
- TValue,
24
- TFilterFns,
25
- TSortingFns,
26
- TAggregationFns
27
- >
28
-
29
- FilterFns: <TTFilterFns>(
30
- filterFns: TTFilterFns
31
- ) => TableHelper<TData, TValue, TTFilterFns, TSortingFns, TAggregationFns>
32
-
33
- SortingFns: <TTSortingFns>(
34
- sortingFns: TTSortingFns
35
- ) => TableHelper<TData, TValue, TFilterFns, TTSortingFns, TAggregationFns>
36
-
37
- AggregationFns: <TTAggregationFns>(
38
- aggregationFns: TTAggregationFns
39
- ) => TableHelper<TData, TValue, TFilterFns, TSortingFns, TTAggregationFns>
40
-
41
- createColumns: (
42
- columns: ColumnDef<
43
- TData,
44
- TValue,
45
- TFilterFns,
46
- TSortingFns,
47
- TAggregationFns
48
- >[]
49
- ) => ColumnDef<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]
50
-
51
- createGroup: (
52
- column: Overwrite<
53
- ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>,
54
- | {
55
- __generated?: never
56
- accessorFn?: never
57
- accessorKey?: never
58
- header: string
59
- id?: string
60
- }
61
- | {
62
- __generated?: never
63
- accessorFn?: never
64
- accessorKey?: never
65
- id: string
66
- header?:
67
- | string
68
- | Renderable<{
69
- instance: ReactTable<
70
- TData,
71
- TValue,
72
- TFilterFns,
73
- TSortingFns,
74
- TAggregationFns
75
- >
76
- header: Header<
77
- TData,
78
- TValue,
79
- TFilterFns,
80
- TSortingFns,
81
- TAggregationFns
82
- >
83
- column: Column<
84
- TData,
85
- TValue,
86
- TFilterFns,
87
- TSortingFns,
88
- TAggregationFns
89
- >
90
- }>
91
- }
92
- >
93
- ) => ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>
94
-
95
- createDisplayColumn: (
96
- column: Overwrite<
97
- ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>,
98
- { __generated?: never; accessorFn?: never; accessorKey?: never }
99
- >
100
- ) => ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>
101
-
102
- createDataColumn: <TAccessor extends AccessorFn<TData> | keyof TData>(
103
- accessor: TAccessor,
104
- column: TAccessor extends (...args: any[]) => any
105
- ? // Accessor Fn
106
- Overwrite<
107
- ColumnDef<
108
- TData,
109
- ReturnType<TAccessor>,
110
- TFilterFns,
111
- TSortingFns,
112
- TAggregationFns
113
- >,
114
- {
115
- __generated?: never
116
- accessorFn?: never
117
- accessorKey?: never
118
- id: string
119
- }
120
- >
121
- : TAccessor extends keyof TData
122
- ? // Accessor Key
123
- Overwrite<
124
- ColumnDef<
125
- TData,
126
- TData[TAccessor],
127
- TFilterFns,
128
- TSortingFns,
129
- TAggregationFns
130
- >,
131
- {
132
- __generated?: never
133
- accessorFn?: never
134
- accessorKey?: never
135
- id?: string
136
- }
137
- >
138
- : never
139
- ) => ColumnDef<
140
- TData,
141
- TAccessor extends (...args: any[]) => any
142
- ? ReturnType<TAccessor>
143
- : TAccessor extends keyof TData
144
- ? TData[TAccessor]
145
- : never,
146
- TFilterFns,
147
- TSortingFns,
148
- TAggregationFns
149
- >
150
-
151
- useTable: <TData, TValue, TFilterFns, TSortingFns, TAggregationFns>(
152
- options: Options<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
153
- ) => ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
154
-
155
- types: {
156
- instance: ReactTable<
157
- TData,
158
- TValue,
159
- TFilterFns,
160
- TSortingFns,
161
- TAggregationFns
162
- >
163
- columnDef: ColumnDef<
164
- TData,
165
- TValue,
166
- TFilterFns,
167
- TSortingFns,
168
- TAggregationFns
169
- >
170
- column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
171
- row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
172
- cell: Cell<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
173
- }
174
- }
175
-
176
- export function createTable<
177
- TData,
178
- TValue,
179
- TFilterFns,
180
- TSortingFns,
181
- TAggregationFns
182
- >(): TableHelper<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {
183
- return {
184
- RowType: () => createTable(),
185
- FilterFns: () => createTable(),
186
- SortingFns: () => createTable(),
187
- AggregationFns: () => createTable(),
188
- createColumns: columns => columns,
189
- createDisplayColumn: column => ({
190
- ...column,
191
- __generated: true,
192
- }),
193
- createGroup: column => ({
194
- ...column,
195
- __generated: true,
196
- }),
197
- createDataColumn: (accessor, column) => {
198
- column = {
199
- ...column,
200
- id: column.id,
201
- }
202
-
203
- if (typeof accessor === 'string') {
204
- return {
205
- ...column,
206
- id: column.id ?? accessor,
207
- accessorKey: accessor,
208
- __generated: true,
209
- }
210
- }
211
-
212
- if (typeof accessor === 'function') {
213
- return {
214
- ...column,
215
- accessorFn: accessor,
216
- __generated: true,
217
- }
218
- }
219
-
220
- throw new Error('Invalid accessor')
221
- },
222
- useTable: <TData, TValue, TFilterFns, TSortingFns, TAggregationFns>(
223
- options: Options<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
224
- ): ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> => {
225
- const instanceRef = React.useRef<
226
- ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
227
- >(undefined!)
228
-
229
- const unsafeRerender = React.useReducer(() => ({}), {})[1]
230
-
231
- const isMountedRef = React.useRef(false)
232
-
233
- const rerender = React.useCallback(() => {
234
- if (!isMountedRef.current) {
235
- return
236
- }
237
-
238
- unsafeRerender()
239
- }, [])
240
-
241
- React.useLayoutEffect(() => {
242
- isMountedRef.current = true
243
- return () => {
244
- isMountedRef.current = false
245
- }
246
- })
247
-
248
- if (!instanceRef.current) {
249
- instanceRef.current = createTableInstance<
250
- TData,
251
- TValue,
252
- TFilterFns,
253
- TSortingFns,
254
- TAggregationFns
255
- >(options, rerender)
256
- }
257
-
258
- instanceRef.current.updateOptions(options)
259
-
260
- return instanceRef.current
261
- },
262
- types: undefined as any,
263
- } as TableHelper<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
264
- }
@@ -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
- }