@tanstack/react-table 8.0.0-alpha.9 → 8.0.0-beta.2
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.
- package/build/cjs/react-table/src/index.js +139 -0
- package/build/cjs/react-table/src/index.js.map +1 -0
- package/build/cjs/table-core/build/esm/index.js +3867 -0
- package/build/cjs/table-core/build/esm/index.js.map +1 -0
- package/build/esm/index.js +3196 -4117
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +24 -813
- package/build/types/index.d.ts +16 -9
- package/build/umd/index.development.js +3234 -4125
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +11 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +10 -6
- package/src/index.tsx +111 -9
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
- package/build/cjs/aggregationTypes.js +0 -130
- package/build/cjs/aggregationTypes.js.map +0 -1
- package/build/cjs/core.js +0 -545
- package/build/cjs/core.js.map +0 -1
- package/build/cjs/createTable.js +0 -122
- package/build/cjs/createTable.js.map +0 -1
- package/build/cjs/features/ColumnSizing.js +0 -318
- package/build/cjs/features/ColumnSizing.js.map +0 -1
- package/build/cjs/features/Expanding.js +0 -239
- package/build/cjs/features/Expanding.js.map +0 -1
- package/build/cjs/features/Filters.js +0 -414
- package/build/cjs/features/Filters.js.map +0 -1
- package/build/cjs/features/Grouping.js +0 -232
- package/build/cjs/features/Grouping.js.map +0 -1
- package/build/cjs/features/Headers.js +0 -629
- package/build/cjs/features/Headers.js.map +0 -1
- package/build/cjs/features/Ordering.js +0 -86
- package/build/cjs/features/Ordering.js.map +0 -1
- package/build/cjs/features/Pagination.js +0 -193
- package/build/cjs/features/Pagination.js.map +0 -1
- package/build/cjs/features/Pinning.js +0 -149
- package/build/cjs/features/Pinning.js.map +0 -1
- package/build/cjs/features/RowSelection.js +0 -526
- package/build/cjs/features/RowSelection.js.map +0 -1
- package/build/cjs/features/Sorting.js +0 -315
- package/build/cjs/features/Sorting.js.map +0 -1
- package/build/cjs/features/Visibility.js +0 -174
- package/build/cjs/features/Visibility.js.map +0 -1
- package/build/cjs/filterTypes.js +0 -172
- package/build/cjs/filterTypes.js.map +0 -1
- package/build/cjs/index.js +0 -44
- package/build/cjs/index.js.map +0 -1
- package/build/cjs/sortTypes.js +0 -122
- package/build/cjs/sortTypes.js.map +0 -1
- package/build/cjs/types.js +0 -22
- package/build/cjs/types.js.map +0 -1
- package/build/cjs/utils/columnFilterRowsFn.js +0 -131
- package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
- package/build/cjs/utils/expandRowsFn.js +0 -38
- package/build/cjs/utils/expandRowsFn.js.map +0 -1
- package/build/cjs/utils/globalFilterRowsFn.js +0 -101
- package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
- package/build/cjs/utils/groupRowsFn.js +0 -155
- package/build/cjs/utils/groupRowsFn.js.map +0 -1
- package/build/cjs/utils/paginateRowsFn.js +0 -44
- package/build/cjs/utils/paginateRowsFn.js.map +0 -1
- package/build/cjs/utils/sortRowsFn.js +0 -94
- package/build/cjs/utils/sortRowsFn.js.map +0 -1
- package/build/cjs/utils.js +0 -167
- package/build/cjs/utils.js.map +0 -1
- package/build/types/aggregationTypes.d.ts +0 -22
- package/build/types/core.d.ts +0 -105
- package/build/types/createTable.d.ts +0 -42
- package/build/types/features/ColumnSizing.d.ts +0 -73
- package/build/types/features/Expanding.d.ts +0 -48
- package/build/types/features/Filters.d.ts +0 -90
- package/build/types/features/Grouping.d.ts +0 -83
- package/build/types/features/Headers.d.ts +0 -41
- package/build/types/features/Ordering.d.ts +0 -19
- package/build/types/features/Pagination.d.ts +0 -39
- package/build/types/features/Pinning.d.ts +0 -39
- package/build/types/features/RowSelection.d.ts +0 -58
- package/build/types/features/Sorting.d.ts +0 -79
- package/build/types/features/Visibility.d.ts +0 -47
- package/build/types/filterTypes.d.ts +0 -50
- package/build/types/sortTypes.d.ts +0 -18
- package/build/types/types.d.ts +0 -138
- package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
- package/build/types/utils/expandRowsFn.d.ts +0 -2
- package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
- package/build/types/utils/groupRowsFn.d.ts +0 -2
- package/build/types/utils/paginateRowsFn.d.ts +0 -2
- package/build/types/utils/sortRowsFn.d.ts +0 -2
- package/build/types/utils.d.ts +0 -23
- package/src/aggregationTypes.ts +0 -115
- package/src/core.tsx +0 -763
- package/src/createTable.tsx +0 -186
- package/src/features/ColumnSizing.ts +0 -424
- package/src/features/Expanding.ts +0 -318
- package/src/features/Filters.ts +0 -560
- package/src/features/Grouping.ts +0 -361
- package/src/features/Headers.ts +0 -729
- package/src/features/Ordering.ts +0 -110
- package/src/features/Pagination.ts +0 -250
- package/src/features/Pinning.ts +0 -174
- package/src/features/RowSelection.ts +0 -651
- package/src/features/Sorting.ts +0 -453
- package/src/features/Visibility.ts +0 -238
- package/src/filterTypes.ts +0 -188
- package/src/sortTypes.ts +0 -147
- package/src/types.ts +0 -311
- package/src/utils/columnFilterRowsFn.ts +0 -113
- package/src/utils/expandRowsFn.ts +0 -30
- package/src/utils/globalFilterRowsFn.ts +0 -89
- package/src/utils/groupRowsFn.ts +0 -170
- package/src/utils/paginateRowsFn.ts +0 -28
- package/src/utils/sortRowsFn.ts +0 -95
- package/src/utils.tsx +0 -221
|
@@ -1,651 +0,0 @@
|
|
|
1
|
-
import React, { MouseEvent, TouchEvent } from 'react'
|
|
2
|
-
import {
|
|
3
|
-
Getter,
|
|
4
|
-
OnChangeFn,
|
|
5
|
-
PartialGenerics,
|
|
6
|
-
PropGetterValue,
|
|
7
|
-
TableInstance,
|
|
8
|
-
Row,
|
|
9
|
-
RowModel,
|
|
10
|
-
Updater,
|
|
11
|
-
} from '../types'
|
|
12
|
-
import { functionalUpdate, makeStateUpdater, memo, propGetter } from '../utils'
|
|
13
|
-
|
|
14
|
-
export type RowSelectionState = Record<string, boolean>
|
|
15
|
-
|
|
16
|
-
export type RowSelectionTableState = {
|
|
17
|
-
rowSelection: RowSelectionState
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export type RowSelectionOptions<TGenerics extends PartialGenerics> = {
|
|
21
|
-
onRowSelectionChange?: OnChangeFn<RowSelectionState>
|
|
22
|
-
autoResetRowSelection?: boolean
|
|
23
|
-
enableRowSelection?: boolean | ((row: Row<TGenerics>) => boolean)
|
|
24
|
-
enableMultiRowSelection?: boolean | ((row: Row<TGenerics>) => boolean)
|
|
25
|
-
enableSubRowSelection?: boolean | ((row: Row<TGenerics>) => boolean)
|
|
26
|
-
// enableGroupingRowSelection?:
|
|
27
|
-
// | boolean
|
|
28
|
-
// | ((
|
|
29
|
-
// row: Row<TGenerics>
|
|
30
|
-
// ) => boolean)
|
|
31
|
-
// isAdditiveSelectEvent?: (e: MouseEvent | TouchEvent) => boolean
|
|
32
|
-
// isInclusiveSelectEvent?: (e: MouseEvent | TouchEvent) => boolean
|
|
33
|
-
// selectRowsFn?: (
|
|
34
|
-
// instance: TableInstance<
|
|
35
|
-
// TData,
|
|
36
|
-
// TValue,
|
|
37
|
-
// TFilterFns,
|
|
38
|
-
// TSortingFns,
|
|
39
|
-
// TAggregationFns
|
|
40
|
-
// >,
|
|
41
|
-
// rowModel: RowModel<TGenerics>
|
|
42
|
-
// ) => RowModel<TGenerics>
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
type ToggleRowSelectedProps = {
|
|
46
|
-
onChange?: (e: MouseEvent | TouchEvent) => void
|
|
47
|
-
checked?: boolean
|
|
48
|
-
title?: string
|
|
49
|
-
indeterminate?: boolean
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export type RowSelectionRow = {
|
|
53
|
-
getIsSelected: () => boolean
|
|
54
|
-
getIsSomeSelected: () => boolean
|
|
55
|
-
getCanSelect: () => boolean
|
|
56
|
-
getCanMultiSelect: () => boolean
|
|
57
|
-
toggleSelected: (value?: boolean) => void
|
|
58
|
-
getToggleSelectedProps: <TGetter extends Getter<ToggleRowSelectedProps>>(
|
|
59
|
-
userProps?: TGetter
|
|
60
|
-
) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export type RowSelectionInstance<TGenerics extends PartialGenerics> = {
|
|
64
|
-
_notifyRowSelectionReset: () => void
|
|
65
|
-
getToggleRowSelectedProps: <TGetter extends Getter<ToggleRowSelectedProps>>(
|
|
66
|
-
rowId: string,
|
|
67
|
-
userProps?: TGetter
|
|
68
|
-
) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
|
|
69
|
-
getToggleAllRowsSelectedProps: <
|
|
70
|
-
TGetter extends Getter<ToggleRowSelectedProps>
|
|
71
|
-
>(
|
|
72
|
-
userProps?: TGetter
|
|
73
|
-
) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
|
|
74
|
-
getToggleAllPageRowsSelectedProps: <
|
|
75
|
-
TGetter extends Getter<ToggleRowSelectedProps>
|
|
76
|
-
>(
|
|
77
|
-
userProps?: TGetter
|
|
78
|
-
) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
|
|
79
|
-
setRowSelection: (updater: Updater<RowSelectionState>) => void
|
|
80
|
-
resetRowSelection: () => void
|
|
81
|
-
toggleRowSelected: (rowId: string, value?: boolean) => void
|
|
82
|
-
getRowCanSelect: (rowId: string) => boolean
|
|
83
|
-
getRowCanSelectSubRows: (rowId: string) => boolean
|
|
84
|
-
getRowCanMultiSelect: (rowId: string) => boolean
|
|
85
|
-
// getGroupingRowCanSelect: (rowId: string) => boolean
|
|
86
|
-
getRowIsSelected: (rowId: string) => boolean
|
|
87
|
-
getRowIsSomeSelected: (rowId: string) => boolean
|
|
88
|
-
getIsAllRowsSelected: () => boolean
|
|
89
|
-
getIsAllPageRowsSelected: () => boolean
|
|
90
|
-
getIsSomeRowsSelected: () => boolean
|
|
91
|
-
getIsSomePageRowsSelected: () => boolean
|
|
92
|
-
toggleAllRowsSelected: (value: boolean) => void
|
|
93
|
-
toggleAllPageRowsSelected: (value: boolean) => void
|
|
94
|
-
getPreSelectedRowModel: () => RowModel<TGenerics>
|
|
95
|
-
getSelectedRowModel: () => RowModel<TGenerics>
|
|
96
|
-
getFilteredSelectedRowModel: () => RowModel<TGenerics>
|
|
97
|
-
getGroupedSelectedRowModel: () => RowModel<TGenerics>
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
//
|
|
101
|
-
|
|
102
|
-
export function getInitialState(): RowSelectionTableState {
|
|
103
|
-
return {
|
|
104
|
-
rowSelection: {},
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export function getDefaultOptions<TGenerics extends PartialGenerics>(
|
|
109
|
-
instance: TableInstance<TGenerics>
|
|
110
|
-
): RowSelectionOptions<TGenerics> {
|
|
111
|
-
return {
|
|
112
|
-
onRowSelectionChange: makeStateUpdater('rowSelection', instance),
|
|
113
|
-
autoResetRowSelection: true,
|
|
114
|
-
enableRowSelection: true,
|
|
115
|
-
enableMultiRowSelection: true,
|
|
116
|
-
enableSubRowSelection: true,
|
|
117
|
-
// enableGroupingRowSelection: false,
|
|
118
|
-
// isAdditiveSelectEvent: (e: MouseEvent | TouchEvent) => !!e.metaKey,
|
|
119
|
-
// isInclusiveSelectEvent: (e: MouseEvent | TouchEvent) => !!e.shiftKey,
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export function getInstance<TGenerics extends PartialGenerics>(
|
|
124
|
-
instance: TableInstance<TGenerics>
|
|
125
|
-
): RowSelectionInstance<TGenerics> {
|
|
126
|
-
let registered = false
|
|
127
|
-
|
|
128
|
-
// const pageRows = instance.getPageRows()
|
|
129
|
-
|
|
130
|
-
return {
|
|
131
|
-
_notifyRowSelectionReset: () => {
|
|
132
|
-
if (!registered) {
|
|
133
|
-
registered = true
|
|
134
|
-
return
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
if (instance.options.autoResetAll === false) {
|
|
138
|
-
return
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
if (
|
|
142
|
-
instance.options.autoResetAll === true ||
|
|
143
|
-
instance.options.autoResetRowSelection
|
|
144
|
-
) {
|
|
145
|
-
instance.resetRowSelection()
|
|
146
|
-
}
|
|
147
|
-
},
|
|
148
|
-
setRowSelection: updater =>
|
|
149
|
-
instance.options.onRowSelectionChange?.(
|
|
150
|
-
updater,
|
|
151
|
-
functionalUpdate(updater, instance.getState().rowSelection)
|
|
152
|
-
),
|
|
153
|
-
resetRowSelection: () =>
|
|
154
|
-
instance.setRowSelection(getInitialState().rowSelection ?? {}),
|
|
155
|
-
toggleAllRowsSelected: value => {
|
|
156
|
-
instance.setRowSelection(old => {
|
|
157
|
-
value =
|
|
158
|
-
typeof value !== 'undefined'
|
|
159
|
-
? value
|
|
160
|
-
: !instance.getIsAllRowsSelected()
|
|
161
|
-
|
|
162
|
-
// Only remove/add the rows that are visible on the screen
|
|
163
|
-
// Leave all the other rows that are selected alone.
|
|
164
|
-
const rowSelection = Object.assign({}, old)
|
|
165
|
-
|
|
166
|
-
const preGroupedFlatRows = instance.getPreGroupedRowModel().flatRows
|
|
167
|
-
|
|
168
|
-
// We don't use `mutateRowIsSelected` here for performance reasons.
|
|
169
|
-
// All of the rows are flat already, so it wouldn't be worth it
|
|
170
|
-
if (value) {
|
|
171
|
-
preGroupedFlatRows.forEach(row => {
|
|
172
|
-
rowSelection[row.id] = true
|
|
173
|
-
})
|
|
174
|
-
} else {
|
|
175
|
-
preGroupedFlatRows.forEach(row => {
|
|
176
|
-
delete rowSelection[row.id]
|
|
177
|
-
})
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
return rowSelection
|
|
181
|
-
})
|
|
182
|
-
},
|
|
183
|
-
toggleAllPageRowsSelected: value =>
|
|
184
|
-
instance.setRowSelection(old => {
|
|
185
|
-
const selectAll =
|
|
186
|
-
typeof value !== 'undefined'
|
|
187
|
-
? value
|
|
188
|
-
: !instance.getIsAllPageRowsSelected()
|
|
189
|
-
|
|
190
|
-
const rowSelection: RowSelectionState = { ...old }
|
|
191
|
-
|
|
192
|
-
instance.getRowModel().rows.forEach(row => {
|
|
193
|
-
mutateRowIsSelected(rowSelection, row.id, value, instance)
|
|
194
|
-
})
|
|
195
|
-
|
|
196
|
-
return rowSelection
|
|
197
|
-
}),
|
|
198
|
-
toggleRowSelected: (rowId, value) => {
|
|
199
|
-
const row = instance.getRow(rowId)
|
|
200
|
-
const isSelected = row.getIsSelected()
|
|
201
|
-
|
|
202
|
-
instance.setRowSelection(old => {
|
|
203
|
-
value = typeof value !== 'undefined' ? value : !isSelected
|
|
204
|
-
|
|
205
|
-
if (isSelected === value) {
|
|
206
|
-
return old
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
const selectedRowIds = { ...old }
|
|
210
|
-
|
|
211
|
-
mutateRowIsSelected(selectedRowIds, rowId, value, instance)
|
|
212
|
-
|
|
213
|
-
return selectedRowIds
|
|
214
|
-
})
|
|
215
|
-
},
|
|
216
|
-
// addRowSelectionRange: rowId => {
|
|
217
|
-
// const {
|
|
218
|
-
// rows,
|
|
219
|
-
// rowsById,
|
|
220
|
-
// options: { selectGroupingRows, selectSubRows },
|
|
221
|
-
// } = instance
|
|
222
|
-
|
|
223
|
-
// const findSelectedRow = (rows: Row[]) => {
|
|
224
|
-
// let found
|
|
225
|
-
// rows.find(d => {
|
|
226
|
-
// if (d.getIsSelected()) {
|
|
227
|
-
// found = d
|
|
228
|
-
// return true
|
|
229
|
-
// }
|
|
230
|
-
// const subFound = findSelectedRow(d.subRows || [])
|
|
231
|
-
// if (subFound) {
|
|
232
|
-
// found = subFound
|
|
233
|
-
// return true
|
|
234
|
-
// }
|
|
235
|
-
// return false
|
|
236
|
-
// })
|
|
237
|
-
// return found
|
|
238
|
-
// }
|
|
239
|
-
|
|
240
|
-
// const firstRow = findSelectedRow(rows) || rows[0]
|
|
241
|
-
// const lastRow = rowsById[rowId]
|
|
242
|
-
|
|
243
|
-
// let include = false
|
|
244
|
-
// const selectedRowIds = {}
|
|
245
|
-
|
|
246
|
-
// const addRow = (row: Row) => {
|
|
247
|
-
// mutateRowIsSelected(selectedRowIds, row.id, true, {
|
|
248
|
-
// rowsById,
|
|
249
|
-
// selectGroupingRows: selectGroupingRows!,
|
|
250
|
-
// selectSubRows: selectSubRows!,
|
|
251
|
-
// })
|
|
252
|
-
// }
|
|
253
|
-
|
|
254
|
-
// instance.rows.forEach(row => {
|
|
255
|
-
// const isFirstRow = row.id === firstRow.id
|
|
256
|
-
// const isLastRow = row.id === lastRow.id
|
|
257
|
-
|
|
258
|
-
// if (isFirstRow || isLastRow) {
|
|
259
|
-
// if (!include) {
|
|
260
|
-
// include = true
|
|
261
|
-
// } else if (include) {
|
|
262
|
-
// addRow(row)
|
|
263
|
-
// include = false
|
|
264
|
-
// }
|
|
265
|
-
// }
|
|
266
|
-
|
|
267
|
-
// if (include) {
|
|
268
|
-
// addRow(row)
|
|
269
|
-
// }
|
|
270
|
-
// })
|
|
271
|
-
|
|
272
|
-
// instance.setRowSelection(selectedRowIds)
|
|
273
|
-
// },
|
|
274
|
-
getPreSelectedRowModel: () => instance.getCoreRowModel(),
|
|
275
|
-
getSelectedRowModel: memo(
|
|
276
|
-
() => [instance.getState().rowSelection, instance.getCoreRowModel()],
|
|
277
|
-
(rowSelection, rowModel) => {
|
|
278
|
-
if (!Object.keys(rowSelection).length) {
|
|
279
|
-
return {
|
|
280
|
-
rows: [],
|
|
281
|
-
flatRows: [],
|
|
282
|
-
rowsById: {},
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
return selectRowsFn(instance, rowModel)
|
|
287
|
-
},
|
|
288
|
-
{
|
|
289
|
-
key: 'getSelectedRowModel',
|
|
290
|
-
debug: () => instance.options.debugAll ?? instance.options.debugTable,
|
|
291
|
-
onChange: () => instance._notifyExpandedReset(),
|
|
292
|
-
}
|
|
293
|
-
),
|
|
294
|
-
|
|
295
|
-
getFilteredSelectedRowModel: memo(
|
|
296
|
-
() => [
|
|
297
|
-
instance.getState().rowSelection,
|
|
298
|
-
instance.getGlobalFilteredRowModel(),
|
|
299
|
-
],
|
|
300
|
-
(rowSelection, rowModel) => {
|
|
301
|
-
if (!Object.keys(rowSelection).length) {
|
|
302
|
-
return {
|
|
303
|
-
rows: [],
|
|
304
|
-
flatRows: [],
|
|
305
|
-
rowsById: {},
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
return selectRowsFn(instance, rowModel)
|
|
310
|
-
},
|
|
311
|
-
{
|
|
312
|
-
key: 'getFilteredSelectedRowModel',
|
|
313
|
-
debug: () => instance.options.debugAll ?? instance.options.debugTable,
|
|
314
|
-
onChange: () => instance._notifyExpandedReset(),
|
|
315
|
-
}
|
|
316
|
-
),
|
|
317
|
-
|
|
318
|
-
getGroupedSelectedRowModel: memo(
|
|
319
|
-
() => [instance.getState().rowSelection, instance.getGroupedRowModel()],
|
|
320
|
-
(rowSelection, rowModel) => {
|
|
321
|
-
if (!Object.keys(rowSelection).length) {
|
|
322
|
-
return {
|
|
323
|
-
rows: [],
|
|
324
|
-
flatRows: [],
|
|
325
|
-
rowsById: {},
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
return selectRowsFn(instance, rowModel)
|
|
330
|
-
},
|
|
331
|
-
{
|
|
332
|
-
key: 'getGroupedSelectedRowModel',
|
|
333
|
-
debug: () => instance.options.debugAll ?? instance.options.debugTable,
|
|
334
|
-
onChange: () => instance._notifyExpandedReset(),
|
|
335
|
-
}
|
|
336
|
-
),
|
|
337
|
-
|
|
338
|
-
///
|
|
339
|
-
|
|
340
|
-
getRowIsSelected: rowId => {
|
|
341
|
-
const { rowSelection } = instance.getState()
|
|
342
|
-
const row = instance.getRow(rowId)
|
|
343
|
-
|
|
344
|
-
if (!row) {
|
|
345
|
-
throw new Error()
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
return isRowSelected(row, rowSelection, instance) === true
|
|
349
|
-
},
|
|
350
|
-
|
|
351
|
-
getRowIsSomeSelected: rowId => {
|
|
352
|
-
const { rowSelection } = instance.getState()
|
|
353
|
-
const row = instance.getRow(rowId)
|
|
354
|
-
|
|
355
|
-
if (!row) {
|
|
356
|
-
throw new Error()
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
return isRowSelected(row, rowSelection, instance) === 'some'
|
|
360
|
-
},
|
|
361
|
-
|
|
362
|
-
getRowCanSelect: rowId => {
|
|
363
|
-
const row = instance.getRow(rowId)
|
|
364
|
-
|
|
365
|
-
if (!row) {
|
|
366
|
-
throw new Error()
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
if (typeof instance.options.enableRowSelection === 'function') {
|
|
370
|
-
return instance.options.enableRowSelection(row)
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
return instance.options.enableRowSelection ?? true
|
|
374
|
-
},
|
|
375
|
-
|
|
376
|
-
getRowCanSelectSubRows: rowId => {
|
|
377
|
-
const row = instance.getRow(rowId)
|
|
378
|
-
|
|
379
|
-
if (!row) {
|
|
380
|
-
throw new Error()
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
if (typeof instance.options.enableSubRowSelection === 'function') {
|
|
384
|
-
return instance.options.enableSubRowSelection(row)
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
return instance.options.enableSubRowSelection ?? true
|
|
388
|
-
},
|
|
389
|
-
|
|
390
|
-
getRowCanMultiSelect: rowId => {
|
|
391
|
-
const row = instance.getRow(rowId)
|
|
392
|
-
|
|
393
|
-
if (!row) {
|
|
394
|
-
throw new Error()
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
if (typeof instance.options.enableMultiRowSelection === 'function') {
|
|
398
|
-
return instance.options.enableMultiRowSelection(row)
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
return instance.options.enableMultiRowSelection ?? true
|
|
402
|
-
},
|
|
403
|
-
|
|
404
|
-
// getGroupingRowCanSelect: rowId => {
|
|
405
|
-
// const row = instance.getRow(rowId)
|
|
406
|
-
|
|
407
|
-
// if (!row) {
|
|
408
|
-
// throw new Error()
|
|
409
|
-
// }
|
|
410
|
-
|
|
411
|
-
// if (typeof instance.options.enableGroupingRowSelection === 'function') {
|
|
412
|
-
// return instance.options.enableGroupingRowSelection(row)
|
|
413
|
-
// }
|
|
414
|
-
|
|
415
|
-
// return instance.options.enableGroupingRowSelection ?? false
|
|
416
|
-
// },
|
|
417
|
-
|
|
418
|
-
getIsAllRowsSelected: () => {
|
|
419
|
-
const preFilteredFlatRows =
|
|
420
|
-
instance.getPreGlobalFilteredRowModel().flatRows
|
|
421
|
-
const { rowSelection } = instance.getState()
|
|
422
|
-
|
|
423
|
-
let isAllRowsSelected = Boolean(
|
|
424
|
-
preFilteredFlatRows.length && Object.keys(rowSelection).length
|
|
425
|
-
)
|
|
426
|
-
|
|
427
|
-
if (isAllRowsSelected) {
|
|
428
|
-
if (preFilteredFlatRows.some(row => !rowSelection[row.id])) {
|
|
429
|
-
isAllRowsSelected = false
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
return isAllRowsSelected
|
|
434
|
-
},
|
|
435
|
-
|
|
436
|
-
getIsAllPageRowsSelected: () => {
|
|
437
|
-
const paginationFlatRows = instance.getPaginationRowModel().flatRows
|
|
438
|
-
const { rowSelection } = instance.getState()
|
|
439
|
-
|
|
440
|
-
let isAllPageRowsSelected = !!paginationFlatRows.length
|
|
441
|
-
|
|
442
|
-
if (
|
|
443
|
-
isAllPageRowsSelected &&
|
|
444
|
-
paginationFlatRows.some(row => !rowSelection[row.id])
|
|
445
|
-
) {
|
|
446
|
-
isAllPageRowsSelected = false
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
return isAllPageRowsSelected
|
|
450
|
-
},
|
|
451
|
-
|
|
452
|
-
getIsSomeRowsSelected: () => {
|
|
453
|
-
return (
|
|
454
|
-
!instance.getIsAllRowsSelected() &&
|
|
455
|
-
!!Object.keys(instance.getState().rowSelection ?? {}).length
|
|
456
|
-
)
|
|
457
|
-
},
|
|
458
|
-
|
|
459
|
-
getIsSomePageRowsSelected: () => {
|
|
460
|
-
const paginationFlatRows = instance.getPaginationRowModel().flatRows
|
|
461
|
-
return instance.getIsAllPageRowsSelected()
|
|
462
|
-
? false
|
|
463
|
-
: !!paginationFlatRows?.length
|
|
464
|
-
},
|
|
465
|
-
|
|
466
|
-
getToggleRowSelectedProps: (rowId, userProps) => {
|
|
467
|
-
const row = instance.getRow(rowId)
|
|
468
|
-
|
|
469
|
-
const isSelected = row.getIsSelected()
|
|
470
|
-
const isSomeSelected = row.getIsSomeSelected()
|
|
471
|
-
const canSelect = row.getCanSelect()
|
|
472
|
-
|
|
473
|
-
const initialProps: ToggleRowSelectedProps = {
|
|
474
|
-
onChange: canSelect
|
|
475
|
-
? (e: MouseEvent | TouchEvent) => {
|
|
476
|
-
row.toggleSelected((e.target as HTMLInputElement).checked)
|
|
477
|
-
}
|
|
478
|
-
: undefined,
|
|
479
|
-
checked: isSelected,
|
|
480
|
-
title: 'Toggle Row Selected',
|
|
481
|
-
indeterminate: isSomeSelected,
|
|
482
|
-
// onChange: forInput
|
|
483
|
-
// ? (e: Event) => e.stopPropagation()
|
|
484
|
-
// : (e: Event) => {
|
|
485
|
-
// if (instance.options.isAdditiveSelectEvent(e)) {
|
|
486
|
-
// row.toggleSelected()
|
|
487
|
-
// } else if (instance.options.isInclusiveSelectEvent(e)) {
|
|
488
|
-
// instance.addRowSelectionRange(row.id)
|
|
489
|
-
// } else {
|
|
490
|
-
// instance.setRowSelection({})
|
|
491
|
-
// row.toggleSelected()
|
|
492
|
-
// }
|
|
493
|
-
|
|
494
|
-
// if (props.onClick) props.onClick(e)
|
|
495
|
-
// },
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
return propGetter(initialProps, userProps)
|
|
499
|
-
},
|
|
500
|
-
|
|
501
|
-
getToggleAllRowsSelectedProps: userProps => {
|
|
502
|
-
const isSomeRowsSelected = instance.getIsSomeRowsSelected()
|
|
503
|
-
const isAllRowsSelected = instance.getIsAllRowsSelected()
|
|
504
|
-
|
|
505
|
-
const initialProps: ToggleRowSelectedProps = {
|
|
506
|
-
onChange: (e: MouseEvent | TouchEvent) => {
|
|
507
|
-
instance.toggleAllRowsSelected((e.target as HTMLInputElement).checked)
|
|
508
|
-
},
|
|
509
|
-
checked: isAllRowsSelected,
|
|
510
|
-
title: 'Toggle All Rows Selected',
|
|
511
|
-
indeterminate: isSomeRowsSelected,
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
return propGetter(initialProps, userProps)
|
|
515
|
-
},
|
|
516
|
-
|
|
517
|
-
getToggleAllPageRowsSelectedProps: userProps => {
|
|
518
|
-
const isSomePageRowsSelected = instance.getIsSomePageRowsSelected()
|
|
519
|
-
const isAllPageRowsSelected = instance.getIsAllPageRowsSelected()
|
|
520
|
-
|
|
521
|
-
const initialProps: ToggleRowSelectedProps = {
|
|
522
|
-
onChange: (e: MouseEvent | TouchEvent) => {
|
|
523
|
-
instance.toggleAllPageRowsSelected(
|
|
524
|
-
(e.target as HTMLInputElement).checked
|
|
525
|
-
)
|
|
526
|
-
},
|
|
527
|
-
checked: isAllPageRowsSelected,
|
|
528
|
-
title: 'Toggle All Current Page Rows Selected',
|
|
529
|
-
indeterminate: isSomePageRowsSelected,
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
return propGetter(initialProps, userProps)
|
|
533
|
-
},
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
export function createRow<TGenerics extends PartialGenerics>(
|
|
538
|
-
row: Row<TGenerics>,
|
|
539
|
-
instance: TableInstance<TGenerics>
|
|
540
|
-
): RowSelectionRow {
|
|
541
|
-
return {
|
|
542
|
-
getIsSelected: () => instance.getRowIsSelected(row.id),
|
|
543
|
-
getIsSomeSelected: () => instance.getRowIsSomeSelected(row.id),
|
|
544
|
-
toggleSelected: value => instance.toggleRowSelected(row.id, value),
|
|
545
|
-
getToggleSelectedProps: userProps =>
|
|
546
|
-
instance.getToggleRowSelectedProps(row.id, userProps),
|
|
547
|
-
getCanMultiSelect: () => instance.getRowCanMultiSelect(row.id),
|
|
548
|
-
getCanSelect: () => instance.getRowCanSelect(row.id),
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
const mutateRowIsSelected = <TGenerics extends PartialGenerics>(
|
|
553
|
-
selectedRowIds: Record<string, boolean>,
|
|
554
|
-
id: string,
|
|
555
|
-
value: boolean,
|
|
556
|
-
instance: TableInstance<TGenerics>
|
|
557
|
-
) => {
|
|
558
|
-
const row = instance.getRow(id)
|
|
559
|
-
|
|
560
|
-
const isGrouped = row.getIsGrouped()
|
|
561
|
-
|
|
562
|
-
// if ( // TODO: enforce grouping row selection rules
|
|
563
|
-
// !isGrouped ||
|
|
564
|
-
// (isGrouped && instance.options.enableGroupingRowSelection)
|
|
565
|
-
// ) {
|
|
566
|
-
if (value) {
|
|
567
|
-
selectedRowIds[id] = true
|
|
568
|
-
} else {
|
|
569
|
-
delete selectedRowIds[id]
|
|
570
|
-
}
|
|
571
|
-
// }
|
|
572
|
-
|
|
573
|
-
if (row.subRows?.length && instance.getRowCanSelectSubRows(row.id)) {
|
|
574
|
-
row.subRows.forEach(row =>
|
|
575
|
-
mutateRowIsSelected(selectedRowIds, row.id, value, instance)
|
|
576
|
-
)
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
export function selectRowsFn<TGenerics extends PartialGenerics>(
|
|
581
|
-
instance: TableInstance<TGenerics>,
|
|
582
|
-
rowModel: RowModel<TGenerics>
|
|
583
|
-
): RowModel<TGenerics> {
|
|
584
|
-
const rowSelection = instance.getState().rowSelection
|
|
585
|
-
|
|
586
|
-
const newSelectedFlatRows: Row<TGenerics>[] = []
|
|
587
|
-
const newSelectedRowsById: Record<string, Row<TGenerics>> = {}
|
|
588
|
-
|
|
589
|
-
// Filters top level and nested rows
|
|
590
|
-
const recurseRows = (rows: Row<TGenerics>[], depth = 0) => {
|
|
591
|
-
return rows
|
|
592
|
-
.map(row => {
|
|
593
|
-
const isSelected = isRowSelected(row, rowSelection, instance) === true
|
|
594
|
-
|
|
595
|
-
if (isSelected) {
|
|
596
|
-
newSelectedFlatRows.push(row)
|
|
597
|
-
newSelectedRowsById[row.id] = row
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
if (row.subRows?.length) {
|
|
601
|
-
row = {
|
|
602
|
-
...row,
|
|
603
|
-
subRows: recurseRows(row.subRows, depth + 1),
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
if (isSelected) {
|
|
608
|
-
return row
|
|
609
|
-
}
|
|
610
|
-
})
|
|
611
|
-
.filter(Boolean) as Row<TGenerics>[]
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
return {
|
|
615
|
-
rows: recurseRows(rowModel.rows),
|
|
616
|
-
flatRows: newSelectedFlatRows,
|
|
617
|
-
rowsById: newSelectedRowsById,
|
|
618
|
-
}
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
export function isRowSelected<TGenerics extends PartialGenerics>(
|
|
622
|
-
row: Row<TGenerics>,
|
|
623
|
-
selection: Record<string, boolean>,
|
|
624
|
-
instance: TableInstance<TGenerics>
|
|
625
|
-
): boolean | 'some' {
|
|
626
|
-
if (selection[row.id]) {
|
|
627
|
-
return true
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
if (row.subRows && row.subRows.length) {
|
|
631
|
-
let allChildrenSelected = true
|
|
632
|
-
let someSelected = false
|
|
633
|
-
|
|
634
|
-
row.subRows.forEach(subRow => {
|
|
635
|
-
// Bail out early if we know both of these
|
|
636
|
-
if (someSelected && !allChildrenSelected) {
|
|
637
|
-
return
|
|
638
|
-
}
|
|
639
|
-
|
|
640
|
-
if (isRowSelected(subRow, selection, instance)) {
|
|
641
|
-
someSelected = true
|
|
642
|
-
} else {
|
|
643
|
-
allChildrenSelected = false
|
|
644
|
-
}
|
|
645
|
-
})
|
|
646
|
-
|
|
647
|
-
return allChildrenSelected ? true : someSelected ? 'some' : false
|
|
648
|
-
}
|
|
649
|
-
|
|
650
|
-
return false
|
|
651
|
-
}
|