@tanstack/react-table 8.0.0-alpha.6 → 8.0.0-alpha.9

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 (96) hide show
  1. package/build/cjs/core.js +66 -73
  2. package/build/cjs/core.js.map +1 -1
  3. package/build/cjs/createTable.js +47 -33
  4. package/build/cjs/createTable.js.map +1 -1
  5. package/build/cjs/features/ColumnSizing.js +23 -22
  6. package/build/cjs/features/ColumnSizing.js.map +1 -1
  7. package/build/cjs/features/Expanding.js +10 -22
  8. package/build/cjs/features/Expanding.js.map +1 -1
  9. package/build/cjs/features/Filters.js +27 -58
  10. package/build/cjs/features/Filters.js.map +1 -1
  11. package/build/cjs/features/Grouping.js +10 -27
  12. package/build/cjs/features/Grouping.js.map +1 -1
  13. package/build/cjs/features/Headers.js +108 -28
  14. package/build/cjs/features/Headers.js.map +1 -1
  15. package/build/cjs/features/Ordering.js +2 -2
  16. package/build/cjs/features/Ordering.js.map +1 -1
  17. package/build/cjs/features/Pagination.js +24 -29
  18. package/build/cjs/features/Pagination.js.map +1 -1
  19. package/build/cjs/features/Pinning.js.map +1 -1
  20. package/build/cjs/features/RowSelection.js +23 -38
  21. package/build/cjs/features/RowSelection.js.map +1 -1
  22. package/build/cjs/features/Sorting.js +10 -22
  23. package/build/cjs/features/Sorting.js.map +1 -1
  24. package/build/cjs/features/Visibility.js +10 -2
  25. package/build/cjs/features/Visibility.js.map +1 -1
  26. package/build/cjs/filterTypes.js.map +1 -1
  27. package/build/cjs/index.js +12 -0
  28. package/build/cjs/index.js.map +1 -1
  29. package/build/cjs/sortTypes.js.map +1 -1
  30. package/build/cjs/types.js +22 -0
  31. package/build/cjs/types.js.map +1 -0
  32. package/build/cjs/utils/columnFilterRowsFn.js.map +1 -1
  33. package/build/cjs/utils/expandRowsFn.js.map +1 -1
  34. package/build/cjs/utils/globalFilterRowsFn.js.map +1 -1
  35. package/build/cjs/utils/groupRowsFn.js.map +1 -1
  36. package/build/cjs/utils/paginateRowsFn.js.map +1 -1
  37. package/build/cjs/utils/sortRowsFn.js.map +1 -1
  38. package/build/cjs/utils.js +44 -18
  39. package/build/cjs/utils.js.map +1 -1
  40. package/build/esm/index.js +1388 -1355
  41. package/build/esm/index.js.map +1 -1
  42. package/build/stats-html.html +1 -1
  43. package/build/stats-react.json +337 -307
  44. package/build/types/core.d.ts +63 -67
  45. package/build/types/createTable.d.ts +34 -44
  46. package/build/types/features/ColumnSizing.d.ts +13 -7
  47. package/build/types/features/Expanding.d.ts +11 -16
  48. package/build/types/features/Filters.d.ts +39 -47
  49. package/build/types/features/Grouping.d.ts +28 -27
  50. package/build/types/features/Headers.d.ts +30 -30
  51. package/build/types/features/Ordering.d.ts +5 -5
  52. package/build/types/features/Pagination.d.ts +11 -16
  53. package/build/types/features/Pinning.d.ts +5 -5
  54. package/build/types/features/RowSelection.d.ts +15 -23
  55. package/build/types/features/Sorting.d.ts +26 -25
  56. package/build/types/features/Visibility.d.ts +9 -9
  57. package/build/types/filterTypes.d.ts +10 -10
  58. package/build/types/index.d.ts +1 -0
  59. package/build/types/sortTypes.d.ts +7 -7
  60. package/build/types/types.d.ts +34 -23
  61. package/build/types/utils/columnFilterRowsFn.d.ts +2 -2
  62. package/build/types/utils/expandRowsFn.d.ts +2 -2
  63. package/build/types/utils/globalFilterRowsFn.d.ts +2 -2
  64. package/build/types/utils/groupRowsFn.d.ts +2 -2
  65. package/build/types/utils/paginateRowsFn.d.ts +2 -2
  66. package/build/types/utils/sortRowsFn.d.ts +2 -2
  67. package/build/types/utils.d.ts +5 -6
  68. package/build/umd/index.development.js +1397 -1354
  69. package/build/umd/index.development.js.map +1 -1
  70. package/build/umd/index.production.js +1 -1
  71. package/build/umd/index.production.js.map +1 -1
  72. package/package.json +1 -1
  73. package/src/core.tsx +192 -520
  74. package/src/createTable.tsx +137 -192
  75. package/src/features/ColumnSizing.ts +48 -77
  76. package/src/features/Expanding.ts +25 -113
  77. package/src/features/Filters.ts +91 -293
  78. package/src/features/Grouping.ts +60 -165
  79. package/src/features/Headers.ts +148 -331
  80. package/src/features/Ordering.ts +19 -42
  81. package/src/features/Pagination.ts +35 -110
  82. package/src/features/Pinning.ts +16 -40
  83. package/src/features/RowSelection.ts +47 -227
  84. package/src/features/Sorting.ts +49 -143
  85. package/src/features/Visibility.ts +23 -64
  86. package/src/filterTypes.ts +19 -82
  87. package/src/index.tsx +1 -0
  88. package/src/sortTypes.ts +19 -31
  89. package/src/types.ts +80 -100
  90. package/src/utils/columnFilterRowsFn.ts +11 -53
  91. package/src/utils/expandRowsFn.ts +7 -27
  92. package/src/utils/globalFilterRowsFn.ts +10 -43
  93. package/src/utils/groupRowsFn.ts +13 -37
  94. package/src/utils/paginateRowsFn.ts +5 -11
  95. package/src/utils/sortRowsFn.ts +8 -28
  96. package/src/utils.tsx +61 -35
@@ -1,194 +1,124 @@
1
1
  import * as React from 'react'
2
- import { Cell, Column, Row } from '.'
3
2
  import { createTableInstance } from './core'
3
+ import { CustomFilterTypes } from './features/Filters'
4
+ import { CustomAggregationTypes } from './features/Grouping'
5
+ import { CustomSortingTypes } from './features/Sorting'
4
6
  import {
5
- ReactTable,
7
+ TableInstance,
6
8
  ColumnDef,
7
9
  AccessorFn,
8
10
  Options,
9
- Renderable,
10
- Header,
11
+ DefaultGenerics,
12
+ PartialGenerics,
13
+ _NonGenerated,
11
14
  } from './types'
12
- import { Overwrite } from './utils'
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
+ }
13
30
 
14
- export type TableHelper<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> = {
15
- RowType<TTData>(): TableHelper<
16
- TTData,
17
- TValue,
18
- TFilterFns,
19
- TSortingFns,
20
- TAggregationFns
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
+ }
21
45
  >
46
+ > {
47
+ return () => _createTable(undefined, undefined, opts)
48
+ }
22
49
 
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
-
50
+ export type CreateTable<TGenerics extends Partial<DefaultGenerics>> = {
51
+ createColumns: (columns: ColumnDef<TGenerics>[]) => ColumnDef<TGenerics>[]
45
52
  createGroup: (
46
53
  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
- >,
54
+ | Overwrite<
55
+ _NonGenerated<ColumnDef<TGenerics>>,
108
56
  {
109
- __generated?: never
110
- accessorFn?: never
111
- accessorKey?: never
112
- id: string
57
+ header: string
58
+ id?: string
113
59
  }
114
60
  >
115
- : TAccessor extends keyof TData
116
- ? // Accessor Key
117
- Overwrite<
118
- ColumnDef<
119
- TData,
120
- TData[TAccessor],
121
- TFilterFns,
122
- TSortingFns,
123
- TAggregationFns
124
- >,
61
+ | Overwrite<
62
+ _NonGenerated<ColumnDef<TGenerics>>,
125
63
  {
126
- __generated?: never
127
- accessorFn?: never
128
- accessorKey?: never
129
- id?: string
64
+ id: string
65
+ header?: string | ColumnDef<TGenerics>['header']
130
66
  }
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
67
+ >,
68
+ { accessorFn?: never; accessorKey?: never }
156
69
  >
157
- columnDef: ColumnDef<
158
- TData,
159
- TValue,
160
- TFilterFns,
161
- TSortingFns,
162
- TAggregationFns
70
+ ) => ColumnDef<TGenerics>
71
+ createDisplayColumn: (
72
+ column: PartialKeys<
73
+ _NonGenerated<ColumnDef<TGenerics>>,
74
+ 'accessorFn' | 'accessorKey'
163
75
  >
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
- }
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 }>>()
168
110
  }
169
111
 
170
- export function createTable<
171
- TData,
172
- TValue,
173
- TFilterFns,
174
- TSortingFns,
175
- TAggregationFns
176
- >(): TableHelper<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {
112
+ function _createTable<TGenerics extends PartialGenerics>(
113
+ _?: undefined,
114
+ __?: undefined,
115
+ opts?: CreateTableOptions<any, any, any>
116
+ ): CreateTable<TGenerics> {
177
117
  return {
178
- RowType: () => createTable(),
179
- FilterFns: () => createTable(),
180
- SortingFns: () => createTable(),
181
- AggregationFns: () => createTable(),
182
118
  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) => {
119
+ createDisplayColumn: column => column as any,
120
+ createGroup: column => column as any,
121
+ createDataColumn: (accessor, column): any => {
192
122
  column = {
193
123
  ...column,
194
124
  id: column.id,
@@ -199,7 +129,6 @@ export function createTable<
199
129
  ...column,
200
130
  id: column.id ?? accessor,
201
131
  accessorKey: accessor,
202
- __generated: true,
203
132
  }
204
133
  }
205
134
 
@@ -207,35 +136,51 @@ export function createTable<
207
136
  return {
208
137
  ...column,
209
138
  accessorFn: accessor,
210
- __generated: true,
211
139
  }
212
140
  }
213
141
 
214
142
  throw new Error('Invalid accessor')
215
143
  },
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)
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,
233
156
  }
234
157
 
235
- instanceRef.current.updateOptions(options)
236
-
237
- return instanceRef.current
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
238
184
  },
239
- types: undefined as any,
240
- } as TableHelper<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
185
+ }
241
186
  }
@@ -1,8 +1,5 @@
1
- import React, {
2
- ComponentProps,
1
+ import {
3
2
  MouseEvent as ReactMouseEvent,
4
- PropsWithoutRef,
5
- PropsWithRef,
6
3
  TouchEvent as ReactTouchEvent,
7
4
  } from 'react'
8
5
  import {
@@ -10,8 +7,9 @@ import {
10
7
  Getter,
11
8
  Header,
12
9
  OnChangeFn,
10
+ PartialGenerics,
13
11
  PropGetterValue,
14
- ReactTable,
12
+ TableInstance,
15
13
  Updater,
16
14
  } from '../types'
17
15
  import { functionalUpdate, makeStateUpdater, memo, propGetter } from '../utils'
@@ -57,13 +55,7 @@ export type ColumnResizerProps = {
57
55
  role?: string
58
56
  }
59
57
 
60
- export type ColumnSizingInstance<
61
- TData,
62
- TValue,
63
- TFilterFns,
64
- TSortingFns,
65
- TAggregationFns
66
- > = {
58
+ export type ColumnSizingInstance<TGenerics extends PartialGenerics> = {
67
59
  setColumnSizing: (updater: Updater<ColumnSizing>) => void
68
60
  setColumnSizingInfo: (updater: Updater<ColumnSizingInfoState>) => void
69
61
  resetColumnSizing: () => void
@@ -72,8 +64,8 @@ export type ColumnSizingInstance<
72
64
  resetHeaderSizeInfo: () => void
73
65
  getColumnCanResize: (columnId: string) => boolean
74
66
  getHeaderCanResize: (headerId: string) => boolean
75
- getColumnResizerProps: <TGetter extends Getter<ColumnResizerProps>>(
76
- columnId: string,
67
+ getHeaderResizerProps: <TGetter extends Getter<ColumnResizerProps>>(
68
+ headerId: string,
77
69
  userProps?: TGetter
78
70
  ) => undefined | PropGetterValue<ColumnResizerProps, TGetter>
79
71
  getColumnIsResizing: (columnId: string) => boolean
@@ -85,13 +77,13 @@ export type ColumnSizingColumnDef = {
85
77
  defaultCanResize?: boolean
86
78
  }
87
79
 
88
- export type ColumnSizingColumn<
89
- TData,
90
- TValue,
91
- TFilterFns,
92
- TSortingFns,
93
- TAggregationFns
94
- > = {
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> = {
95
87
  getCanResize: () => boolean
96
88
  getIsResizing: () => boolean
97
89
  getResizerProps: <TGetter extends Getter<ColumnResizerProps>>(
@@ -122,14 +114,8 @@ export function getInitialState(): ColumnSizingTableState {
122
114
  }
123
115
  }
124
116
 
125
- export function getDefaultOptions<
126
- TData,
127
- TValue,
128
- TFilterFns,
129
- TSortingFns,
130
- TAggregationFns
131
- >(
132
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
117
+ export function getDefaultOptions<TGenerics extends PartialGenerics>(
118
+ instance: TableInstance<TGenerics>
133
119
  ): ColumnSizingDefaultOptions {
134
120
  return {
135
121
  columnResizeMode: 'onEnd',
@@ -138,21 +124,9 @@ export function getDefaultOptions<
138
124
  }
139
125
  }
140
126
 
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
- > {
127
+ export function getInstance<TGenerics extends PartialGenerics>(
128
+ instance: TableInstance<TGenerics>
129
+ ): ColumnSizingInstance<TGenerics> {
156
130
  return {
157
131
  setColumnSizing: updater =>
158
132
  instance.options.onColumnSizingChange?.(
@@ -178,10 +152,6 @@ export function getInstance<
178
152
  resetHeaderSize: headerId => {
179
153
  const header = instance.getHeader(headerId)
180
154
 
181
- if (!header) {
182
- return
183
- }
184
-
185
155
  return instance.resetColumnSize(header.column.id)
186
156
  },
187
157
  getHeaderCanResize: headerId => {
@@ -225,19 +195,11 @@ export function getInstance<
225
195
 
226
196
  return instance.getColumnIsResizing(header.column.id)
227
197
  },
228
- getColumnResizerProps: (headerId, userProps) => {
229
- const header = instance.getHeader(headerId)
230
-
231
- if (!header) {
232
- return
233
- }
234
198
 
199
+ getHeaderResizerProps: (headerId, userProps) => {
200
+ const header = instance.getHeader(headerId)
235
201
  const column = instance.getColumn(header.column.id)
236
202
 
237
- if (!column) {
238
- return
239
- }
240
-
241
203
  const canResize = column.getCanResize()
242
204
 
243
205
  const onResizeStart = (e: ReactMouseEvent | ReactTouchEvent) => {
@@ -248,9 +210,13 @@ export function getInstance<
248
210
  }
249
211
  }
250
212
 
213
+ const header = headerId ? instance.getHeader(headerId) : undefined
214
+
215
+ const startSize = header ? header.getWidth() : column.getWidth()
216
+
251
217
  const columnSizingStart: [string, number][] = header
252
- .getLeafHeaders()
253
- .map(d => [d.column.id, d.getWidth()])
218
+ ? header.getLeafHeaders().map(d => [d.column.id, d.getWidth()])
219
+ : [[column.id, column.getWidth()]]
254
220
 
255
221
  const clientX = isTouchStartEvent(e)
256
222
  ? Math.round(e.touches[0].clientX)
@@ -274,10 +240,10 @@ export function getInstance<
274
240
  )
275
241
 
276
242
  old.columnSizingStart.forEach(([columnId, headerWidth]) => {
277
- newColumnSizing[columnId] = Math.max(
278
- headerWidth + headerWidth * deltaPercentage,
279
- 0
280
- )
243
+ newColumnSizing[columnId] =
244
+ Math.round(
245
+ Math.max(headerWidth + headerWidth * deltaPercentage, 0) * 100
246
+ ) / 100
281
247
  })
282
248
 
283
249
  return {
@@ -374,11 +340,11 @@ export function getInstance<
374
340
  instance.setColumnSizingInfo(old => ({
375
341
  ...old,
376
342
  startOffset: clientX,
377
- startSize: header.getWidth(),
343
+ startSize,
378
344
  deltaOffset: 0,
379
345
  deltaPercentage: 0,
380
346
  columnSizingStart,
381
- isResizingColumn: header.column.id,
347
+ isResizingColumn: column.id,
382
348
  }))
383
349
  }
384
350
 
@@ -403,22 +369,27 @@ export function getInstance<
403
369
  }
404
370
  }
405
371
 
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> {
372
+ export function createColumn<TGenerics extends PartialGenerics>(
373
+ column: Column<TGenerics>,
374
+ instance: TableInstance<TGenerics>
375
+ ): ColumnSizingColumn<TGenerics> {
416
376
  return {
417
377
  getIsResizing: () => instance.getColumnIsResizing(column.id),
418
378
  getCanResize: () => instance.getColumnCanResize(column.id),
419
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),
420
391
  getResizerProps: userProps =>
421
- instance.getColumnResizerProps(column.id, userProps),
392
+ instance.getHeaderResizerProps(header.id, userProps),
422
393
  }
423
394
  }
424
395