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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -78
  2. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  3. package/build/cjs/index.js +99 -12
  4. package/build/cjs/index.js.map +1 -1
  5. package/build/esm/index.js +41 -4686
  6. package/build/esm/index.js.map +1 -1
  7. package/build/stats-html.html +1 -1
  8. package/build/stats-react.json +29 -747
  9. package/build/types/index.d.ts +13 -7
  10. package/build/umd/index.development.js +51 -4688
  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 +107 -7
  16. package/build/cjs/aggregationTypes.js +0 -130
  17. package/build/cjs/aggregationTypes.js.map +0 -1
  18. package/build/cjs/core.js +0 -552
  19. package/build/cjs/core.js.map +0 -1
  20. package/build/cjs/createTable.js +0 -108
  21. package/build/cjs/createTable.js.map +0 -1
  22. package/build/cjs/features/ColumnSizing.js +0 -317
  23. package/build/cjs/features/ColumnSizing.js.map +0 -1
  24. package/build/cjs/features/Expanding.js +0 -255
  25. package/build/cjs/features/Expanding.js.map +0 -1
  26. package/build/cjs/features/Filters.js +0 -445
  27. package/build/cjs/features/Filters.js.map +0 -1
  28. package/build/cjs/features/Grouping.js +0 -249
  29. package/build/cjs/features/Grouping.js.map +0 -1
  30. package/build/cjs/features/Headers.js +0 -549
  31. package/build/cjs/features/Headers.js.map +0 -1
  32. package/build/cjs/features/Ordering.js +0 -86
  33. package/build/cjs/features/Ordering.js.map +0 -1
  34. package/build/cjs/features/Pagination.js +0 -194
  35. package/build/cjs/features/Pagination.js.map +0 -1
  36. package/build/cjs/features/Pinning.js +0 -149
  37. package/build/cjs/features/Pinning.js.map +0 -1
  38. package/build/cjs/features/RowSelection.js +0 -541
  39. package/build/cjs/features/RowSelection.js.map +0 -1
  40. package/build/cjs/features/Sorting.js +0 -327
  41. package/build/cjs/features/Sorting.js.map +0 -1
  42. package/build/cjs/features/Visibility.js +0 -166
  43. package/build/cjs/features/Visibility.js.map +0 -1
  44. package/build/cjs/filterTypes.js +0 -172
  45. package/build/cjs/filterTypes.js.map +0 -1
  46. package/build/cjs/sortTypes.js +0 -122
  47. package/build/cjs/sortTypes.js.map +0 -1
  48. package/build/cjs/utils/columnFilterRowsFn.js +0 -131
  49. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  50. package/build/cjs/utils/expandRowsFn.js +0 -38
  51. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  52. package/build/cjs/utils/globalFilterRowsFn.js +0 -101
  53. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  54. package/build/cjs/utils/groupRowsFn.js +0 -155
  55. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  56. package/build/cjs/utils/sortRowsFn.js +0 -94
  57. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  58. package/build/cjs/utils.js +0 -146
  59. package/build/cjs/utils.js.map +0 -1
  60. package/build/types/aggregationTypes.d.ts +0 -22
  61. package/build/types/core.d.ts +0 -111
  62. package/build/types/createTable.d.ts +0 -53
  63. package/build/types/features/ColumnSizing.d.ts +0 -67
  64. package/build/types/features/Expanding.d.ts +0 -53
  65. package/build/types/features/Filters.d.ts +0 -98
  66. package/build/types/features/Grouping.d.ts +0 -82
  67. package/build/types/features/Headers.d.ts +0 -41
  68. package/build/types/features/Ordering.d.ts +0 -19
  69. package/build/types/features/Pagination.d.ts +0 -43
  70. package/build/types/features/Pinning.d.ts +0 -39
  71. package/build/types/features/RowSelection.d.ts +0 -66
  72. package/build/types/features/Sorting.d.ts +0 -78
  73. package/build/types/features/Visibility.d.ts +0 -47
  74. package/build/types/filterTypes.d.ts +0 -50
  75. package/build/types/sortTypes.d.ts +0 -18
  76. package/build/types/types.d.ts +0 -127
  77. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  78. package/build/types/utils/expandRowsFn.d.ts +0 -2
  79. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  80. package/build/types/utils/groupRowsFn.d.ts +0 -2
  81. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  82. package/build/types/utils/sortRowsFn.d.ts +0 -2
  83. package/build/types/utils.d.ts +0 -28
  84. package/src/aggregationTypes.ts +0 -115
  85. package/src/core.tsx +0 -1182
  86. package/src/createTable.tsx +0 -241
  87. package/src/features/ColumnSizing.ts +0 -453
  88. package/src/features/Expanding.ts +0 -404
  89. package/src/features/Filters.ts +0 -762
  90. package/src/features/Grouping.ts +0 -466
  91. package/src/features/Headers.ts +0 -912
  92. package/src/features/Ordering.ts +0 -133
  93. package/src/features/Pagination.ts +0 -314
  94. package/src/features/Pinning.ts +0 -200
  95. package/src/features/RowSelection.ts +0 -831
  96. package/src/features/Sorting.ts +0 -547
  97. package/src/features/Visibility.ts +0 -279
  98. package/src/filterTypes.ts +0 -251
  99. package/src/sortTypes.ts +0 -159
  100. package/src/types.ts +0 -331
  101. package/src/utils/columnFilterRowsFn.ts +0 -155
  102. package/src/utils/expandRowsFn.ts +0 -50
  103. package/src/utils/globalFilterRowsFn.ts +0 -122
  104. package/src/utils/groupRowsFn.ts +0 -194
  105. package/src/utils/paginateRowsFn.ts +0 -34
  106. package/src/utils/sortRowsFn.ts +0 -115
  107. package/src/utils.tsx +0 -257
@@ -1,831 +0,0 @@
1
- import React, { MouseEvent, TouchEvent } from 'react'
2
- import {
3
- Getter,
4
- OnChangeFn,
5
- PropGetterValue,
6
- ReactTable,
7
- Row,
8
- RowModel,
9
- Updater,
10
- } from '../types'
11
- import { functionalUpdate, makeStateUpdater, memo, propGetter } from '../utils'
12
-
13
- export type RowSelectionState = Record<string, boolean>
14
-
15
- export type RowSelectionTableState = {
16
- rowSelection: RowSelectionState
17
- }
18
-
19
- export type RowSelectionOptions<
20
- TData,
21
- TValue,
22
- TFilterFns,
23
- TSortingFns,
24
- TAggregationFns
25
- > = {
26
- onRowSelectionChange?: OnChangeFn<RowSelectionState>
27
- autoResetRowSelection?: boolean
28
- enableRowSelection?:
29
- | boolean
30
- | ((
31
- row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
32
- ) => boolean)
33
- enableMultiRowSelection?:
34
- | boolean
35
- | ((
36
- row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
37
- ) => boolean)
38
- enableSubRowSelection?:
39
- | boolean
40
- | ((
41
- row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
42
- ) => boolean)
43
- // enableGroupingRowSelection?:
44
- // | boolean
45
- // | ((
46
- // row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
47
- // ) => boolean)
48
- // isAdditiveSelectEvent?: (e: MouseEvent | TouchEvent) => boolean
49
- // isInclusiveSelectEvent?: (e: MouseEvent | TouchEvent) => boolean
50
- // selectRowsFn?: (
51
- // instance: ReactTable<
52
- // TData,
53
- // TValue,
54
- // TFilterFns,
55
- // TSortingFns,
56
- // TAggregationFns
57
- // >,
58
- // rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
59
- // ) => RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
60
- }
61
-
62
- type ToggleRowSelectedProps = {
63
- onChange?: (e: MouseEvent | TouchEvent) => void
64
- checked?: boolean
65
- title?: string
66
- indeterminate?: boolean
67
- }
68
-
69
- export type RowSelectionRow = {
70
- getIsSelected: () => boolean
71
- getIsSomeSelected: () => boolean
72
- getCanSelect: () => boolean
73
- getCanMultiSelect: () => boolean
74
- toggleSelected: (value?: boolean) => void
75
- getToggleSelectedProps: <TGetter extends Getter<ToggleRowSelectedProps>>(
76
- userProps?: TGetter
77
- ) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
78
- }
79
-
80
- export type RowSelectionInstance<
81
- TData,
82
- TValue,
83
- TFilterFns,
84
- TSortingFns,
85
- TAggregationFns
86
- > = {
87
- _notifyRowSelectionReset: () => void
88
- getToggleRowSelectedProps: <TGetter extends Getter<ToggleRowSelectedProps>>(
89
- rowId: string,
90
- userProps?: TGetter
91
- ) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
92
- getToggleAllRowsSelectedProps: <
93
- TGetter extends Getter<ToggleRowSelectedProps>
94
- >(
95
- userProps?: TGetter
96
- ) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
97
- getToggleAllPageRowsSelectedProps: <
98
- TGetter extends Getter<ToggleRowSelectedProps>
99
- >(
100
- userProps?: TGetter
101
- ) => undefined | PropGetterValue<ToggleRowSelectedProps, TGetter>
102
- setRowSelection: (updater: Updater<RowSelectionState>) => void
103
- resetRowSelection: () => void
104
- toggleRowSelected: (rowId: string, value?: boolean) => void
105
- getRowCanSelect: (rowId: string) => boolean
106
- getRowCanSelectSubRows: (rowId: string) => boolean
107
- getRowCanMultiSelect: (rowId: string) => boolean
108
- // getGroupingRowCanSelect: (rowId: string) => boolean
109
- getRowIsSelected: (rowId: string) => boolean
110
- getRowIsSomeSelected: (rowId: string) => boolean
111
- getIsAllRowsSelected: () => boolean
112
- getIsAllPageRowsSelected: () => boolean
113
- getIsSomeRowsSelected: () => boolean
114
- getIsSomePageRowsSelected: () => boolean
115
- toggleAllRowsSelected: (value: boolean) => void
116
- toggleAllPageRowsSelected: (value: boolean) => void
117
- getSelectedRowModel: () => RowModel<
118
- TData,
119
- TValue,
120
- TFilterFns,
121
- TSortingFns,
122
- TAggregationFns
123
- >
124
- getSelectedRows: () => Row<
125
- TData,
126
- TValue,
127
- TFilterFns,
128
- TSortingFns,
129
- TAggregationFns
130
- >[]
131
- getSelectedFlatRows: () => Row<
132
- TData,
133
- TValue,
134
- TFilterFns,
135
- TSortingFns,
136
- TAggregationFns
137
- >[]
138
- getSelectedRowsById: () => Record<
139
- string,
140
- Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
141
- >
142
- getFilteredSelectedRowModel: () => RowModel<
143
- TData,
144
- TValue,
145
- TFilterFns,
146
- TSortingFns,
147
- TAggregationFns
148
- >
149
- getFilteredSelectedRows: () => Row<
150
- TData,
151
- TValue,
152
- TFilterFns,
153
- TSortingFns,
154
- TAggregationFns
155
- >[]
156
- getFilteredSelectedFlatRows: () => Row<
157
- TData,
158
- TValue,
159
- TFilterFns,
160
- TSortingFns,
161
- TAggregationFns
162
- >[]
163
- getFilteredSelectedRowsById: () => Record<
164
- string,
165
- Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
166
- >
167
- getGroupedSelectedRowModel: () => RowModel<
168
- TData,
169
- TValue,
170
- TFilterFns,
171
- TSortingFns,
172
- TAggregationFns
173
- >
174
- getGroupedSelectedRows: () => Row<
175
- TData,
176
- TValue,
177
- TFilterFns,
178
- TSortingFns,
179
- TAggregationFns
180
- >[]
181
- getGroupedSelectedFlatRows: () => Row<
182
- TData,
183
- TValue,
184
- TFilterFns,
185
- TSortingFns,
186
- TAggregationFns
187
- >[]
188
- getGroupedSelectedRowsById: () => Record<
189
- string,
190
- Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
191
- >
192
- }
193
-
194
- //
195
-
196
- export function getInitialState(): RowSelectionTableState {
197
- return {
198
- rowSelection: {},
199
- }
200
- }
201
-
202
- export function getDefaultOptions<
203
- TData,
204
- TValue,
205
- TFilterFns,
206
- TSortingFns,
207
- TAggregationFns
208
- >(
209
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
210
- ): RowSelectionOptions<
211
- TData,
212
- TValue,
213
- TFilterFns,
214
- TSortingFns,
215
- TAggregationFns
216
- > {
217
- return {
218
- onRowSelectionChange: makeStateUpdater('rowSelection', instance),
219
- autoResetRowSelection: true,
220
- enableRowSelection: true,
221
- enableMultiRowSelection: true,
222
- enableSubRowSelection: true,
223
- // enableGroupingRowSelection: false,
224
- // isAdditiveSelectEvent: (e: MouseEvent | TouchEvent) => !!e.metaKey,
225
- // isInclusiveSelectEvent: (e: MouseEvent | TouchEvent) => !!e.shiftKey,
226
- }
227
- }
228
-
229
- export function getInstance<
230
- TData,
231
- TValue,
232
- TFilterFns,
233
- TSortingFns,
234
- TAggregationFns
235
- >(
236
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
237
- ): RowSelectionInstance<
238
- TData,
239
- TValue,
240
- TFilterFns,
241
- TSortingFns,
242
- TAggregationFns
243
- > {
244
- let registered = false
245
-
246
- // const pageRows = instance.getPageRows()
247
-
248
- return {
249
- _notifyRowSelectionReset: () => {
250
- if (!registered) {
251
- registered = true
252
- return
253
- }
254
-
255
- if (instance.options.autoResetAll === false) {
256
- return
257
- }
258
-
259
- if (
260
- instance.options.autoResetAll === true ||
261
- instance.options.autoResetRowSelection
262
- ) {
263
- instance.resetRowSelection()
264
- }
265
- },
266
- setRowSelection: updater =>
267
- instance.options.onRowSelectionChange?.(
268
- updater,
269
- functionalUpdate(updater, instance.getState().rowSelection)
270
- ),
271
- resetRowSelection: () =>
272
- instance.setRowSelection(getInitialState().rowSelection ?? {}),
273
- toggleAllRowsSelected: value => {
274
- instance.setRowSelection(old => {
275
- value =
276
- typeof value !== 'undefined'
277
- ? value
278
- : !instance.getIsAllRowsSelected()
279
-
280
- // Only remove/add the rows that are visible on the screen
281
- // Leave all the other rows that are selected alone.
282
- const rowSelection = Object.assign({}, old)
283
-
284
- const preGroupedFlatRows = instance.getPreGroupedFlatRows()
285
-
286
- // We don't use `mutateRowIsSelected` here for performance reasons.
287
- // All of the rows are flat already, so it wouldn't be worth it
288
- if (value) {
289
- preGroupedFlatRows.forEach(row => {
290
- rowSelection[row.id] = true
291
- })
292
- } else {
293
- preGroupedFlatRows.forEach(row => {
294
- delete rowSelection[row.id]
295
- })
296
- }
297
-
298
- return rowSelection
299
- })
300
- },
301
- toggleAllPageRowsSelected: value =>
302
- instance.setRowSelection(old => {
303
- const selectAll =
304
- typeof value !== 'undefined'
305
- ? value
306
- : !instance.getIsAllPageRowsSelected()
307
-
308
- const rowSelection: RowSelectionState = { ...old }
309
-
310
- instance.getRows().forEach(row => {
311
- mutateRowIsSelected(rowSelection, row.id, value, instance)
312
- })
313
-
314
- return rowSelection
315
- }),
316
- toggleRowSelected: (rowId, value) => {
317
- const row = instance.getRow(rowId)
318
- const isSelected = row.getIsSelected()
319
-
320
- instance.setRowSelection(old => {
321
- value = typeof value !== 'undefined' ? value : !isSelected
322
-
323
- if (isSelected === value) {
324
- return old
325
- }
326
-
327
- const selectedRowIds = { ...old }
328
-
329
- mutateRowIsSelected(selectedRowIds, rowId, value, instance)
330
-
331
- return selectedRowIds
332
- })
333
- },
334
- // addRowSelectionRange: rowId => {
335
- // const {
336
- // rows,
337
- // rowsById,
338
- // options: { selectGroupingRows, selectSubRows },
339
- // } = instance
340
-
341
- // const findSelectedRow = (rows: Row[]) => {
342
- // let found
343
- // rows.find(d => {
344
- // if (d.getIsSelected()) {
345
- // found = d
346
- // return true
347
- // }
348
- // const subFound = findSelectedRow(d.subRows || [])
349
- // if (subFound) {
350
- // found = subFound
351
- // return true
352
- // }
353
- // return false
354
- // })
355
- // return found
356
- // }
357
-
358
- // const firstRow = findSelectedRow(rows) || rows[0]
359
- // const lastRow = rowsById[rowId]
360
-
361
- // let include = false
362
- // const selectedRowIds = {}
363
-
364
- // const addRow = (row: Row) => {
365
- // mutateRowIsSelected(selectedRowIds, row.id, true, {
366
- // rowsById,
367
- // selectGroupingRows: selectGroupingRows!,
368
- // selectSubRows: selectSubRows!,
369
- // })
370
- // }
371
-
372
- // instance.rows.forEach(row => {
373
- // const isFirstRow = row.id === firstRow.id
374
- // const isLastRow = row.id === lastRow.id
375
-
376
- // if (isFirstRow || isLastRow) {
377
- // if (!include) {
378
- // include = true
379
- // } else if (include) {
380
- // addRow(row)
381
- // include = false
382
- // }
383
- // }
384
-
385
- // if (include) {
386
- // addRow(row)
387
- // }
388
- // })
389
-
390
- // instance.setRowSelection(selectedRowIds)
391
- // },
392
- getSelectedRowModel: memo(
393
- () => [instance.getState().rowSelection, instance.getCoreRowModel()],
394
- (rowSelection, rowModel) => {
395
- if (!Object.keys(rowSelection).length) {
396
- return {
397
- rows: [],
398
- flatRows: [],
399
- rowsById: {},
400
- }
401
- }
402
-
403
- if (process.env.NODE_ENV !== 'production' && instance.options.debug)
404
- console.info('Selecting...')
405
-
406
- return selectRowsFn(instance, rowModel)
407
- },
408
- {
409
- key: 'getSelectedRowModel',
410
- debug: instance.options.debug,
411
- onChange: () => instance._notifyExpandedReset(),
412
- }
413
- ),
414
- getSelectedRows: () => instance.getSelectedRowModel().rows,
415
- getSelectedFlatRows: () => instance.getSelectedRowModel().flatRows,
416
- getSelectedRowsById: () => instance.getSelectedRowModel().rowsById,
417
-
418
- getFilteredSelectedRowModel: memo(
419
- () => [
420
- instance.getState().rowSelection,
421
- instance.getGlobalFilteredRowModel(),
422
- ],
423
- (rowSelection, rowModel) => {
424
- if (!Object.keys(rowSelection).length) {
425
- return {
426
- rows: [],
427
- flatRows: [],
428
- rowsById: {},
429
- }
430
- }
431
-
432
- if (process.env.NODE_ENV !== 'production' && instance.options.debug)
433
- console.info('Selecting...')
434
-
435
- return selectRowsFn(instance, rowModel)
436
- },
437
- {
438
- key: 'getFilteredSelectedRowModel',
439
- debug: instance.options.debug,
440
- onChange: () => instance._notifyExpandedReset(),
441
- }
442
- ),
443
- getFilteredSelectedRows: () => instance.getFilteredSelectedRowModel().rows,
444
- getFilteredSelectedFlatRows: () =>
445
- instance.getFilteredSelectedRowModel().flatRows,
446
- getFilteredSelectedRowsById: () =>
447
- instance.getFilteredSelectedRowModel().rowsById,
448
-
449
- getGroupedSelectedRowModel: memo(
450
- () => [instance.getState().rowSelection, instance.getGroupedRowModel()],
451
- (rowSelection, rowModel) => {
452
- if (!Object.keys(rowSelection).length) {
453
- return {
454
- rows: [],
455
- flatRows: [],
456
- rowsById: {},
457
- }
458
- }
459
-
460
- if (process.env.NODE_ENV !== 'production' && instance.options.debug)
461
- console.info('Selecting...')
462
-
463
- return selectRowsFn(instance, rowModel)
464
- },
465
- {
466
- key: 'getGroupedSelectedRowModel',
467
- debug: instance.options.debug,
468
- onChange: () => instance._notifyExpandedReset(),
469
- }
470
- ),
471
- getGroupedSelectedRows: () => instance.getGroupedSelectedRowModel().rows,
472
- getGroupedSelectedFlatRows: () =>
473
- instance.getGroupedSelectedRowModel().flatRows,
474
- getGroupedSelectedRowsById: () =>
475
- instance.getGroupedSelectedRowModel().rowsById,
476
-
477
- ///
478
-
479
- getRowIsSelected: rowId => {
480
- const { rowSelection } = instance.getState()
481
- const row = instance.getRow(rowId)
482
-
483
- if (!row) {
484
- throw new Error()
485
- }
486
-
487
- return isRowSelected(row, rowSelection, instance) === true
488
- },
489
-
490
- getRowIsSomeSelected: rowId => {
491
- const { rowSelection } = instance.getState()
492
- const row = instance.getRow(rowId)
493
-
494
- if (!row) {
495
- throw new Error()
496
- }
497
-
498
- return isRowSelected(row, rowSelection, instance) === 'some'
499
- },
500
-
501
- getRowCanSelect: rowId => {
502
- const row = instance.getRow(rowId)
503
-
504
- if (!row) {
505
- throw new Error()
506
- }
507
-
508
- if (typeof instance.options.enableRowSelection === 'function') {
509
- return instance.options.enableRowSelection(row)
510
- }
511
-
512
- return instance.options.enableRowSelection ?? true
513
- },
514
-
515
- getRowCanSelectSubRows: rowId => {
516
- const row = instance.getRow(rowId)
517
-
518
- if (!row) {
519
- throw new Error()
520
- }
521
-
522
- if (typeof instance.options.enableSubRowSelection === 'function') {
523
- return instance.options.enableSubRowSelection(row)
524
- }
525
-
526
- return instance.options.enableSubRowSelection ?? true
527
- },
528
-
529
- getRowCanMultiSelect: rowId => {
530
- const row = instance.getRow(rowId)
531
-
532
- if (!row) {
533
- throw new Error()
534
- }
535
-
536
- if (typeof instance.options.enableMultiRowSelection === 'function') {
537
- return instance.options.enableMultiRowSelection(row)
538
- }
539
-
540
- return instance.options.enableMultiRowSelection ?? true
541
- },
542
-
543
- // getGroupingRowCanSelect: rowId => {
544
- // const row = instance.getRow(rowId)
545
-
546
- // if (!row) {
547
- // throw new Error()
548
- // }
549
-
550
- // if (typeof instance.options.enableGroupingRowSelection === 'function') {
551
- // return instance.options.enableGroupingRowSelection(row)
552
- // }
553
-
554
- // return instance.options.enableGroupingRowSelection ?? false
555
- // },
556
-
557
- getIsAllRowsSelected: () => {
558
- const preFilteredFlatRows = instance.getPreGlobalFilteredFlatRows()
559
- const { rowSelection } = instance.getState()
560
-
561
- let isAllRowsSelected = Boolean(
562
- preFilteredFlatRows.length && Object.keys(rowSelection).length
563
- )
564
-
565
- if (isAllRowsSelected) {
566
- if (preFilteredFlatRows.some(row => !rowSelection[row.id])) {
567
- isAllRowsSelected = false
568
- }
569
- }
570
-
571
- return isAllRowsSelected
572
- },
573
-
574
- getIsAllPageRowsSelected: () => {
575
- const paginationFlatRows = instance.getPaginationFlatRows()
576
- const { rowSelection } = instance.getState()
577
-
578
- let isAllPageRowsSelected = !!paginationFlatRows.length
579
-
580
- if (
581
- isAllPageRowsSelected &&
582
- paginationFlatRows.some(row => !rowSelection[row.id])
583
- ) {
584
- isAllPageRowsSelected = false
585
- }
586
-
587
- return isAllPageRowsSelected
588
- },
589
-
590
- getIsSomeRowsSelected: () => {
591
- return (
592
- !instance.getIsAllRowsSelected() &&
593
- !!Object.keys(instance.getState().rowSelection ?? {}).length
594
- )
595
- },
596
-
597
- getIsSomePageRowsSelected: () => {
598
- const paginationFlatRows = instance.getPaginationFlatRows()
599
- return instance.getIsAllPageRowsSelected()
600
- ? false
601
- : !!paginationFlatRows?.length
602
- },
603
-
604
- getToggleRowSelectedProps: (rowId, userProps) => {
605
- const row = instance.getRow(rowId)
606
-
607
- const isSelected = row.getIsSelected()
608
- const isSomeSelected = row.getIsSomeSelected()
609
- const canSelect = row.getCanSelect()
610
-
611
- const initialProps: ToggleRowSelectedProps = {
612
- onChange: canSelect
613
- ? (e: MouseEvent | TouchEvent) => {
614
- row.toggleSelected((e.target as HTMLInputElement).checked)
615
- }
616
- : undefined,
617
- checked: isSelected,
618
- title: 'Toggle Row Selected',
619
- indeterminate: isSomeSelected,
620
- // onChange: forInput
621
- // ? (e: Event) => e.stopPropagation()
622
- // : (e: Event) => {
623
- // if (instance.options.isAdditiveSelectEvent(e)) {
624
- // row.toggleSelected()
625
- // } else if (instance.options.isInclusiveSelectEvent(e)) {
626
- // instance.addRowSelectionRange(row.id)
627
- // } else {
628
- // instance.setRowSelection({})
629
- // row.toggleSelected()
630
- // }
631
-
632
- // if (props.onClick) props.onClick(e)
633
- // },
634
- }
635
-
636
- return propGetter(initialProps, userProps)
637
- },
638
-
639
- getToggleAllRowsSelectedProps: userProps => {
640
- const isSomeRowsSelected = instance.getIsSomeRowsSelected()
641
- const isAllRowsSelected = instance.getIsAllRowsSelected()
642
-
643
- const initialProps: ToggleRowSelectedProps = {
644
- onChange: (e: MouseEvent | TouchEvent) => {
645
- instance.toggleAllRowsSelected((e.target as HTMLInputElement).checked)
646
- },
647
- checked: isAllRowsSelected,
648
- title: 'Toggle All Rows Selected',
649
- indeterminate: isSomeRowsSelected,
650
- }
651
-
652
- return propGetter(initialProps, userProps)
653
- },
654
-
655
- getToggleAllPageRowsSelectedProps: userProps => {
656
- const isSomePageRowsSelected = instance.getIsSomePageRowsSelected()
657
- const isAllPageRowsSelected = instance.getIsAllPageRowsSelected()
658
-
659
- const initialProps: ToggleRowSelectedProps = {
660
- onChange: (e: MouseEvent | TouchEvent) => {
661
- instance.toggleAllPageRowsSelected(
662
- (e.target as HTMLInputElement).checked
663
- )
664
- },
665
- checked: isAllPageRowsSelected,
666
- title: 'Toggle All Current Page Rows Selected',
667
- indeterminate: isSomePageRowsSelected,
668
- }
669
-
670
- return propGetter(initialProps, userProps)
671
- },
672
- }
673
- }
674
-
675
- export function createRow<
676
- TData,
677
- TValue,
678
- TFilterFns,
679
- TSortingFns,
680
- TAggregationFns
681
- >(
682
- row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,
683
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
684
- ): RowSelectionRow {
685
- return {
686
- getIsSelected: () => instance.getRowIsSelected(row.id),
687
- getIsSomeSelected: () => instance.getRowIsSomeSelected(row.id),
688
- toggleSelected: value => instance.toggleRowSelected(row.id, value),
689
- getToggleSelectedProps: userProps =>
690
- instance.getToggleRowSelectedProps(row.id, userProps),
691
- getCanMultiSelect: () => instance.getRowCanMultiSelect(row.id),
692
- getCanSelect: () => instance.getRowCanSelect(row.id),
693
- }
694
- }
695
-
696
- const mutateRowIsSelected = <
697
- TData,
698
- TValue,
699
- TFilterFns,
700
- TSortingFns,
701
- TAggregationFns
702
- >(
703
- selectedRowIds: Record<string, boolean>,
704
- id: string,
705
- value: boolean,
706
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
707
- ) => {
708
- const row = instance.getRow(id)
709
-
710
- const isGrouped = row.getIsGrouped()
711
-
712
- // if ( // TODO: enforce grouping row selection rules
713
- // !isGrouped ||
714
- // (isGrouped && instance.options.enableGroupingRowSelection)
715
- // ) {
716
- if (value) {
717
- selectedRowIds[id] = true
718
- } else {
719
- delete selectedRowIds[id]
720
- }
721
- // }
722
-
723
- if (row.subRows?.length && instance.getRowCanSelectSubRows(row.id)) {
724
- row.subRows.forEach(row =>
725
- mutateRowIsSelected(selectedRowIds, row.id, value, instance)
726
- )
727
- }
728
- }
729
-
730
- export function selectRowsFn<
731
- TData,
732
- TValue,
733
- TFilterFns,
734
- TSortingFns,
735
- TAggregationFns
736
- >(
737
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,
738
- rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
739
- ): RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {
740
- const rowSelection = instance.getState().rowSelection
741
-
742
- const newSelectedFlatRows: Row<
743
- TData,
744
- TValue,
745
- TFilterFns,
746
- TSortingFns,
747
- TAggregationFns
748
- >[] = []
749
- const newSelectedRowsById: Record<
750
- string,
751
- Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
752
- > = {}
753
-
754
- // Filters top level and nested rows
755
- const recurseRows = (
756
- rows: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[],
757
- depth = 0
758
- ) => {
759
- return rows
760
- .map(row => {
761
- const isSelected = isRowSelected(row, rowSelection, instance) === true
762
-
763
- if (isSelected) {
764
- newSelectedFlatRows.push(row)
765
- newSelectedRowsById[row.id] = row
766
- }
767
-
768
- if (row.subRows?.length) {
769
- row = {
770
- ...row,
771
- subRows: recurseRows(row.subRows, depth + 1),
772
- }
773
- }
774
-
775
- if (isSelected) {
776
- return row
777
- }
778
- })
779
- .filter(Boolean) as Row<
780
- TData,
781
- TValue,
782
- TFilterFns,
783
- TSortingFns,
784
- TAggregationFns
785
- >[]
786
- }
787
-
788
- return {
789
- rows: recurseRows(rowModel.rows),
790
- flatRows: newSelectedFlatRows,
791
- rowsById: newSelectedRowsById,
792
- }
793
- }
794
-
795
- export function isRowSelected<
796
- TData,
797
- TValue,
798
- TFilterFns,
799
- TSortingFns,
800
- TAggregationFns
801
- >(
802
- row: Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,
803
- selection: Record<string, boolean>,
804
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
805
- ): boolean | 'some' {
806
- if (selection[row.id]) {
807
- return true
808
- }
809
-
810
- if (row.subRows && row.subRows.length) {
811
- let allChildrenSelected = true
812
- let someSelected = false
813
-
814
- row.subRows.forEach(subRow => {
815
- // Bail out early if we know both of these
816
- if (someSelected && !allChildrenSelected) {
817
- return
818
- }
819
-
820
- if (isRowSelected(subRow, selection, instance)) {
821
- someSelected = true
822
- } else {
823
- allChildrenSelected = false
824
- }
825
- })
826
-
827
- return allChildrenSelected ? true : someSelected ? 'some' : false
828
- }
829
-
830
- return false
831
- }