@tanstack/table-core 8.0.0-alpha.10

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 (112) hide show
  1. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +112 -0
  2. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  3. package/build/cjs/aggregationTypes.js +130 -0
  4. package/build/cjs/aggregationTypes.js.map +1 -0
  5. package/build/cjs/core.js +545 -0
  6. package/build/cjs/core.js.map +1 -0
  7. package/build/cjs/createTable.js +65 -0
  8. package/build/cjs/createTable.js.map +1 -0
  9. package/build/cjs/features/ColumnSizing.js +316 -0
  10. package/build/cjs/features/ColumnSizing.js.map +1 -0
  11. package/build/cjs/features/Expanding.js +238 -0
  12. package/build/cjs/features/Expanding.js.map +1 -0
  13. package/build/cjs/features/Filters.js +413 -0
  14. package/build/cjs/features/Filters.js.map +1 -0
  15. package/build/cjs/features/Grouping.js +227 -0
  16. package/build/cjs/features/Grouping.js.map +1 -0
  17. package/build/cjs/features/Headers.js +630 -0
  18. package/build/cjs/features/Headers.js.map +1 -0
  19. package/build/cjs/features/Ordering.js +86 -0
  20. package/build/cjs/features/Ordering.js.map +1 -0
  21. package/build/cjs/features/Pagination.js +193 -0
  22. package/build/cjs/features/Pagination.js.map +1 -0
  23. package/build/cjs/features/Pinning.js +148 -0
  24. package/build/cjs/features/Pinning.js.map +1 -0
  25. package/build/cjs/features/RowSelection.js +525 -0
  26. package/build/cjs/features/RowSelection.js.map +1 -0
  27. package/build/cjs/features/Sorting.js +313 -0
  28. package/build/cjs/features/Sorting.js.map +1 -0
  29. package/build/cjs/features/Visibility.js +172 -0
  30. package/build/cjs/features/Visibility.js.map +1 -0
  31. package/build/cjs/filterTypes.js +172 -0
  32. package/build/cjs/filterTypes.js.map +1 -0
  33. package/build/cjs/index.js +75 -0
  34. package/build/cjs/index.js.map +1 -0
  35. package/build/cjs/sortTypes.js +122 -0
  36. package/build/cjs/sortTypes.js.map +1 -0
  37. package/build/cjs/types.js +22 -0
  38. package/build/cjs/types.js.map +1 -0
  39. package/build/cjs/utils/columnFilterRowsFn.js +131 -0
  40. package/build/cjs/utils/columnFilterRowsFn.js.map +1 -0
  41. package/build/cjs/utils/expandRowsFn.js +38 -0
  42. package/build/cjs/utils/expandRowsFn.js.map +1 -0
  43. package/build/cjs/utils/globalFilterRowsFn.js +101 -0
  44. package/build/cjs/utils/globalFilterRowsFn.js.map +1 -0
  45. package/build/cjs/utils/groupRowsFn.js +155 -0
  46. package/build/cjs/utils/groupRowsFn.js.map +1 -0
  47. package/build/cjs/utils/paginateRowsFn.js +44 -0
  48. package/build/cjs/utils/paginateRowsFn.js.map +1 -0
  49. package/build/cjs/utils/sortRowsFn.js +94 -0
  50. package/build/cjs/utils/sortRowsFn.js.map +1 -0
  51. package/build/cjs/utils.js +167 -0
  52. package/build/cjs/utils.js.map +1 -0
  53. package/build/esm/index.js +4689 -0
  54. package/build/esm/index.js.map +1 -0
  55. package/build/stats-html.html +2689 -0
  56. package/build/stats-react.json +939 -0
  57. package/build/types/aggregationTypes.d.ts +22 -0
  58. package/build/types/core.d.ts +105 -0
  59. package/build/types/createTable.d.ts +42 -0
  60. package/build/types/features/ColumnSizing.d.ts +75 -0
  61. package/build/types/features/Expanding.d.ts +50 -0
  62. package/build/types/features/Filters.d.ts +92 -0
  63. package/build/types/features/Grouping.d.ts +85 -0
  64. package/build/types/features/Headers.d.ts +43 -0
  65. package/build/types/features/Ordering.d.ts +21 -0
  66. package/build/types/features/Pagination.d.ts +41 -0
  67. package/build/types/features/Pinning.d.ts +41 -0
  68. package/build/types/features/RowSelection.d.ts +60 -0
  69. package/build/types/features/Sorting.d.ts +81 -0
  70. package/build/types/features/Visibility.d.ts +49 -0
  71. package/build/types/filterTypes.d.ts +50 -0
  72. package/build/types/index.d.ts +23 -0
  73. package/build/types/sortTypes.d.ts +18 -0
  74. package/build/types/types.d.ts +138 -0
  75. package/build/types/utils/columnFilterRowsFn.d.ts +2 -0
  76. package/build/types/utils/expandRowsFn.d.ts +2 -0
  77. package/build/types/utils/globalFilterRowsFn.d.ts +2 -0
  78. package/build/types/utils/groupRowsFn.d.ts +2 -0
  79. package/build/types/utils/paginateRowsFn.d.ts +2 -0
  80. package/build/types/utils/sortRowsFn.d.ts +2 -0
  81. package/build/types/utils.d.ts +23 -0
  82. package/build/umd/index.development.js +4728 -0
  83. package/build/umd/index.development.js.map +1 -0
  84. package/build/umd/index.production.js +12 -0
  85. package/build/umd/index.production.js.map +1 -0
  86. package/package.json +40 -0
  87. package/src/.DS_Store +0 -0
  88. package/src/aggregationTypes.ts +115 -0
  89. package/src/core.tsx +763 -0
  90. package/src/createTable.tsx +137 -0
  91. package/src/features/ColumnSizing.ts +432 -0
  92. package/src/features/Expanding.ts +320 -0
  93. package/src/features/Filters.ts +567 -0
  94. package/src/features/Grouping.ts +363 -0
  95. package/src/features/Headers.ts +747 -0
  96. package/src/features/Ordering.ts +112 -0
  97. package/src/features/Pagination.ts +252 -0
  98. package/src/features/Pinning.ts +177 -0
  99. package/src/features/RowSelection.ts +655 -0
  100. package/src/features/Sorting.ts +460 -0
  101. package/src/features/Visibility.ts +242 -0
  102. package/src/filterTypes.ts +188 -0
  103. package/src/index.tsx +23 -0
  104. package/src/sortTypes.ts +147 -0
  105. package/src/types.ts +311 -0
  106. package/src/utils/columnFilterRowsFn.ts +113 -0
  107. package/src/utils/expandRowsFn.ts +30 -0
  108. package/src/utils/globalFilterRowsFn.ts +89 -0
  109. package/src/utils/groupRowsFn.ts +170 -0
  110. package/src/utils/paginateRowsFn.ts +28 -0
  111. package/src/utils/sortRowsFn.ts +95 -0
  112. package/src/utils.tsx +221 -0
@@ -0,0 +1,112 @@
1
+ import { functionalUpdate, makeStateUpdater, memo } from '../utils'
2
+
3
+ import {
4
+ TableInstance,
5
+ OnChangeFn,
6
+ Updater,
7
+ Column,
8
+ PartialGenerics,
9
+ } from '../types'
10
+
11
+ import { Grouping } from './Grouping'
12
+
13
+ export type ColumnOrderState = string[]
14
+
15
+ export type ColumnOrderTableState = {
16
+ columnOrder: ColumnOrderState
17
+ }
18
+
19
+ export type ColumnOrderOptions = {
20
+ onColumnOrderChange?: OnChangeFn<ColumnOrderState>
21
+ }
22
+
23
+ export type ColumnOrderDefaultOptions = {
24
+ onColumnOrderChange: OnChangeFn<ColumnOrderState>
25
+ }
26
+
27
+ export type ColumnOrderInstance<TGenerics extends PartialGenerics> = {
28
+ setColumnOrder: (updater: Updater<ColumnOrderState>) => void
29
+ resetColumnOrder: () => void
30
+ getOrderColumnsFn: () => (columns: Column<TGenerics>[]) => Column<TGenerics>[]
31
+ }
32
+
33
+ //
34
+
35
+ export const Ordering = {
36
+ getInitialState: (): ColumnOrderTableState => {
37
+ return {
38
+ columnOrder: [],
39
+ }
40
+ },
41
+
42
+ getDefaultOptions: <TGenerics extends PartialGenerics>(
43
+ instance: TableInstance<TGenerics>
44
+ ): ColumnOrderDefaultOptions => {
45
+ return {
46
+ onColumnOrderChange: makeStateUpdater('columnOrder', instance),
47
+ }
48
+ },
49
+
50
+ getInstance: <TGenerics extends PartialGenerics>(
51
+ instance: TableInstance<TGenerics>
52
+ ): ColumnOrderInstance<TGenerics> => {
53
+ return {
54
+ setColumnOrder: updater =>
55
+ instance.options.onColumnOrderChange?.(
56
+ updater,
57
+ functionalUpdate(updater, instance.getState().columnOrder)
58
+ ),
59
+ resetColumnOrder: () => {
60
+ instance.setColumnOrder(instance.initialState.columnOrder ?? [])
61
+ },
62
+ getOrderColumnsFn: memo(
63
+ () => [
64
+ instance.getState().columnOrder,
65
+ instance.getState().grouping,
66
+ instance.options.groupedColumnMode,
67
+ ],
68
+ (columnOrder, grouping, groupedColumnMode) => columns => {
69
+ // Sort grouped columns to the start of the column list
70
+ // before the headers are built
71
+ let orderedColumns: Column<TGenerics>[] = []
72
+
73
+ // If there is no order, return the normal columns
74
+ if (!columnOrder?.length) {
75
+ orderedColumns = columns
76
+ } else {
77
+ const columnOrderCopy = [...columnOrder]
78
+
79
+ // If there is an order, make a copy of the columns
80
+ const columnsCopy = [...columns]
81
+
82
+ // And make a new ordered array of the columns
83
+
84
+ // Loop over the columns and place them in order into the new array
85
+ while (columnsCopy.length && columnOrderCopy.length) {
86
+ const targetColumnId = columnOrderCopy.shift()
87
+ const foundIndex = columnsCopy.findIndex(
88
+ d => d.id === targetColumnId
89
+ )
90
+ if (foundIndex > -1) {
91
+ orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]!)
92
+ }
93
+ }
94
+
95
+ // If there are any columns left, add them to the end
96
+ orderedColumns = [...orderedColumns, ...columnsCopy]
97
+ }
98
+
99
+ return Grouping.orderColumns(
100
+ orderedColumns,
101
+ grouping,
102
+ groupedColumnMode
103
+ )
104
+ },
105
+ {
106
+ key: 'getOrderColumnsFn',
107
+ // debug: () => instance.options.debugAll ?? instance.options.debugTable,
108
+ }
109
+ ),
110
+ }
111
+ },
112
+ }
@@ -0,0 +1,252 @@
1
+ import {
2
+ OnChangeFn,
3
+ PartialGenerics,
4
+ TableInstance,
5
+ RowModel,
6
+ Updater,
7
+ } from '../types'
8
+ import { functionalUpdate, makeStateUpdater, memo } from '../utils'
9
+
10
+ export type PaginationState = {
11
+ pageIndex: number
12
+ pageSize: number
13
+ pageCount: number
14
+ }
15
+
16
+ export type PaginationTableState = {
17
+ pagination: PaginationState
18
+ }
19
+
20
+ export type PaginationOptions<TGenerics extends PartialGenerics> = {
21
+ onPaginationChange?: OnChangeFn<PaginationState>
22
+ autoResetPageIndex?: boolean
23
+ paginateRowsFn?: (
24
+ instance: TableInstance<TGenerics>,
25
+ rowModel: RowModel<TGenerics>
26
+ ) => RowModel<TGenerics>
27
+ }
28
+
29
+ export type PaginationDefaultOptions = {
30
+ onPaginationChange: OnChangeFn<PaginationState>
31
+ autoResetPageIndex: boolean
32
+ }
33
+
34
+ export type PaginationInstance<TGenerics extends PartialGenerics> = {
35
+ _notifyPageIndexReset: () => void
36
+ setPagination: (updater: Updater<PaginationState>) => void
37
+ resetPagination: () => void
38
+ setPageIndex: (updater: Updater<number>) => void
39
+ resetPageIndex: () => void
40
+ setPageSize: (updater: Updater<number>) => void
41
+ resetPageSize: () => void
42
+ setPageCount: (updater: Updater<number>) => void
43
+ getPageOptions: () => number[]
44
+ getCanPreviousPage: () => boolean
45
+ getCanNextPage: () => boolean
46
+ previousPage: () => void
47
+ nextPage: () => void
48
+ getPrePaginationRowModel: () => RowModel<TGenerics>
49
+ getPaginationRowModel: () => RowModel<TGenerics>
50
+ getPageCount: () => number
51
+ }
52
+
53
+ //
54
+
55
+ export const Pagination = {
56
+ getInitialState: (): PaginationTableState => {
57
+ return {
58
+ pagination: {
59
+ pageCount: -1,
60
+ pageIndex: 0,
61
+ pageSize: 10,
62
+ },
63
+ }
64
+ },
65
+
66
+ getDefaultOptions: <TGenerics extends PartialGenerics>(
67
+ instance: TableInstance<TGenerics>
68
+ ): PaginationDefaultOptions => {
69
+ return {
70
+ onPaginationChange: makeStateUpdater('pagination', instance),
71
+ autoResetPageIndex: true,
72
+ }
73
+ },
74
+
75
+ getInstance: <TGenerics extends PartialGenerics>(
76
+ instance: TableInstance<TGenerics>
77
+ ): PaginationInstance<TGenerics> => {
78
+ let registered = false
79
+ return {
80
+ _notifyPageIndexReset: () => {
81
+ if (!registered) {
82
+ registered = true
83
+ return
84
+ }
85
+
86
+ if (instance.options.autoResetAll === false) {
87
+ return
88
+ }
89
+
90
+ if (
91
+ instance.options.autoResetAll === true ||
92
+ instance.options.autoResetPageIndex
93
+ ) {
94
+ instance.resetPageIndex()
95
+ }
96
+ },
97
+ setPagination: updater => {
98
+ const safeUpdater: Updater<PaginationState> = old => {
99
+ let newState = functionalUpdate(updater, old)
100
+
101
+ return newState
102
+ }
103
+
104
+ return instance.options.onPaginationChange?.(
105
+ safeUpdater,
106
+ functionalUpdate(safeUpdater, instance.getState().pagination)
107
+ )
108
+ },
109
+ resetPagination: () => {
110
+ instance.setPagination(
111
+ instance.initialState.pagination ?? {
112
+ pageIndex: 0,
113
+ pageSize: 10,
114
+ pageCount: -1,
115
+ }
116
+ )
117
+ },
118
+ setPageIndex: updater => {
119
+ instance.setPagination(old => {
120
+ let pageIndex = functionalUpdate(updater, old.pageIndex)
121
+
122
+ const maxPageIndex =
123
+ old.pageCount && old.pageCount > 0
124
+ ? old.pageCount - 1
125
+ : Number.MAX_SAFE_INTEGER
126
+
127
+ pageIndex = Math.min(Math.max(0, pageIndex), maxPageIndex)
128
+
129
+ return {
130
+ ...old,
131
+ pageIndex,
132
+ }
133
+ })
134
+ },
135
+ resetPageIndex: () => {
136
+ instance.setPageIndex(0)
137
+ },
138
+ resetPageSize: () => {
139
+ instance.setPageSize(instance.initialState?.pagination?.pageSize ?? 10)
140
+ },
141
+ setPageSize: updater => {
142
+ instance.setPagination(old => {
143
+ const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize))
144
+ const topRowIndex = old.pageSize * old.pageIndex!
145
+ const pageIndex = Math.floor(topRowIndex / pageSize)
146
+
147
+ return {
148
+ ...old,
149
+ pageIndex,
150
+ pageSize,
151
+ }
152
+ })
153
+ },
154
+ setPageCount: updater =>
155
+ instance.setPagination(old => {
156
+ let newPageCount = functionalUpdate(updater, old.pageCount)
157
+
158
+ if (typeof newPageCount === 'number') {
159
+ newPageCount = Math.max(-1, newPageCount)
160
+ }
161
+
162
+ return {
163
+ ...old,
164
+ pageCount: newPageCount,
165
+ }
166
+ }),
167
+
168
+ getPageOptions: memo(
169
+ () => [
170
+ instance.getState().pagination.pageSize,
171
+ instance.getState().pagination.pageCount,
172
+ ],
173
+ (pageSize, pageCount) => {
174
+ let pageOptions: number[] = []
175
+ if (pageCount && pageCount > 0) {
176
+ pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i)
177
+ }
178
+ return pageOptions
179
+ },
180
+ {
181
+ key: 'getPageOptions',
182
+ debug: () => instance.options.debugAll ?? instance.options.debugTable,
183
+ }
184
+ ),
185
+
186
+ getCanPreviousPage: () => instance.getState().pagination.pageIndex > 0,
187
+
188
+ getCanNextPage: () => {
189
+ const { pageIndex, pageCount, pageSize } =
190
+ instance.getState().pagination
191
+
192
+ if (pageCount === -1) {
193
+ return true
194
+ }
195
+
196
+ if (pageCount === 0) {
197
+ return false
198
+ }
199
+
200
+ return (
201
+ pageIndex <
202
+ Math.ceil(
203
+ instance.getPrePaginationRowModel().rows.length / pageSize
204
+ ) -
205
+ 1
206
+ )
207
+ },
208
+
209
+ previousPage: () => {
210
+ return instance.setPageIndex(old => old - 1)
211
+ },
212
+
213
+ nextPage: () => {
214
+ return instance.setPageIndex(old => {
215
+ return old + 1
216
+ })
217
+ },
218
+
219
+ getPrePaginationRowModel: () => instance.getExpandedRowModel(),
220
+ getPaginationRowModel: memo(
221
+ () => [
222
+ instance.getState().pagination,
223
+ instance.getExpandedRowModel(),
224
+ instance.options.paginateRowsFn,
225
+ ],
226
+ (_pagination, rowModel, paginateRowsFn) => {
227
+ if (!paginateRowsFn || !rowModel.rows.length) {
228
+ return rowModel
229
+ }
230
+
231
+ return paginateRowsFn(instance, rowModel)
232
+ },
233
+ {
234
+ key: 'getPaginationRowModel',
235
+ debug: () => instance.options.debugAll ?? instance.options.debugTable,
236
+ }
237
+ ),
238
+
239
+ getPageCount: () => {
240
+ const { pageCount } = instance.getState().pagination
241
+ if (pageCount > 0) {
242
+ return pageCount
243
+ }
244
+
245
+ return Math.ceil(
246
+ instance.getPrePaginationRowModel().rows.length /
247
+ instance.getState().pagination.pageSize
248
+ )
249
+ },
250
+ }
251
+ },
252
+ }
@@ -0,0 +1,177 @@
1
+ import {
2
+ OnChangeFn,
3
+ Updater,
4
+ TableInstance,
5
+ Column,
6
+ PartialGenerics,
7
+ } from '../types'
8
+ import { functionalUpdate, makeStateUpdater } from '../utils'
9
+
10
+ type ColumnPinningPosition = false | 'left' | 'right'
11
+
12
+ export type ColumnPinningState = {
13
+ left?: string[]
14
+ right?: string[]
15
+ }
16
+
17
+ export type ColumnPinningTableState = {
18
+ columnPinning: ColumnPinningState
19
+ }
20
+
21
+ export type ColumnPinningOptions = {
22
+ onColumnPinningChange?: OnChangeFn<ColumnPinningState>
23
+ enablePinning?: boolean
24
+ }
25
+
26
+ export type ColumnPinningDefaultOptions = {
27
+ onColumnPinningChange: OnChangeFn<ColumnPinningState>
28
+ }
29
+
30
+ export type ColumnPinningColumnDef = {
31
+ enablePinning?: boolean
32
+ defaultCanPin?: boolean
33
+ }
34
+
35
+ export type ColumnPinningColumn = {
36
+ getCanPin: () => boolean
37
+ getPinnedIndex: () => number
38
+ getIsPinned: () => ColumnPinningPosition
39
+ pin: (position: ColumnPinningPosition) => void
40
+ }
41
+
42
+ export type ColumnPinningInstance<TGenerics extends PartialGenerics> = {
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 const Pinning = {
54
+ getInitialState: (): ColumnPinningTableState => {
55
+ return {
56
+ columnPinning: {
57
+ left: [],
58
+ right: [],
59
+ },
60
+ }
61
+ },
62
+
63
+ getDefaultOptions: <TGenerics extends PartialGenerics>(
64
+ instance: TableInstance<TGenerics>
65
+ ): ColumnPinningDefaultOptions => {
66
+ return {
67
+ onColumnPinningChange: makeStateUpdater('columnPinning', instance),
68
+ }
69
+ },
70
+
71
+ createColumn: <TGenerics extends PartialGenerics>(
72
+ column: Column<TGenerics>,
73
+ instance: TableInstance<TGenerics>
74
+ ): ColumnPinningColumn => {
75
+ return {
76
+ getCanPin: () => instance.getColumnCanPin(column.id),
77
+ getPinnedIndex: () => instance.getColumnPinnedIndex(column.id),
78
+ getIsPinned: () => instance.getColumnIsPinned(column.id),
79
+ pin: position => instance.pinColumn(column.id, position),
80
+ }
81
+ },
82
+
83
+ getInstance: <TGenerics extends PartialGenerics>(
84
+ instance: TableInstance<TGenerics>
85
+ ): ColumnPinningInstance<TGenerics> => {
86
+ return {
87
+ setColumnPinning: updater =>
88
+ instance.options.onColumnPinningChange?.(
89
+ updater,
90
+ functionalUpdate(updater, instance.getState().columnPinning)
91
+ ),
92
+
93
+ resetColumnPinning: () =>
94
+ instance.setColumnPinning(instance.initialState?.columnPinning ?? {}),
95
+
96
+ pinColumn: (columnId, position) => {
97
+ const column = instance.getColumn(columnId)
98
+
99
+ const columnIds = column
100
+ ?.getLeafColumns()
101
+ .map(d => d.id)
102
+ .filter(Boolean) as string[]
103
+
104
+ instance.setColumnPinning(old => {
105
+ if (position === 'right') {
106
+ return {
107
+ left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
108
+ right: [
109
+ ...(old?.right ?? []).filter(d => !columnIds?.includes(d)),
110
+ ...columnIds,
111
+ ],
112
+ }
113
+ }
114
+
115
+ if (position === 'left') {
116
+ return {
117
+ left: [
118
+ ...(old?.left ?? []).filter(d => !columnIds?.includes(d)),
119
+ ...columnIds,
120
+ ],
121
+ right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
122
+ }
123
+ }
124
+
125
+ return {
126
+ left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),
127
+ right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),
128
+ }
129
+ })
130
+ },
131
+
132
+ getColumnCanPin: columnId => {
133
+ const column = instance.getColumn(columnId)
134
+
135
+ if (!column) {
136
+ throw new Error()
137
+ }
138
+
139
+ const leafColumns = column.getLeafColumns()
140
+
141
+ return leafColumns.some(
142
+ d =>
143
+ d.enablePinning ??
144
+ instance.options.enablePinning ??
145
+ d.defaultCanPin ??
146
+ !!d.accessorFn
147
+ )
148
+ },
149
+
150
+ getColumnIsPinned: columnId => {
151
+ const column = instance.getColumn(columnId)
152
+
153
+ if (!column) {
154
+ throw new Error()
155
+ }
156
+
157
+ const leafColumnIds = column.getLeafColumns().map(d => d.id)
158
+
159
+ const { left, right } = instance.getState().columnPinning
160
+
161
+ const isLeft = leafColumnIds.some(d => left?.includes(d))
162
+ const isRight = leafColumnIds.some(d => right?.includes(d))
163
+
164
+ return isLeft ? 'left' : isRight ? 'right' : false
165
+ },
166
+
167
+ getColumnPinnedIndex: columnId => {
168
+ const position = instance.getColumnIsPinned(columnId)
169
+
170
+ return position
171
+ ? instance.getState().columnPinning?.[position]?.indexOf(columnId) ??
172
+ -1
173
+ : 0
174
+ },
175
+ }
176
+ },
177
+ }