@tanstack/react-table 8.0.0-alpha.8 → 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 +65 -80
  2. package/build/cjs/core.js.map +1 -1
  3. package/build/cjs/createTable.js +44 -30
  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 +1382 -1357
  41. package/build/esm/index.js.map +1 -1
  42. package/build/stats-html.html +1 -1
  43. package/build/stats-react.json +337 -321
  44. package/build/types/core.d.ts +63 -68
  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 +1395 -1359
  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 -7
  73. package/src/core.tsx +189 -522
  74. package/src/createTable.tsx +133 -191
  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,201 +1,124 @@
1
1
  import * as React from 'react'
2
- import { useSyncExternalStore } from 'use-sync-external-store/shim'
3
- import { Cell, Column, Row } from '.'
4
2
  import { createTableInstance } from './core'
3
+ import { CustomFilterTypes } from './features/Filters'
4
+ import { CustomAggregationTypes } from './features/Grouping'
5
+ import { CustomSortingTypes } from './features/Sorting'
5
6
  import {
6
- ReactTable,
7
+ TableInstance,
7
8
  ColumnDef,
8
9
  AccessorFn,
9
10
  Options,
10
- Renderable,
11
- Header,
11
+ DefaultGenerics,
12
+ PartialGenerics,
13
+ _NonGenerated,
12
14
  } from './types'
13
- import { Overwrite } from './utils'
15
+ import { Overwrite, PartialKeys } from './utils'
14
16
 
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>
17
+ export type CreatTableFactory<TGenerics extends Partial<DefaultGenerics>> = <
18
+ TRow
19
+ >() => CreateTable<Overwrite<TGenerics, { Row: TRow }>>
33
20
 
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>
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
+ }
41
30
 
42
- createColumns: (
43
- columns: ColumnDef<
44
- TData,
45
- TValue,
46
- TFilterFns,
47
- TSortingFns,
48
- TAggregationFns
49
- >[]
50
- ) => ColumnDef<TData, TValue, TFilterFns, TSortingFns, 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
+ }
45
+ >
46
+ > {
47
+ return () => _createTable(undefined, undefined, opts)
48
+ }
51
49
 
50
+ export type CreateTable<TGenerics extends Partial<DefaultGenerics>> = {
51
+ createColumns: (columns: ColumnDef<TGenerics>[]) => ColumnDef<TGenerics>[]
52
52
  createGroup: (
53
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
- >,
54
+ | Overwrite<
55
+ _NonGenerated<ColumnDef<TGenerics>>,
115
56
  {
116
- __generated?: never
117
- accessorFn?: never
118
- accessorKey?: never
119
- id: string
57
+ header: string
58
+ id?: string
120
59
  }
121
60
  >
122
- : TAccessor extends keyof TData
123
- ? // Accessor Key
124
- Overwrite<
125
- ColumnDef<
126
- TData,
127
- TData[TAccessor],
128
- TFilterFns,
129
- TSortingFns,
130
- TAggregationFns
131
- >,
61
+ | Overwrite<
62
+ _NonGenerated<ColumnDef<TGenerics>>,
132
63
  {
133
- __generated?: never
134
- accessorFn?: never
135
- accessorKey?: never
136
- id?: string
64
+ id: string
65
+ header?: string | ColumnDef<TGenerics>['header']
137
66
  }
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
67
+ >,
68
+ { accessorFn?: never; accessorKey?: never }
163
69
  >
164
- columnDef: ColumnDef<
165
- TData,
166
- TValue,
167
- TFilterFns,
168
- TSortingFns,
169
- TAggregationFns
70
+ ) => ColumnDef<TGenerics>
71
+ createDisplayColumn: (
72
+ column: PartialKeys<
73
+ _NonGenerated<ColumnDef<TGenerics>>,
74
+ 'accessorFn' | 'accessorKey'
170
75
  >
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
- }
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 }>>()
175
110
  }
176
111
 
177
- export function createTable<
178
- TData,
179
- TValue,
180
- TFilterFns,
181
- TSortingFns,
182
- TAggregationFns
183
- >(): 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> {
184
117
  return {
185
- RowType: () => createTable(),
186
- FilterFns: () => createTable(),
187
- SortingFns: () => createTable(),
188
- AggregationFns: () => createTable(),
189
118
  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) => {
119
+ createDisplayColumn: column => column as any,
120
+ createGroup: column => column as any,
121
+ createDataColumn: (accessor, column): any => {
199
122
  column = {
200
123
  ...column,
201
124
  id: column.id,
@@ -206,7 +129,6 @@ export function createTable<
206
129
  ...column,
207
130
  id: column.id ?? accessor,
208
131
  accessorKey: accessor,
209
- __generated: true,
210
132
  }
211
133
  }
212
134
 
@@ -214,31 +136,51 @@ export function createTable<
214
136
  return {
215
137
  ...column,
216
138
  accessorFn: accessor,
217
- __generated: true,
218
139
  }
219
140
  }
220
141
 
221
142
  throw new Error('Invalid accessor')
222
143
  },
223
- useTable: <TData, TValue, TFilterFns, TSortingFns, TAggregationFns>(
224
- options: Options<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
225
- ): ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> => {
144
+ useTable: (
145
+ options: PartialKeys<
146
+ Omit<Options<TGenerics>, keyof CreateTableOptions<any, any, any>>,
147
+ 'state' | 'onStateChange'
148
+ >
149
+ ): TableInstance<TGenerics> => {
150
+ // Compose in the generic options to the user options
151
+ const resolvedOptions = {
152
+ ...(opts ?? {}),
153
+ state: {}, // Dummy state
154
+ onStateChange: () => {}, // noop
155
+ ...options,
156
+ }
157
+
158
+ // Create a new table instance and store it in state
226
159
  const [instance] = React.useState(() =>
227
- createTableInstance<
228
- TData,
229
- TValue,
230
- TFilterFns,
231
- TSortingFns,
232
- TAggregationFns
233
- >(options)
160
+ createTableInstance<TGenerics>(resolvedOptions)
234
161
  )
235
162
 
236
- useSyncExternalStore(instance.subscribe, () => instance.internalState)
237
-
238
- instance.updateOptions(options)
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
+ }))
239
182
 
240
183
  return instance
241
184
  },
242
- types: undefined as any,
243
- } as TableHelper<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
185
+ }
244
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