@tanstack/react-table 8.0.0-alpha.8 → 8.0.0-alpha.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/build/cjs/react-table/src/index.js +133 -0
  2. package/build/cjs/react-table/src/index.js.map +1 -0
  3. package/build/cjs/table-core/build/esm/index.js +3951 -0
  4. package/build/cjs/table-core/build/esm/index.js.map +1 -0
  5. package/build/esm/index.js +3253 -4059
  6. package/build/esm/index.js.map +1 -1
  7. package/build/stats-html.html +1 -1
  8. package/build/stats-react.json +24 -797
  9. package/build/types/index.d.ts +16 -8
  10. package/build/umd/index.development.js +3349 -4124
  11. package/build/umd/index.development.js.map +1 -1
  12. package/build/umd/index.production.js +11 -1
  13. package/build/umd/index.production.js.map +1 -1
  14. package/package.json +7 -9
  15. package/src/index.tsx +113 -8
  16. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  17. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  18. package/build/cjs/aggregationTypes.js +0 -130
  19. package/build/cjs/aggregationTypes.js.map +0 -1
  20. package/build/cjs/core.js +0 -560
  21. package/build/cjs/core.js.map +0 -1
  22. package/build/cjs/createTable.js +0 -108
  23. package/build/cjs/createTable.js.map +0 -1
  24. package/build/cjs/features/ColumnSizing.js +0 -317
  25. package/build/cjs/features/ColumnSizing.js.map +0 -1
  26. package/build/cjs/features/Expanding.js +0 -251
  27. package/build/cjs/features/Expanding.js.map +0 -1
  28. package/build/cjs/features/Filters.js +0 -445
  29. package/build/cjs/features/Filters.js.map +0 -1
  30. package/build/cjs/features/Grouping.js +0 -249
  31. package/build/cjs/features/Grouping.js.map +0 -1
  32. package/build/cjs/features/Headers.js +0 -549
  33. package/build/cjs/features/Headers.js.map +0 -1
  34. package/build/cjs/features/Ordering.js +0 -86
  35. package/build/cjs/features/Ordering.js.map +0 -1
  36. package/build/cjs/features/Pagination.js +0 -198
  37. package/build/cjs/features/Pagination.js.map +0 -1
  38. package/build/cjs/features/Pinning.js +0 -149
  39. package/build/cjs/features/Pinning.js.map +0 -1
  40. package/build/cjs/features/RowSelection.js +0 -541
  41. package/build/cjs/features/RowSelection.js.map +0 -1
  42. package/build/cjs/features/Sorting.js +0 -327
  43. package/build/cjs/features/Sorting.js.map +0 -1
  44. package/build/cjs/features/Visibility.js +0 -166
  45. package/build/cjs/features/Visibility.js.map +0 -1
  46. package/build/cjs/filterTypes.js +0 -172
  47. package/build/cjs/filterTypes.js.map +0 -1
  48. package/build/cjs/index.js +0 -32
  49. package/build/cjs/index.js.map +0 -1
  50. package/build/cjs/sortTypes.js +0 -122
  51. package/build/cjs/sortTypes.js.map +0 -1
  52. package/build/cjs/utils/columnFilterRowsFn.js +0 -131
  53. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  54. package/build/cjs/utils/expandRowsFn.js +0 -38
  55. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  56. package/build/cjs/utils/globalFilterRowsFn.js +0 -101
  57. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  58. package/build/cjs/utils/groupRowsFn.js +0 -155
  59. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  60. package/build/cjs/utils/paginateRowsFn.js +0 -44
  61. package/build/cjs/utils/paginateRowsFn.js.map +0 -1
  62. package/build/cjs/utils/sortRowsFn.js +0 -94
  63. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  64. package/build/cjs/utils.js +0 -141
  65. package/build/cjs/utils.js.map +0 -1
  66. package/build/types/aggregationTypes.d.ts +0 -22
  67. package/build/types/core.d.ts +0 -110
  68. package/build/types/createTable.d.ts +0 -52
  69. package/build/types/features/ColumnSizing.d.ts +0 -67
  70. package/build/types/features/Expanding.d.ts +0 -53
  71. package/build/types/features/Filters.d.ts +0 -98
  72. package/build/types/features/Grouping.d.ts +0 -82
  73. package/build/types/features/Headers.d.ts +0 -41
  74. package/build/types/features/Ordering.d.ts +0 -19
  75. package/build/types/features/Pagination.d.ts +0 -44
  76. package/build/types/features/Pinning.d.ts +0 -39
  77. package/build/types/features/RowSelection.d.ts +0 -66
  78. package/build/types/features/Sorting.d.ts +0 -78
  79. package/build/types/features/Visibility.d.ts +0 -47
  80. package/build/types/filterTypes.d.ts +0 -50
  81. package/build/types/sortTypes.d.ts +0 -18
  82. package/build/types/types.d.ts +0 -127
  83. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  84. package/build/types/utils/expandRowsFn.d.ts +0 -2
  85. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  86. package/build/types/utils/groupRowsFn.d.ts +0 -2
  87. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  88. package/build/types/utils/sortRowsFn.d.ts +0 -2
  89. package/build/types/utils.d.ts +0 -24
  90. package/src/aggregationTypes.ts +0 -115
  91. package/src/core.tsx +0 -1096
  92. package/src/createTable.tsx +0 -244
  93. package/src/features/ColumnSizing.ts +0 -453
  94. package/src/features/Expanding.ts +0 -406
  95. package/src/features/Filters.ts +0 -762
  96. package/src/features/Grouping.ts +0 -466
  97. package/src/features/Headers.ts +0 -912
  98. package/src/features/Ordering.ts +0 -133
  99. package/src/features/Pagination.ts +0 -325
  100. package/src/features/Pinning.ts +0 -198
  101. package/src/features/RowSelection.ts +0 -831
  102. package/src/features/Sorting.ts +0 -547
  103. package/src/features/Visibility.ts +0 -279
  104. package/src/filterTypes.ts +0 -251
  105. package/src/sortTypes.ts +0 -159
  106. package/src/types.ts +0 -331
  107. package/src/utils/columnFilterRowsFn.ts +0 -155
  108. package/src/utils/expandRowsFn.ts +0 -50
  109. package/src/utils/globalFilterRowsFn.ts +0 -122
  110. package/src/utils/groupRowsFn.ts +0 -194
  111. package/src/utils/paginateRowsFn.ts +0 -34
  112. package/src/utils/sortRowsFn.ts +0 -115
  113. package/src/utils.tsx +0 -195
@@ -1,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,325 +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(instance.initialState?.pagination?.pageSize ?? 10)
221
- },
222
- setPageSize: updater => {
223
- instance.setPagination(old => {
224
- const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize))
225
- const topRowIndex = old.pageSize * old.pageIndex!
226
- const pageIndex = Math.floor(topRowIndex / pageSize)
227
-
228
- return {
229
- ...old,
230
- pageIndex,
231
- pageSize,
232
- }
233
- })
234
- },
235
- setPageCount: updater =>
236
- instance.setPagination(old => {
237
- let newPageCount = functionalUpdate(updater, old.pageCount)
238
-
239
- if (typeof newPageCount === 'number') {
240
- newPageCount = Math.max(-1, newPageCount)
241
- }
242
-
243
- return {
244
- ...old,
245
- pageCount: newPageCount,
246
- }
247
- }),
248
-
249
- getPageOptions: memo(
250
- () => [
251
- instance.getState().pagination.pageSize,
252
- instance.getState().pagination.pageCount,
253
- ],
254
- (pageSize, pageCount) => {
255
- let pageOptions: number[] = []
256
- if (pageCount && pageCount > 0) {
257
- pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i)
258
- }
259
- return pageOptions
260
- },
261
- {
262
- key: 'getPageOptions',
263
- debug: instance.options.debug,
264
- }
265
- ),
266
-
267
- getCanPreviousPage: () => instance.getState().pagination.pageIndex > 0,
268
-
269
- getCanNextPage: () => {
270
- const { pageIndex, pageCount, pageSize } = instance.getState().pagination
271
-
272
- if (pageCount === -1) {
273
- return true
274
- }
275
-
276
- if (pageCount === 0) {
277
- return false
278
- }
279
-
280
- return (
281
- pageIndex <
282
- Math.ceil(instance.getPrePaginationRows().length / pageSize) - 1
283
- )
284
- },
285
-
286
- previousPage: () => {
287
- return instance.setPageIndex(old => old - 1)
288
- },
289
-
290
- nextPage: () => {
291
- return instance.setPageIndex(old => {
292
- return old + 1
293
- })
294
- },
295
-
296
- getPaginationRowModel: memo(
297
- () => [
298
- instance.getState().pagination,
299
- instance.getExpandedRowModel(),
300
- instance.options.paginateRowsFn,
301
- ],
302
- (_pagination, rowModel, paginateRowsFn) => {
303
- if (!paginateRowsFn || !rowModel.rows.length) {
304
- return rowModel
305
- }
306
-
307
- if (process.env.NODE_ENV !== 'production' && instance.options.debug)
308
- console.info('Paginating...')
309
-
310
- return paginateRowsFn(instance, rowModel)
311
- },
312
- {
313
- key: 'getPaginationRowModel',
314
- debug: instance.options.debug,
315
- }
316
- ),
317
-
318
- getPrePaginationRows: () => instance.getExpandedRowModel().rows,
319
- getPrePaginationFlatRows: () => instance.getExpandedRowModel().flatRows,
320
- getPrePaginationRowsById: () => instance.getExpandedRowModel().rowsById,
321
- getPaginationRows: () => instance.getPaginationRowModel().rows,
322
- getPaginationFlatRows: () => instance.getPaginationRowModel().flatRows,
323
- getPaginationRowsById: () => instance.getPaginationRowModel().rowsById,
324
- }
325
- }
@@ -1,198 +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(instance.initialState?.columnPinning ?? {}),
118
-
119
- pinColumn: (columnId, position) => {
120
- const column = instance.getColumn(columnId)
121
-
122
- const columnIds = column
123
- ?.getLeafColumns()
124
- .map(d => d.id)
125
- .filter(Boolean) as string[]
126
-
127
- instance.setColumnPinning(old => {
128
- if (position === 'right') {
129
- return {
130
- left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
131
- right: [
132
- ...(old?.right ?? []).filter(d => !columnIds?.includes(d)),
133
- ...columnIds,
134
- ],
135
- }
136
- }
137
-
138
- if (position === 'left') {
139
- return {
140
- left: [
141
- ...(old?.left ?? []).filter(d => !columnIds?.includes(d)),
142
- ...columnIds,
143
- ],
144
- right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
145
- }
146
- }
147
-
148
- return {
149
- left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
150
- right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
151
- }
152
- })
153
- },
154
-
155
- getColumnCanPin: columnId => {
156
- const column = instance.getColumn(columnId)
157
-
158
- if (!column) {
159
- throw new Error()
160
- }
161
-
162
- const leafColumns = column.getLeafColumns()
163
-
164
- return leafColumns.some(
165
- d =>
166
- d.enablePinning ??
167
- instance.options.enablePinning ??
168
- d.defaultCanPin ??
169
- !!d.accessorFn
170
- )
171
- },
172
-
173
- getColumnIsPinned: columnId => {
174
- const column = instance.getColumn(columnId)
175
-
176
- if (!column) {
177
- throw new Error()
178
- }
179
-
180
- const leafColumnIds = column.getLeafColumns().map(d => d.id)
181
-
182
- const { left, right } = instance.getState().columnPinning
183
-
184
- const isLeft = leafColumnIds.some(d => left?.includes(d))
185
- const isRight = leafColumnIds.some(d => right?.includes(d))
186
-
187
- return isLeft ? 'left' : isRight ? 'right' : false
188
- },
189
-
190
- getColumnPinnedIndex: columnId => {
191
- const position = instance.getColumnIsPinned(columnId)
192
-
193
- return position
194
- ? instance.getState().columnPinning?.[position]?.indexOf(columnId) ?? -1
195
- : 0
196
- },
197
- }
198
- }