@tanstack/react-table 8.0.0-alpha.5 → 8.0.0-alpha.50

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 (109) 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 +98 -17
  4. package/build/cjs/index.js.map +1 -1
  5. package/build/esm/index.js +38 -4716
  6. package/build/esm/index.js.map +1 -1
  7. package/build/stats-html.html +1 -1
  8. package/build/stats-react.json +29 -779
  9. package/build/types/index.d.ts +10 -8
  10. package/build/umd/index.development.js +50 -4722
  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 +104 -8
  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 -198
  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/paginateRowsFn.js +0 -44
  57. package/build/cjs/utils/paginateRowsFn.js.map +0 -1
  58. package/build/cjs/utils/sortRowsFn.js +0 -94
  59. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  60. package/build/cjs/utils.js +0 -146
  61. package/build/cjs/utils.js.map +0 -1
  62. package/build/types/aggregationTypes.d.ts +0 -22
  63. package/build/types/core.d.ts +0 -111
  64. package/build/types/createTable.d.ts +0 -52
  65. package/build/types/features/ColumnSizing.d.ts +0 -67
  66. package/build/types/features/Expanding.d.ts +0 -53
  67. package/build/types/features/Filters.d.ts +0 -98
  68. package/build/types/features/Grouping.d.ts +0 -82
  69. package/build/types/features/Headers.d.ts +0 -41
  70. package/build/types/features/Ordering.d.ts +0 -19
  71. package/build/types/features/Pagination.d.ts +0 -44
  72. package/build/types/features/Pinning.d.ts +0 -39
  73. package/build/types/features/RowSelection.d.ts +0 -66
  74. package/build/types/features/Sorting.d.ts +0 -78
  75. package/build/types/features/Visibility.d.ts +0 -47
  76. package/build/types/filterTypes.d.ts +0 -50
  77. package/build/types/sortTypes.d.ts +0 -18
  78. package/build/types/types.d.ts +0 -127
  79. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  80. package/build/types/utils/expandRowsFn.d.ts +0 -2
  81. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  82. package/build/types/utils/groupRowsFn.d.ts +0 -2
  83. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  84. package/build/types/utils/sortRowsFn.d.ts +0 -2
  85. package/build/types/utils.d.ts +0 -28
  86. package/src/aggregationTypes.ts +0 -115
  87. package/src/core.tsx +0 -1181
  88. package/src/createTable.tsx +0 -241
  89. package/src/features/ColumnSizing.ts +0 -453
  90. package/src/features/Expanding.ts +0 -404
  91. package/src/features/Filters.ts +0 -762
  92. package/src/features/Grouping.ts +0 -466
  93. package/src/features/Headers.ts +0 -912
  94. package/src/features/Ordering.ts +0 -133
  95. package/src/features/Pagination.ts +0 -327
  96. package/src/features/Pinning.ts +0 -200
  97. package/src/features/RowSelection.ts +0 -831
  98. package/src/features/Sorting.ts +0 -547
  99. package/src/features/Visibility.ts +0 -279
  100. package/src/filterTypes.ts +0 -251
  101. package/src/sortTypes.ts +0 -159
  102. package/src/types.ts +0 -331
  103. package/src/utils/columnFilterRowsFn.ts +0 -155
  104. package/src/utils/expandRowsFn.ts +0 -50
  105. package/src/utils/globalFilterRowsFn.ts +0 -122
  106. package/src/utils/groupRowsFn.ts +0 -194
  107. package/src/utils/paginateRowsFn.ts +0 -34
  108. package/src/utils/sortRowsFn.ts +0 -115
  109. 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,327 +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 PageCount = undefined | null | number
13
-
14
- export type PaginationState = {
15
- pageIndex: number
16
- pageSize: number
17
- pageCount?: PageCount
18
- }
19
-
20
- export type PaginationTableState = {
21
- pagination: PaginationState
22
- }
23
-
24
- export type PaginationOptions<
25
- TData,
26
- TValue,
27
- TFilterFns,
28
- TSortingFns,
29
- TAggregationFns
30
- > = {
31
- onPaginationChange?: OnChangeFn<PaginationState>
32
- autoResetPageIndex?: boolean
33
- paginateRowsFn?: (
34
- instance: ReactTable<
35
- TData,
36
- TValue,
37
- TFilterFns,
38
- TSortingFns,
39
- TAggregationFns
40
- >,
41
- rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
42
- ) => RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
43
- }
44
-
45
- export type PaginationDefaultOptions = {
46
- onPaginationChange: OnChangeFn<PaginationState>
47
- autoResetPageIndex: boolean
48
- }
49
-
50
- export type PaginationInstance<
51
- TData,
52
- TValue,
53
- TFilterFns,
54
- TSortingFns,
55
- TAggregationFns
56
- > = {
57
- _notifyPageIndexReset: () => void
58
- setPagination: (updater: Updater<PaginationState>) => void
59
- resetPagination: () => void
60
- setPageIndex: (updater: Updater<number>) => void
61
- resetPageIndex: () => void
62
- setPageSize: (updater: Updater<number>) => void
63
- resetPageSize: () => void
64
- setPageCount: (updater: Updater<PageCount>) => void
65
- getPageOptions: () => number[]
66
- getCanPreviousPage: () => boolean
67
- getCanNextPage: () => boolean
68
- previousPage: () => void
69
- nextPage: () => void
70
- getPaginationRowModel: () => RowModel<
71
- TData,
72
- TValue,
73
- TFilterFns,
74
- TSortingFns,
75
- TAggregationFns
76
- >
77
- getPrePaginationRows: () => Row<
78
- TData,
79
- TValue,
80
- TFilterFns,
81
- TSortingFns,
82
- TAggregationFns
83
- >[]
84
- getPrePaginationFlatRows: () => Row<
85
- TData,
86
- TValue,
87
- TFilterFns,
88
- TSortingFns,
89
- TAggregationFns
90
- >[]
91
- getPrePaginationRowsById: () => Record<
92
- string,
93
- Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
94
- >
95
- getPaginationRows: () => Row<
96
- TData,
97
- TValue,
98
- TFilterFns,
99
- TSortingFns,
100
- TAggregationFns
101
- >[]
102
- getPaginationFlatRows: () => Row<
103
- TData,
104
- TValue,
105
- TFilterFns,
106
- TSortingFns,
107
- TAggregationFns
108
- >[]
109
- getPaginationRowsById: () => Record<
110
- string,
111
- Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
112
- >
113
- }
114
-
115
- //
116
-
117
- export function getInitialState(): PaginationTableState {
118
- return {
119
- pagination: {
120
- pageIndex: 0,
121
- pageSize: 10,
122
- },
123
- }
124
- }
125
-
126
- export function getDefaultOptions<
127
- TData,
128
- TValue,
129
- TFilterFns,
130
- TSortingFns,
131
- TAggregationFns
132
- >(
133
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
134
- ): PaginationDefaultOptions {
135
- return {
136
- onPaginationChange: makeStateUpdater('pagination', instance),
137
- autoResetPageIndex: true,
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
- ): PaginationInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {
150
- let registered = false
151
- return {
152
- _notifyPageIndexReset: () => {
153
- if (!registered) {
154
- registered = true
155
- return
156
- }
157
-
158
- if (instance.options.autoResetAll === false) {
159
- return
160
- }
161
-
162
- if (
163
- instance.options.autoResetAll === true ||
164
- instance.options.autoResetPageIndex
165
- ) {
166
- instance.resetPageSize()
167
- }
168
- },
169
- setPagination: updater => {
170
- const safeUpdater: Updater<PaginationState> = old => {
171
- let newState = functionalUpdate(updater, old)
172
-
173
- if (instance.options.paginateRowsFn) {
174
- newState.pageCount = instance.getPrePaginationRows()?.length
175
- ? Math.ceil(
176
- instance.getPrePaginationRows().length /
177
- instance.getState().pagination.pageSize
178
- )
179
- : 0
180
- }
181
-
182
- return newState
183
- }
184
-
185
- return instance.options.onPaginationChange?.(
186
- safeUpdater,
187
- functionalUpdate(safeUpdater, instance.getState().pagination)
188
- )
189
- },
190
- resetPagination: () => {
191
- instance.setPagination(
192
- instance.initialState.pagination ?? {
193
- pageIndex: 0,
194
- pageSize: 10,
195
- pageCount: -1,
196
- }
197
- )
198
- },
199
- setPageIndex: updater => {
200
- instance.setPagination(old => {
201
- let pageIndex = functionalUpdate(updater, old.pageIndex)
202
-
203
- const maxPageIndex =
204
- old.pageCount && old.pageCount > 0
205
- ? old.pageCount - 1
206
- : Number.MAX_SAFE_INTEGER
207
-
208
- pageIndex = Math.min(Math.max(0, pageIndex), maxPageIndex)
209
-
210
- return {
211
- ...old,
212
- pageIndex,
213
- }
214
- })
215
- },
216
- resetPageIndex: () => {
217
- instance.setPageIndex(0)
218
- },
219
- resetPageSize: () => {
220
- instance.setPageSize(
221
- instance.options.initialState?.pagination?.pageSize ?? 10
222
- )
223
- },
224
- setPageSize: updater => {
225
- instance.setPagination(old => {
226
- const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize))
227
- const topRowIndex = old.pageSize * old.pageIndex!
228
- const pageIndex = Math.floor(topRowIndex / pageSize)
229
-
230
- return {
231
- ...old,
232
- pageIndex,
233
- pageSize,
234
- }
235
- })
236
- },
237
- setPageCount: updater =>
238
- instance.setPagination(old => {
239
- let newPageCount = functionalUpdate(updater, old.pageCount)
240
-
241
- if (typeof newPageCount === 'number') {
242
- newPageCount = Math.max(-1, newPageCount)
243
- }
244
-
245
- return {
246
- ...old,
247
- pageCount: newPageCount,
248
- }
249
- }),
250
-
251
- getPageOptions: memo(
252
- () => [
253
- instance.getState().pagination.pageSize,
254
- instance.getState().pagination.pageCount,
255
- ],
256
- (pageSize, pageCount) => {
257
- let pageOptions: number[] = []
258
- if (pageCount && pageCount > 0) {
259
- pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i)
260
- }
261
- return pageOptions
262
- },
263
- {
264
- key: 'getPageOptions',
265
- debug: instance.options.debug,
266
- }
267
- ),
268
-
269
- getCanPreviousPage: () => instance.getState().pagination.pageIndex > 0,
270
-
271
- getCanNextPage: () => {
272
- const { pageIndex, pageCount, pageSize } = instance.getState().pagination
273
-
274
- if (pageCount === -1) {
275
- return true
276
- }
277
-
278
- if (pageCount === 0) {
279
- return false
280
- }
281
-
282
- return (
283
- pageIndex <
284
- Math.ceil(instance.getPrePaginationRows().length / pageSize) - 1
285
- )
286
- },
287
-
288
- previousPage: () => {
289
- return instance.setPageIndex(old => old - 1)
290
- },
291
-
292
- nextPage: () => {
293
- return instance.setPageIndex(old => {
294
- return old + 1
295
- })
296
- },
297
-
298
- getPaginationRowModel: memo(
299
- () => [
300
- instance.getState().pagination,
301
- instance.getExpandedRowModel(),
302
- instance.options.paginateRowsFn,
303
- ],
304
- (_pagination, rowModel, paginateRowsFn) => {
305
- if (!paginateRowsFn || !rowModel.rows.length) {
306
- return rowModel
307
- }
308
-
309
- if (process.env.NODE_ENV !== 'production' && instance.options.debug)
310
- console.info('Paginating...')
311
-
312
- return paginateRowsFn(instance, rowModel)
313
- },
314
- {
315
- key: 'getPaginationRowModel',
316
- debug: instance.options.debug,
317
- }
318
- ),
319
-
320
- getPrePaginationRows: () => instance.getExpandedRowModel().rows,
321
- getPrePaginationFlatRows: () => instance.getExpandedRowModel().flatRows,
322
- getPrePaginationRowsById: () => instance.getExpandedRowModel().rowsById,
323
- getPaginationRows: () => instance.getPaginationRowModel().rows,
324
- getPaginationFlatRows: () => instance.getPaginationRowModel().flatRows,
325
- getPaginationRowsById: () => instance.getPaginationRowModel().rowsById,
326
- }
327
- }
@@ -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
- }