@tanstack/react-table 8.0.0-alpha.3 → 8.0.0-alpha.30

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 (107) hide show
  1. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -78
  2. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  3. package/build/cjs/index.js +96 -12
  4. package/build/cjs/index.js.map +1 -1
  5. package/build/esm/index.js +39 -4687
  6. package/build/esm/index.js.map +1 -1
  7. package/build/stats-html.html +1 -1
  8. package/build/stats-react.json +28 -746
  9. package/build/types/index.d.ts +13 -7
  10. package/build/umd/index.development.js +49 -4689
  11. package/build/umd/index.development.js.map +1 -1
  12. package/build/umd/index.production.js +1 -1
  13. package/build/umd/index.production.js.map +1 -1
  14. package/package.json +4 -1
  15. package/src/index.tsx +103 -7
  16. package/build/cjs/aggregationTypes.js +0 -130
  17. package/build/cjs/aggregationTypes.js.map +0 -1
  18. package/build/cjs/core.js +0 -552
  19. package/build/cjs/core.js.map +0 -1
  20. package/build/cjs/createTable.js +0 -108
  21. package/build/cjs/createTable.js.map +0 -1
  22. package/build/cjs/features/ColumnSizing.js +0 -317
  23. package/build/cjs/features/ColumnSizing.js.map +0 -1
  24. package/build/cjs/features/Expanding.js +0 -255
  25. package/build/cjs/features/Expanding.js.map +0 -1
  26. package/build/cjs/features/Filters.js +0 -445
  27. package/build/cjs/features/Filters.js.map +0 -1
  28. package/build/cjs/features/Grouping.js +0 -249
  29. package/build/cjs/features/Grouping.js.map +0 -1
  30. package/build/cjs/features/Headers.js +0 -549
  31. package/build/cjs/features/Headers.js.map +0 -1
  32. package/build/cjs/features/Ordering.js +0 -86
  33. package/build/cjs/features/Ordering.js.map +0 -1
  34. package/build/cjs/features/Pagination.js +0 -194
  35. package/build/cjs/features/Pagination.js.map +0 -1
  36. package/build/cjs/features/Pinning.js +0 -149
  37. package/build/cjs/features/Pinning.js.map +0 -1
  38. package/build/cjs/features/RowSelection.js +0 -541
  39. package/build/cjs/features/RowSelection.js.map +0 -1
  40. package/build/cjs/features/Sorting.js +0 -327
  41. package/build/cjs/features/Sorting.js.map +0 -1
  42. package/build/cjs/features/Visibility.js +0 -166
  43. package/build/cjs/features/Visibility.js.map +0 -1
  44. package/build/cjs/filterTypes.js +0 -172
  45. package/build/cjs/filterTypes.js.map +0 -1
  46. package/build/cjs/sortTypes.js +0 -122
  47. package/build/cjs/sortTypes.js.map +0 -1
  48. package/build/cjs/utils/columnFilterRowsFn.js +0 -131
  49. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  50. package/build/cjs/utils/expandRowsFn.js +0 -38
  51. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  52. package/build/cjs/utils/globalFilterRowsFn.js +0 -101
  53. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  54. package/build/cjs/utils/groupRowsFn.js +0 -155
  55. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  56. package/build/cjs/utils/sortRowsFn.js +0 -94
  57. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  58. package/build/cjs/utils.js +0 -146
  59. package/build/cjs/utils.js.map +0 -1
  60. package/build/types/aggregationTypes.d.ts +0 -22
  61. package/build/types/core.d.ts +0 -111
  62. package/build/types/createTable.d.ts +0 -53
  63. package/build/types/features/ColumnSizing.d.ts +0 -67
  64. package/build/types/features/Expanding.d.ts +0 -53
  65. package/build/types/features/Filters.d.ts +0 -98
  66. package/build/types/features/Grouping.d.ts +0 -82
  67. package/build/types/features/Headers.d.ts +0 -41
  68. package/build/types/features/Ordering.d.ts +0 -19
  69. package/build/types/features/Pagination.d.ts +0 -43
  70. package/build/types/features/Pinning.d.ts +0 -39
  71. package/build/types/features/RowSelection.d.ts +0 -66
  72. package/build/types/features/Sorting.d.ts +0 -78
  73. package/build/types/features/Visibility.d.ts +0 -47
  74. package/build/types/filterTypes.d.ts +0 -50
  75. package/build/types/sortTypes.d.ts +0 -18
  76. package/build/types/types.d.ts +0 -127
  77. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  78. package/build/types/utils/expandRowsFn.d.ts +0 -2
  79. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  80. package/build/types/utils/groupRowsFn.d.ts +0 -2
  81. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  82. package/build/types/utils/sortRowsFn.d.ts +0 -2
  83. package/build/types/utils.d.ts +0 -28
  84. package/src/aggregationTypes.ts +0 -115
  85. package/src/core.tsx +0 -1182
  86. package/src/createTable.tsx +0 -241
  87. package/src/features/ColumnSizing.ts +0 -453
  88. package/src/features/Expanding.ts +0 -404
  89. package/src/features/Filters.ts +0 -762
  90. package/src/features/Grouping.ts +0 -466
  91. package/src/features/Headers.ts +0 -912
  92. package/src/features/Ordering.ts +0 -133
  93. package/src/features/Pagination.ts +0 -314
  94. package/src/features/Pinning.ts +0 -200
  95. package/src/features/RowSelection.ts +0 -831
  96. package/src/features/Sorting.ts +0 -547
  97. package/src/features/Visibility.ts +0 -279
  98. package/src/filterTypes.ts +0 -251
  99. package/src/sortTypes.ts +0 -159
  100. package/src/types.ts +0 -331
  101. package/src/utils/columnFilterRowsFn.ts +0 -155
  102. package/src/utils/expandRowsFn.ts +0 -50
  103. package/src/utils/globalFilterRowsFn.ts +0 -122
  104. package/src/utils/groupRowsFn.ts +0 -194
  105. package/src/utils/paginateRowsFn.ts +0 -34
  106. package/src/utils/sortRowsFn.ts +0 -115
  107. package/src/utils.tsx +0 -257
@@ -1,133 +0,0 @@
1
- import { functionalUpdate, makeStateUpdater, memo } from '../utils'
2
-
3
- import { ReactTable, OnChangeFn, Updater, Column } from '../types'
4
-
5
- import * as Grouping from './Grouping'
6
-
7
- export type ColumnOrderState = string[]
8
-
9
- export type ColumnOrderTableState = {
10
- columnOrder: ColumnOrderState
11
- }
12
-
13
- export type ColumnOrderOptions = {
14
- onColumnOrderChange?: OnChangeFn<ColumnOrderState>
15
- }
16
-
17
- export type ColumnOrderDefaultOptions = {
18
- onColumnOrderChange: OnChangeFn<ColumnOrderState>
19
- }
20
-
21
- export type ColumnOrderInstance<
22
- TData,
23
- TValue,
24
- TFilterFns,
25
- TSortingFns,
26
- TAggregationFns
27
- > = {
28
- setColumnOrder: (updater: Updater<ColumnOrderState>) => void
29
- resetColumnOrder: () => void
30
- getOrderColumnsFn: () => (
31
- columns: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]
32
- ) => Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]
33
- }
34
-
35
- //
36
-
37
- export function getInitialState(): ColumnOrderTableState {
38
- return {
39
- columnOrder: [],
40
- }
41
- }
42
-
43
- export function getDefaultOptions<
44
- TData,
45
- TValue,
46
- TFilterFns,
47
- TSortingFns,
48
- TAggregationFns
49
- >(
50
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
51
- ): ColumnOrderDefaultOptions {
52
- return {
53
- onColumnOrderChange: makeStateUpdater('columnOrder', instance),
54
- }
55
- }
56
-
57
- export function getInstance<
58
- TData,
59
- TValue,
60
- TFilterFns,
61
- TSortingFns,
62
- TAggregationFns
63
- >(
64
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
65
- ): ColumnOrderInstance<
66
- TData,
67
- TValue,
68
- TFilterFns,
69
- TSortingFns,
70
- TAggregationFns
71
- > {
72
- return {
73
- setColumnOrder: updater =>
74
- instance.options.onColumnOrderChange?.(
75
- updater,
76
- functionalUpdate(updater, instance.getState().columnOrder)
77
- ),
78
- resetColumnOrder: () => {
79
- instance.setColumnOrder(instance.initialState.columnOrder ?? [])
80
- },
81
- getOrderColumnsFn: memo(
82
- () => [
83
- instance.getState().columnOrder,
84
- instance.getState().grouping,
85
- instance.options.groupedColumnMode,
86
- ],
87
- (columnOrder, grouping, groupedColumnMode) => columns => {
88
- // Sort grouped columns to the start of the column list
89
- // before the headers are built
90
- let orderedColumns: Column<
91
- TData,
92
- TValue,
93
- TFilterFns,
94
- TSortingFns,
95
- TAggregationFns
96
- >[] = []
97
-
98
- // If there is no order, return the normal columns
99
- if (!columnOrder?.length) {
100
- orderedColumns = columns
101
- } else {
102
- const columnOrderCopy = [...columnOrder]
103
-
104
- // If there is an order, make a copy of the columns
105
- const columnsCopy = [...columns]
106
-
107
- // And make a new ordered array of the columns
108
-
109
- // Loop over the columns and place them in order into the new array
110
- while (columnsCopy.length && columnOrderCopy.length) {
111
- const targetColumnId = columnOrderCopy.shift()
112
- const foundIndex = columnsCopy.findIndex(
113
- d => d.id === targetColumnId
114
- )
115
- if (foundIndex > -1) {
116
- orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]!)
117
- }
118
- }
119
-
120
- // If there are any columns left, add them to the end
121
- orderedColumns = [...orderedColumns, ...columnsCopy]
122
- }
123
-
124
- return Grouping.orderColumns(
125
- orderedColumns,
126
- grouping,
127
- groupedColumnMode
128
- )
129
- },
130
- { key: 'getOrderColumnsFn', debug: instance.options.debug }
131
- ),
132
- }
133
- }
@@ -1,314 +0,0 @@
1
- import {
2
- Column,
3
- OnChangeFn,
4
- ReactTable,
5
- Row,
6
- RowModel,
7
- TableState,
8
- Updater,
9
- } from '../types'
10
- import { functionalUpdate, makeStateUpdater, memo } from '../utils'
11
-
12
- export type PaginationState = {
13
- pageIndex: number
14
- pageSize: number
15
- pageCount: number
16
- }
17
-
18
- export type PaginationTableState = {
19
- pagination: PaginationState
20
- }
21
-
22
- export type PaginationOptions<
23
- TData,
24
- TValue,
25
- TFilterFns,
26
- TSortingFns,
27
- TAggregationFns
28
- > = {
29
- onPaginationChange?: OnChangeFn<PaginationState>
30
- autoResetPageIndex?: boolean
31
- paginateRowsFn?: (
32
- instance: ReactTable<
33
- TData,
34
- TValue,
35
- TFilterFns,
36
- TSortingFns,
37
- TAggregationFns
38
- >,
39
- rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
40
- ) => RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
41
- }
42
-
43
- export type PaginationDefaultOptions = {
44
- onPaginationChange: OnChangeFn<PaginationState>
45
- autoResetPageIndex: boolean
46
- }
47
-
48
- export type PaginationInstance<
49
- TData,
50
- TValue,
51
- TFilterFns,
52
- TSortingFns,
53
- TAggregationFns
54
- > = {
55
- _notifyPageIndexReset: () => void
56
- setPagination: (updater: Updater<PaginationState>) => void
57
- resetPagination: () => void
58
- setPageIndex: (updater: Updater<number>) => void
59
- resetPageIndex: () => void
60
- setPageSize: (updater: Updater<number>) => void
61
- resetPageSize: () => void
62
- setPageCount: (updater: Updater<number>) => void
63
- getPageOptions: () => number[]
64
- getCanPreviousPage: () => boolean
65
- getCanNextPage: () => boolean
66
- gotoPreviousPage: () => void
67
- gotoNextPage: () => void
68
- getPaginationRowModel: () => RowModel<
69
- TData,
70
- TValue,
71
- TFilterFns,
72
- TSortingFns,
73
- TAggregationFns
74
- >
75
- getPrePaginationRows: () => Row<
76
- TData,
77
- TValue,
78
- TFilterFns,
79
- TSortingFns,
80
- TAggregationFns
81
- >[]
82
- getPrePaginationFlatRows: () => Row<
83
- TData,
84
- TValue,
85
- TFilterFns,
86
- TSortingFns,
87
- TAggregationFns
88
- >[]
89
- getPrePaginationRowsById: () => Record<
90
- string,
91
- Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
92
- >
93
- getPaginationRows: () => Row<
94
- TData,
95
- TValue,
96
- TFilterFns,
97
- TSortingFns,
98
- TAggregationFns
99
- >[]
100
- getPaginationFlatRows: () => Row<
101
- TData,
102
- TValue,
103
- TFilterFns,
104
- TSortingFns,
105
- TAggregationFns
106
- >[]
107
- getPaginationRowsById: () => Record<
108
- string,
109
- Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
110
- >
111
- }
112
-
113
- //
114
-
115
- export function getInitialState(): PaginationTableState {
116
- return {
117
- pagination: {
118
- pageIndex: 0,
119
- pageSize: 10,
120
- pageCount: -1,
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
- ): PaginationDefaultOptions {
134
- return {
135
- onPaginationChange: makeStateUpdater('pagination', instance),
136
- autoResetPageIndex: true,
137
- }
138
- }
139
-
140
- export function getInstance<
141
- TData,
142
- TValue,
143
- TFilterFns,
144
- TSortingFns,
145
- TAggregationFns
146
- >(
147
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
148
- ): PaginationInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {
149
- let registered = false
150
- return {
151
- _notifyPageIndexReset: () => {
152
- if (!registered) {
153
- registered = true
154
- return
155
- }
156
-
157
- if (instance.options.autoResetAll === false) {
158
- return
159
- }
160
-
161
- if (
162
- instance.options.autoResetAll === true ||
163
- instance.options.autoResetPageIndex
164
- ) {
165
- instance.resetPageSize()
166
- }
167
- },
168
- setPagination: updater => {
169
- const safeUpdater: Updater<PaginationState> = old => {
170
- const newState = functionalUpdate(old, updater)
171
-
172
- if (!instance.options.paginateRowsFn) {
173
- return {
174
- ...old,
175
- pageCount: instance.getPreExpandedRows()?.length
176
- ? Math.ceil(
177
- instance.getPreExpandedRows().length /
178
- instance.getState().pagination.pageSize
179
- )
180
- : 0,
181
- }
182
- }
183
-
184
- return old
185
- }
186
-
187
- return instance.options.onPaginationChange?.(
188
- safeUpdater,
189
- functionalUpdate(safeUpdater, instance.getState().pagination)
190
- )
191
- },
192
- resetPagination: () => {
193
- instance.setPagination(
194
- instance.initialState.pagination ?? {
195
- pageIndex: 0,
196
- pageSize: 10,
197
- pageCount: -1,
198
- }
199
- )
200
- },
201
- setPageIndex: updater => {
202
- instance.setPagination(old => {
203
- const newPageIndex = functionalUpdate(updater, old.pageIndex)
204
- const maxPageIndex =
205
- old.pageCount > 0 ? old.pageCount - 1 : Number.MAX_SAFE_INTEGER
206
-
207
- return {
208
- ...old,
209
- pageIndex: Math.min(Math.max(0, newPageIndex), maxPageIndex),
210
- }
211
- })
212
- },
213
- resetPageIndex: () => {
214
- instance.setPageIndex(0)
215
- },
216
- resetPageSize: () => {
217
- instance.setPageSize(
218
- instance.options.initialState?.pagination?.pageSize ?? 10
219
- )
220
- },
221
- setPageSize: updater => {
222
- instance.setPagination(old => {
223
- const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize))
224
- const topRowIndex = old.pageSize * old.pageIndex!
225
- const pageIndex = Math.floor(topRowIndex / pageSize)
226
-
227
- return {
228
- ...old,
229
- pageIndex,
230
- pageSize,
231
- }
232
- })
233
- },
234
- setPageCount: updater =>
235
- instance.setPagination(old => ({
236
- ...old,
237
- pageCount: Math.max(-1, functionalUpdate(updater, old.pageCount)),
238
- })),
239
-
240
- getPageOptions: memo(
241
- () => [
242
- instance.getState().pagination.pageSize,
243
- instance.getState().pagination.pageCount,
244
- ],
245
- (pageSize, pageCount) => {
246
- let pageOptions: number[] = []
247
- if (pageCount > 0) {
248
- pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i)
249
- }
250
- return pageOptions
251
- },
252
- {
253
- key: 'getPageOptions',
254
- debug: instance.options.debug,
255
- }
256
- ),
257
-
258
- getCanPreviousPage: () => instance.getState().pagination.pageIndex > 0,
259
-
260
- getCanNextPage: () => {
261
- const { pageIndex, pageCount, pageSize } = instance.getState().pagination
262
-
263
- if (pageCount === -1) {
264
- return true
265
- }
266
-
267
- if (pageCount === 0) {
268
- return false
269
- }
270
-
271
- return (
272
- pageIndex <
273
- Math.ceil(instance.getPrePaginationRows().length / pageSize) - 1
274
- )
275
- },
276
-
277
- gotoPreviousPage: () => {
278
- return instance.setPageIndex?.(old => old! - 1)
279
- },
280
-
281
- gotoNextPage: () => {
282
- return instance.setPageIndex?.(old => old! + 1)
283
- },
284
-
285
- getPaginationRowModel: memo(
286
- () => [
287
- instance.getState().pagination,
288
- instance.getExpandedRowModel(),
289
- instance.options.paginateRowsFn,
290
- ],
291
- (_pagination, rowModel, paginateRowsFn) => {
292
- if (!paginateRowsFn || !rowModel.rows.length) {
293
- return rowModel
294
- }
295
-
296
- if (process.env.NODE_ENV !== 'production' && instance.options.debug)
297
- console.info('Paginating...')
298
-
299
- return paginateRowsFn(instance, rowModel)
300
- },
301
- {
302
- key: 'getPaginationRowModel',
303
- debug: instance.options.debug,
304
- }
305
- ),
306
-
307
- getPrePaginationRows: () => instance.getExpandedRowModel().rows,
308
- getPrePaginationFlatRows: () => instance.getExpandedRowModel().flatRows,
309
- getPrePaginationRowsById: () => instance.getExpandedRowModel().rowsById,
310
- getPaginationRows: () => instance.getPaginationRowModel().rows,
311
- getPaginationFlatRows: () => instance.getPaginationRowModel().flatRows,
312
- getPaginationRowsById: () => instance.getPaginationRowModel().rowsById,
313
- }
314
- }
@@ -1,200 +0,0 @@
1
- import { OnChangeFn, Updater, ReactTable, Column } from '../types'
2
- import { functionalUpdate, makeStateUpdater } from '../utils'
3
-
4
- type ColumnPinningPosition = false | 'left' | 'right'
5
-
6
- export type ColumnPinningState = {
7
- left?: string[]
8
- right?: string[]
9
- }
10
-
11
- export type ColumnPinningTableState = {
12
- columnPinning: ColumnPinningState
13
- }
14
-
15
- export type ColumnPinningOptions = {
16
- onColumnPinningChange?: OnChangeFn<ColumnPinningState>
17
- enablePinning?: boolean
18
- }
19
-
20
- export type ColumnPinningDefaultOptions = {
21
- onColumnPinningChange: OnChangeFn<ColumnPinningState>
22
- }
23
-
24
- export type ColumnPinningColumnDef = {
25
- enablePinning?: boolean
26
- defaultCanPin?: boolean
27
- }
28
-
29
- export type ColumnPinningColumn = {
30
- getCanPin: () => boolean
31
- getPinnedIndex: () => number
32
- getIsPinned: () => ColumnPinningPosition
33
- pin: (position: ColumnPinningPosition) => void
34
- }
35
-
36
- export type ColumnPinningInstance<
37
- _TData,
38
- _TValue,
39
- _TFilterFns,
40
- _TSortingFns,
41
- _TAggregationFns
42
- > = {
43
- setColumnPinning: (updater: Updater<ColumnPinningState>) => void
44
- resetColumnPinning: () => void
45
- pinColumn: (columnId: string, position: ColumnPinningPosition) => void
46
- getColumnCanPin: (columnId: string) => boolean
47
- getColumnIsPinned: (columnId: string) => ColumnPinningPosition
48
- getColumnPinnedIndex: (columnId: string) => number
49
- }
50
-
51
- //
52
-
53
- export function getInitialState(): ColumnPinningTableState {
54
- return {
55
- columnPinning: {
56
- left: [],
57
- right: [],
58
- },
59
- }
60
- }
61
-
62
- export function getDefaultOptions<
63
- TData,
64
- TValue,
65
- TFilterFns,
66
- TSortingFns,
67
- TAggregationFns
68
- >(
69
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
70
- ): ColumnPinningDefaultOptions {
71
- return {
72
- onColumnPinningChange: makeStateUpdater('columnPinning', instance),
73
- }
74
- }
75
-
76
- export function createColumn<
77
- TData,
78
- TValue,
79
- TFilterFns,
80
- TSortingFns,
81
- TAggregationFns
82
- >(
83
- column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,
84
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
85
- ): ColumnPinningColumn {
86
- return {
87
- getCanPin: () => instance.getColumnCanPin(column.id),
88
- getPinnedIndex: () => instance.getColumnPinnedIndex(column.id),
89
- getIsPinned: () => instance.getColumnIsPinned(column.id),
90
- pin: position => instance.pinColumn(column.id, position),
91
- }
92
- }
93
-
94
- export function getInstance<
95
- TData,
96
- TValue,
97
- TFilterFns,
98
- TSortingFns,
99
- TAggregationFns
100
- >(
101
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
102
- ): ColumnPinningInstance<
103
- TData,
104
- TValue,
105
- TFilterFns,
106
- TSortingFns,
107
- TAggregationFns
108
- > {
109
- return {
110
- setColumnPinning: updater =>
111
- instance.options.onColumnPinningChange?.(
112
- updater,
113
- functionalUpdate(updater, instance.getState().columnPinning)
114
- ),
115
-
116
- resetColumnPinning: () =>
117
- instance.setColumnPinning(
118
- instance.options.initialState?.columnPinning ?? {}
119
- ),
120
-
121
- pinColumn: (columnId, position) => {
122
- const column = instance.getColumn(columnId)
123
-
124
- const columnIds = column
125
- ?.getLeafColumns()
126
- .map(d => d.id)
127
- .filter(Boolean) as string[]
128
-
129
- instance.setColumnPinning(old => {
130
- if (position === 'right') {
131
- return {
132
- left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
133
- right: [
134
- ...(old?.right ?? []).filter(d => !columnIds?.includes(d)),
135
- ...columnIds,
136
- ],
137
- }
138
- }
139
-
140
- if (position === 'left') {
141
- return {
142
- left: [
143
- ...(old?.left ?? []).filter(d => !columnIds?.includes(d)),
144
- ...columnIds,
145
- ],
146
- right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
147
- }
148
- }
149
-
150
- return {
151
- left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
152
- right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
153
- }
154
- })
155
- },
156
-
157
- getColumnCanPin: columnId => {
158
- const column = instance.getColumn(columnId)
159
-
160
- if (!column) {
161
- throw new Error()
162
- }
163
-
164
- const leafColumns = column.getLeafColumns()
165
-
166
- return leafColumns.some(
167
- d =>
168
- d.enablePinning ??
169
- instance.options.enablePinning ??
170
- d.defaultCanPin ??
171
- !!d.accessorFn
172
- )
173
- },
174
-
175
- getColumnIsPinned: columnId => {
176
- const column = instance.getColumn(columnId)
177
-
178
- if (!column) {
179
- throw new Error()
180
- }
181
-
182
- const leafColumnIds = column.getLeafColumns().map(d => d.id)
183
-
184
- const { left, right } = instance.getState().columnPinning
185
-
186
- const isLeft = leafColumnIds.some(d => left?.includes(d))
187
- const isRight = leafColumnIds.some(d => right?.includes(d))
188
-
189
- return isLeft ? 'left' : isRight ? 'right' : false
190
- },
191
-
192
- getColumnPinnedIndex: columnId => {
193
- const position = instance.getColumnIsPinned(columnId)
194
-
195
- return position
196
- ? instance.getState().columnPinning?.[position]?.indexOf(columnId) ?? -1
197
- : 0
198
- },
199
- }
200
- }