@tanstack/react-table 8.0.0-alpha.2 → 8.0.0-alpha.5
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/core.js +85 -52
- package/build/cjs/core.js.map +1 -1
- package/build/cjs/createTable.js +11 -6
- package/build/cjs/createTable.js.map +1 -1
- package/build/cjs/features/ColumnSizing.js +2 -16
- package/build/cjs/features/ColumnSizing.js.map +1 -1
- package/build/cjs/features/Expanding.js +23 -2
- package/build/cjs/features/Expanding.js.map +1 -1
- package/build/cjs/features/Filters.js +54 -5
- package/build/cjs/features/Filters.js.map +1 -1
- package/build/cjs/features/Grouping.js +23 -2
- package/build/cjs/features/Grouping.js.map +1 -1
- package/build/cjs/features/Headers.js +87 -24
- package/build/cjs/features/Headers.js.map +1 -1
- package/build/cjs/features/Ordering.js +4 -1
- package/build/cjs/features/Ordering.js.map +1 -1
- package/build/cjs/features/Pagination.js +198 -0
- package/build/cjs/features/Pagination.js.map +1 -0
- package/build/cjs/features/Pinning.js +0 -14
- package/build/cjs/features/Pinning.js.map +1 -1
- package/build/cjs/features/RowSelection.js +541 -0
- package/build/cjs/features/RowSelection.js.map +1 -0
- package/build/cjs/features/Sorting.js +76 -18
- package/build/cjs/features/Sorting.js.map +1 -1
- package/build/cjs/features/Visibility.js +8 -2
- package/build/cjs/features/Visibility.js.map +1 -1
- package/build/cjs/index.js +2 -0
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/sortTypes.js +1 -0
- package/build/cjs/sortTypes.js.map +1 -1
- package/build/cjs/utils/columnFilterRowsFn.js +3 -2
- package/build/cjs/utils/columnFilterRowsFn.js.map +1 -1
- package/build/cjs/utils/expandRowsFn.js +2 -2
- package/build/cjs/utils/expandRowsFn.js.map +1 -1
- package/build/cjs/utils/globalFilterRowsFn.js +3 -2
- package/build/cjs/utils/globalFilterRowsFn.js.map +1 -1
- package/build/cjs/utils/groupRowsFn.js +4 -3
- package/build/cjs/utils/groupRowsFn.js.map +1 -1
- package/build/cjs/utils/paginateRowsFn.js +44 -0
- package/build/cjs/utils/paginateRowsFn.js.map +1 -0
- package/build/cjs/utils/sortRowsFn.js +3 -2
- package/build/cjs/utils/sortRowsFn.js.map +1 -1
- package/build/cjs/utils.js +6 -3
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +2626 -1571
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +350 -248
- package/build/types/core.d.ts +10 -25
- package/build/types/createTable.d.ts +21 -4
- package/build/types/features/ColumnSizing.d.ts +4 -10
- package/build/types/features/Expanding.d.ts +2 -1
- package/build/types/features/Filters.d.ts +7 -2
- package/build/types/features/Grouping.d.ts +2 -2
- package/build/types/features/Ordering.d.ts +1 -1
- package/build/types/features/Pagination.d.ts +44 -0
- package/build/types/features/Pinning.d.ts +3 -3
- package/build/types/features/RowSelection.d.ts +66 -0
- package/build/types/features/Sorting.d.ts +5 -2
- package/build/types/index.d.ts +2 -1
- package/build/types/sortTypes.d.ts +1 -0
- package/build/types/types.d.ts +9 -6
- package/build/types/utils/columnFilterRowsFn.d.ts +2 -2
- package/build/types/utils/expandRowsFn.d.ts +2 -2
- package/build/types/utils/globalFilterRowsFn.d.ts +2 -2
- package/build/types/utils/groupRowsFn.d.ts +2 -2
- package/build/types/utils/paginateRowsFn.d.ts +2 -0
- package/build/types/utils/sortRowsFn.d.ts +2 -2
- package/build/types/utils.d.ts +5 -1
- package/build/umd/index.development.js +2626 -1570
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/core.tsx +222 -273
- package/src/createTable.tsx +69 -9
- package/src/features/ColumnSizing.ts +8 -37
- package/src/features/Expanding.ts +27 -11
- package/src/features/Filters.ts +74 -19
- package/src/features/Grouping.ts +27 -12
- package/src/features/Headers.ts +26 -58
- package/src/features/Ordering.ts +2 -3
- package/src/features/Pagination.ts +327 -0
- package/src/features/Pinning.ts +3 -16
- package/src/features/RowSelection.ts +831 -0
- package/src/features/Sorting.ts +82 -22
- package/src/features/Visibility.ts +2 -4
- package/src/index.tsx +2 -1
- package/src/sortTypes.ts +1 -1
- package/src/types.ts +25 -8
- package/src/utils/columnFilterRowsFn.ts +5 -12
- package/src/utils/expandRowsFn.ts +2 -5
- package/src/utils/globalFilterRowsFn.ts +3 -10
- package/src/utils/groupRowsFn.ts +3 -5
- package/src/utils/paginateRowsFn.ts +34 -0
- package/src/utils/sortRowsFn.ts +5 -5
- package/src/utils.tsx +12 -4
- package/src/features/withPagination.oldts +0 -208
- package/src/features/withRowSelection.oldts +0 -467
package/src/features/Headers.ts
CHANGED
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
import { propGetter, memo, flexRender } from '../utils'
|
|
17
17
|
|
|
18
18
|
import * as ColumnSizing from './ColumnSizing'
|
|
19
|
+
import * as Sorting from './Sorting'
|
|
19
20
|
|
|
20
21
|
export type HeadersRow<
|
|
21
22
|
TData,
|
|
@@ -240,8 +241,7 @@ export function createRow<
|
|
|
240
241
|
_ => {
|
|
241
242
|
return row.getAllCells().filter(cell => cell.column.getIsVisible())
|
|
242
243
|
},
|
|
243
|
-
'row._getAllVisibleCells',
|
|
244
|
-
instance.options.debug
|
|
244
|
+
{ key: 'row._getAllVisibleCells', debug: instance.options.debug }
|
|
245
245
|
),
|
|
246
246
|
getVisibleCells: memo(
|
|
247
247
|
() => [
|
|
@@ -250,8 +250,7 @@ export function createRow<
|
|
|
250
250
|
row.getRightVisibleCells(),
|
|
251
251
|
],
|
|
252
252
|
(left, center, right) => [...left, ...center, ...right],
|
|
253
|
-
'row.getVisibleCells',
|
|
254
|
-
instance.options.debug
|
|
253
|
+
{ key: 'row.getVisibleCells', debug: instance.options.debug }
|
|
255
254
|
),
|
|
256
255
|
getCenterVisibleCells: memo(
|
|
257
256
|
() => [
|
|
@@ -264,8 +263,7 @@ export function createRow<
|
|
|
264
263
|
|
|
265
264
|
return allCells.filter(d => !leftAndRight.includes(d.columnId))
|
|
266
265
|
},
|
|
267
|
-
'row.getCenterVisibleCells',
|
|
268
|
-
instance.options.debug
|
|
266
|
+
{ key: 'row.getCenterVisibleCells', debug: instance.options.debug }
|
|
269
267
|
),
|
|
270
268
|
getLeftVisibleCells: memo(
|
|
271
269
|
() => [
|
|
@@ -280,8 +278,7 @@ export function createRow<
|
|
|
280
278
|
|
|
281
279
|
return cells
|
|
282
280
|
},
|
|
283
|
-
'row.getLeftVisibleCells',
|
|
284
|
-
instance.options.debug
|
|
281
|
+
{ key: 'row.getLeftVisibleCells', debug: instance.options.debug }
|
|
285
282
|
),
|
|
286
283
|
getRightVisibleCells: memo(
|
|
287
284
|
() => [
|
|
@@ -295,8 +292,7 @@ export function createRow<
|
|
|
295
292
|
|
|
296
293
|
return cells
|
|
297
294
|
},
|
|
298
|
-
'row.getRightVisibleCells',
|
|
299
|
-
instance.options.debug
|
|
295
|
+
{ key: 'row.getRightVisibleCells', debug: instance.options.debug }
|
|
300
296
|
),
|
|
301
297
|
}
|
|
302
298
|
}
|
|
@@ -404,24 +400,12 @@ export function getInstance<
|
|
|
404
400
|
instance.getHeaderProps(header.id, userProps)!,
|
|
405
401
|
getFooterProps: userProps =>
|
|
406
402
|
instance.getFooterProps(header.id, userProps)!,
|
|
407
|
-
renderHeader: () =>
|
|
408
|
-
|
|
403
|
+
renderHeader: () =>
|
|
404
|
+
flexRender(column.header, { instance, header, column }),
|
|
405
|
+
renderFooter: () =>
|
|
406
|
+
flexRender(column.footer, { instance, header, column }),
|
|
409
407
|
}
|
|
410
408
|
|
|
411
|
-
header = Object.assign(
|
|
412
|
-
header,
|
|
413
|
-
ColumnSizing.createHeader(
|
|
414
|
-
header as Header<
|
|
415
|
-
TData,
|
|
416
|
-
TValue,
|
|
417
|
-
TFilterFns,
|
|
418
|
-
TSortingFns,
|
|
419
|
-
TAggregationFns
|
|
420
|
-
>,
|
|
421
|
-
instance
|
|
422
|
-
)
|
|
423
|
-
)
|
|
424
|
-
|
|
425
409
|
// Yes, we have to convert instance to uknown, because we know more than the compiler here.
|
|
426
410
|
return header as Header<
|
|
427
411
|
TData,
|
|
@@ -459,8 +443,7 @@ export function getInstance<
|
|
|
459
443
|
|
|
460
444
|
return headerGroups
|
|
461
445
|
},
|
|
462
|
-
'getHeaderGroups',
|
|
463
|
-
instance.options.debug
|
|
446
|
+
{ key: 'getHeaderGroups', debug: instance.options.debug }
|
|
464
447
|
),
|
|
465
448
|
|
|
466
449
|
getCenterHeaderGroups: memo(
|
|
@@ -476,8 +459,7 @@ export function getInstance<
|
|
|
476
459
|
)
|
|
477
460
|
return buildHeaderGroups(allColumns, leafColumns, instance, 'center')
|
|
478
461
|
},
|
|
479
|
-
'getCenterHeaderGroups',
|
|
480
|
-
instance.options.debug
|
|
462
|
+
{ key: 'getCenterHeaderGroups', debug: instance.options.debug }
|
|
481
463
|
),
|
|
482
464
|
|
|
483
465
|
getLeftHeaderGroups: memo(
|
|
@@ -490,8 +472,7 @@ export function getInstance<
|
|
|
490
472
|
leafColumns = leafColumns.filter(column => left?.includes(column.id))
|
|
491
473
|
return buildHeaderGroups(allColumns, leafColumns, instance, 'left')
|
|
492
474
|
},
|
|
493
|
-
'getLeftHeaderGroups',
|
|
494
|
-
instance.options.debug
|
|
475
|
+
{ key: 'getLeftHeaderGroups', debug: instance.options.debug }
|
|
495
476
|
),
|
|
496
477
|
|
|
497
478
|
getRightHeaderGroups: memo(
|
|
@@ -504,8 +485,7 @@ export function getInstance<
|
|
|
504
485
|
leafColumns = leafColumns.filter(column => right?.includes(column.id))
|
|
505
486
|
return buildHeaderGroups(allColumns, leafColumns, instance, 'right')
|
|
506
487
|
},
|
|
507
|
-
'getRightHeaderGroups',
|
|
508
|
-
instance.options.debug
|
|
488
|
+
{ key: 'getRightHeaderGroups', debug: instance.options.debug }
|
|
509
489
|
),
|
|
510
490
|
|
|
511
491
|
// Footer Groups
|
|
@@ -515,8 +495,7 @@ export function getInstance<
|
|
|
515
495
|
headerGroups => {
|
|
516
496
|
return [...headerGroups].reverse()
|
|
517
497
|
},
|
|
518
|
-
'getFooterGroups',
|
|
519
|
-
instance.options.debug
|
|
498
|
+
{ key: 'getFooterGroups', debug: instance.options.debug }
|
|
520
499
|
),
|
|
521
500
|
|
|
522
501
|
getLeftFooterGroups: memo(
|
|
@@ -524,8 +503,7 @@ export function getInstance<
|
|
|
524
503
|
headerGroups => {
|
|
525
504
|
return [...headerGroups].reverse()
|
|
526
505
|
},
|
|
527
|
-
'getLeftFooterGroups',
|
|
528
|
-
instance.options.debug
|
|
506
|
+
{ key: 'getLeftFooterGroups', debug: instance.options.debug }
|
|
529
507
|
),
|
|
530
508
|
|
|
531
509
|
getCenterFooterGroups: memo(
|
|
@@ -533,8 +511,7 @@ export function getInstance<
|
|
|
533
511
|
headerGroups => {
|
|
534
512
|
return [...headerGroups].reverse()
|
|
535
513
|
},
|
|
536
|
-
'getCenterFooterGroups',
|
|
537
|
-
instance.options.debug
|
|
514
|
+
{ key: 'getCenterFooterGroups', debug: instance.options.debug }
|
|
538
515
|
),
|
|
539
516
|
|
|
540
517
|
getRightFooterGroups: memo(
|
|
@@ -542,8 +519,7 @@ export function getInstance<
|
|
|
542
519
|
headerGroups => {
|
|
543
520
|
return [...headerGroups].reverse()
|
|
544
521
|
},
|
|
545
|
-
'getRightFooterGroups',
|
|
546
|
-
instance.options.debug
|
|
522
|
+
{ key: 'getRightFooterGroups', debug: instance.options.debug }
|
|
547
523
|
),
|
|
548
524
|
|
|
549
525
|
// Flat Headers
|
|
@@ -557,8 +533,7 @@ export function getInstance<
|
|
|
557
533
|
})
|
|
558
534
|
.flat()
|
|
559
535
|
},
|
|
560
|
-
'getFlatHeaders',
|
|
561
|
-
instance.options.debug
|
|
536
|
+
{ key: 'getFlatHeaders', debug: instance.options.debug }
|
|
562
537
|
),
|
|
563
538
|
|
|
564
539
|
getLeftFlatHeaders: memo(
|
|
@@ -570,8 +545,7 @@ export function getInstance<
|
|
|
570
545
|
})
|
|
571
546
|
.flat()
|
|
572
547
|
},
|
|
573
|
-
'getLeftFlatHeaders',
|
|
574
|
-
instance.options.debug
|
|
548
|
+
{ key: 'getLeftFlatHeaders', debug: instance.options.debug }
|
|
575
549
|
),
|
|
576
550
|
|
|
577
551
|
getCenterFlatHeaders: memo(
|
|
@@ -583,8 +557,7 @@ export function getInstance<
|
|
|
583
557
|
})
|
|
584
558
|
.flat()
|
|
585
559
|
},
|
|
586
|
-
'getCenterFlatHeaders',
|
|
587
|
-
instance.options.debug
|
|
560
|
+
{ key: 'getCenterFlatHeaders', debug: instance.options.debug }
|
|
588
561
|
),
|
|
589
562
|
|
|
590
563
|
getRightFlatHeaders: memo(
|
|
@@ -596,8 +569,7 @@ export function getInstance<
|
|
|
596
569
|
})
|
|
597
570
|
.flat()
|
|
598
571
|
},
|
|
599
|
-
'getRightFlatHeaders',
|
|
600
|
-
instance.options.debug
|
|
572
|
+
{ key: 'getRightFlatHeaders', debug: instance.options.debug }
|
|
601
573
|
),
|
|
602
574
|
|
|
603
575
|
// Leaf Headers
|
|
@@ -607,8 +579,7 @@ export function getInstance<
|
|
|
607
579
|
flatHeaders => {
|
|
608
580
|
return flatHeaders.filter(header => !header.subHeaders?.length)
|
|
609
581
|
},
|
|
610
|
-
'getCenterLeafHeaders',
|
|
611
|
-
instance.options.debug
|
|
582
|
+
{ key: 'getCenterLeafHeaders', debug: instance.options.debug }
|
|
612
583
|
),
|
|
613
584
|
|
|
614
585
|
getLeftLeafHeaders: memo(
|
|
@@ -616,8 +587,7 @@ export function getInstance<
|
|
|
616
587
|
flatHeaders => {
|
|
617
588
|
return flatHeaders.filter(header => !header.subHeaders?.length)
|
|
618
589
|
},
|
|
619
|
-
'getLeftLeafHeaders',
|
|
620
|
-
instance.options.debug
|
|
590
|
+
{ key: 'getLeftLeafHeaders', debug: instance.options.debug }
|
|
621
591
|
),
|
|
622
592
|
|
|
623
593
|
getRightLeafHeaders: memo(
|
|
@@ -625,8 +595,7 @@ export function getInstance<
|
|
|
625
595
|
flatHeaders => {
|
|
626
596
|
return flatHeaders.filter(header => !header.subHeaders?.length)
|
|
627
597
|
},
|
|
628
|
-
'getRightLeafHeaders',
|
|
629
|
-
instance.options.debug
|
|
598
|
+
{ key: 'getRightLeafHeaders', debug: instance.options.debug }
|
|
630
599
|
),
|
|
631
600
|
|
|
632
601
|
getLeafHeaders: memo(
|
|
@@ -646,8 +615,7 @@ export function getInstance<
|
|
|
646
615
|
})
|
|
647
616
|
.flat()
|
|
648
617
|
},
|
|
649
|
-
'getLeafHeaders',
|
|
650
|
-
instance.options.debug
|
|
618
|
+
{ key: 'getLeafHeaders', debug: instance.options.debug }
|
|
651
619
|
),
|
|
652
620
|
|
|
653
621
|
getHeader: (id: string) => {
|
package/src/features/Ordering.ts
CHANGED
|
@@ -7,7 +7,7 @@ import * as Grouping from './Grouping'
|
|
|
7
7
|
export type ColumnOrderState = string[]
|
|
8
8
|
|
|
9
9
|
export type ColumnOrderTableState = {
|
|
10
|
-
columnOrder:
|
|
10
|
+
columnOrder: ColumnOrderState
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
export type ColumnOrderOptions = {
|
|
@@ -127,8 +127,7 @@ export function getInstance<
|
|
|
127
127
|
groupedColumnMode
|
|
128
128
|
)
|
|
129
129
|
},
|
|
130
|
-
'getOrderColumnsFn',
|
|
131
|
-
instance.options.debug
|
|
130
|
+
{ key: 'getOrderColumnsFn', debug: instance.options.debug }
|
|
132
131
|
),
|
|
133
132
|
}
|
|
134
133
|
}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Column,
|
|
3
|
+
OnChangeFn,
|
|
4
|
+
ReactTable,
|
|
5
|
+
Row,
|
|
6
|
+
RowModel,
|
|
7
|
+
TableState,
|
|
8
|
+
Updater,
|
|
9
|
+
} from '../types'
|
|
10
|
+
import { functionalUpdate, makeStateUpdater, memo } from '../utils'
|
|
11
|
+
|
|
12
|
+
export type PageCount = undefined | null | number
|
|
13
|
+
|
|
14
|
+
export type PaginationState = {
|
|
15
|
+
pageIndex: number
|
|
16
|
+
pageSize: number
|
|
17
|
+
pageCount?: PageCount
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type PaginationTableState = {
|
|
21
|
+
pagination: PaginationState
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export type PaginationOptions<
|
|
25
|
+
TData,
|
|
26
|
+
TValue,
|
|
27
|
+
TFilterFns,
|
|
28
|
+
TSortingFns,
|
|
29
|
+
TAggregationFns
|
|
30
|
+
> = {
|
|
31
|
+
onPaginationChange?: OnChangeFn<PaginationState>
|
|
32
|
+
autoResetPageIndex?: boolean
|
|
33
|
+
paginateRowsFn?: (
|
|
34
|
+
instance: ReactTable<
|
|
35
|
+
TData,
|
|
36
|
+
TValue,
|
|
37
|
+
TFilterFns,
|
|
38
|
+
TSortingFns,
|
|
39
|
+
TAggregationFns
|
|
40
|
+
>,
|
|
41
|
+
rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
|
|
42
|
+
) => RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export type PaginationDefaultOptions = {
|
|
46
|
+
onPaginationChange: OnChangeFn<PaginationState>
|
|
47
|
+
autoResetPageIndex: boolean
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export type PaginationInstance<
|
|
51
|
+
TData,
|
|
52
|
+
TValue,
|
|
53
|
+
TFilterFns,
|
|
54
|
+
TSortingFns,
|
|
55
|
+
TAggregationFns
|
|
56
|
+
> = {
|
|
57
|
+
_notifyPageIndexReset: () => void
|
|
58
|
+
setPagination: (updater: Updater<PaginationState>) => void
|
|
59
|
+
resetPagination: () => void
|
|
60
|
+
setPageIndex: (updater: Updater<number>) => void
|
|
61
|
+
resetPageIndex: () => void
|
|
62
|
+
setPageSize: (updater: Updater<number>) => void
|
|
63
|
+
resetPageSize: () => void
|
|
64
|
+
setPageCount: (updater: Updater<PageCount>) => void
|
|
65
|
+
getPageOptions: () => number[]
|
|
66
|
+
getCanPreviousPage: () => boolean
|
|
67
|
+
getCanNextPage: () => boolean
|
|
68
|
+
previousPage: () => void
|
|
69
|
+
nextPage: () => void
|
|
70
|
+
getPaginationRowModel: () => RowModel<
|
|
71
|
+
TData,
|
|
72
|
+
TValue,
|
|
73
|
+
TFilterFns,
|
|
74
|
+
TSortingFns,
|
|
75
|
+
TAggregationFns
|
|
76
|
+
>
|
|
77
|
+
getPrePaginationRows: () => Row<
|
|
78
|
+
TData,
|
|
79
|
+
TValue,
|
|
80
|
+
TFilterFns,
|
|
81
|
+
TSortingFns,
|
|
82
|
+
TAggregationFns
|
|
83
|
+
>[]
|
|
84
|
+
getPrePaginationFlatRows: () => Row<
|
|
85
|
+
TData,
|
|
86
|
+
TValue,
|
|
87
|
+
TFilterFns,
|
|
88
|
+
TSortingFns,
|
|
89
|
+
TAggregationFns
|
|
90
|
+
>[]
|
|
91
|
+
getPrePaginationRowsById: () => Record<
|
|
92
|
+
string,
|
|
93
|
+
Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
|
|
94
|
+
>
|
|
95
|
+
getPaginationRows: () => Row<
|
|
96
|
+
TData,
|
|
97
|
+
TValue,
|
|
98
|
+
TFilterFns,
|
|
99
|
+
TSortingFns,
|
|
100
|
+
TAggregationFns
|
|
101
|
+
>[]
|
|
102
|
+
getPaginationFlatRows: () => Row<
|
|
103
|
+
TData,
|
|
104
|
+
TValue,
|
|
105
|
+
TFilterFns,
|
|
106
|
+
TSortingFns,
|
|
107
|
+
TAggregationFns
|
|
108
|
+
>[]
|
|
109
|
+
getPaginationRowsById: () => Record<
|
|
110
|
+
string,
|
|
111
|
+
Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
|
|
112
|
+
>
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
//
|
|
116
|
+
|
|
117
|
+
export function getInitialState(): PaginationTableState {
|
|
118
|
+
return {
|
|
119
|
+
pagination: {
|
|
120
|
+
pageIndex: 0,
|
|
121
|
+
pageSize: 10,
|
|
122
|
+
},
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export function getDefaultOptions<
|
|
127
|
+
TData,
|
|
128
|
+
TValue,
|
|
129
|
+
TFilterFns,
|
|
130
|
+
TSortingFns,
|
|
131
|
+
TAggregationFns
|
|
132
|
+
>(
|
|
133
|
+
instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
|
|
134
|
+
): PaginationDefaultOptions {
|
|
135
|
+
return {
|
|
136
|
+
onPaginationChange: makeStateUpdater('pagination', instance),
|
|
137
|
+
autoResetPageIndex: true,
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export function getInstance<
|
|
142
|
+
TData,
|
|
143
|
+
TValue,
|
|
144
|
+
TFilterFns,
|
|
145
|
+
TSortingFns,
|
|
146
|
+
TAggregationFns
|
|
147
|
+
>(
|
|
148
|
+
instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
|
|
149
|
+
): PaginationInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {
|
|
150
|
+
let registered = false
|
|
151
|
+
return {
|
|
152
|
+
_notifyPageIndexReset: () => {
|
|
153
|
+
if (!registered) {
|
|
154
|
+
registered = true
|
|
155
|
+
return
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (instance.options.autoResetAll === false) {
|
|
159
|
+
return
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (
|
|
163
|
+
instance.options.autoResetAll === true ||
|
|
164
|
+
instance.options.autoResetPageIndex
|
|
165
|
+
) {
|
|
166
|
+
instance.resetPageSize()
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
setPagination: updater => {
|
|
170
|
+
const safeUpdater: Updater<PaginationState> = old => {
|
|
171
|
+
let newState = functionalUpdate(updater, old)
|
|
172
|
+
|
|
173
|
+
if (instance.options.paginateRowsFn) {
|
|
174
|
+
newState.pageCount = instance.getPrePaginationRows()?.length
|
|
175
|
+
? Math.ceil(
|
|
176
|
+
instance.getPrePaginationRows().length /
|
|
177
|
+
instance.getState().pagination.pageSize
|
|
178
|
+
)
|
|
179
|
+
: 0
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return newState
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return instance.options.onPaginationChange?.(
|
|
186
|
+
safeUpdater,
|
|
187
|
+
functionalUpdate(safeUpdater, instance.getState().pagination)
|
|
188
|
+
)
|
|
189
|
+
},
|
|
190
|
+
resetPagination: () => {
|
|
191
|
+
instance.setPagination(
|
|
192
|
+
instance.initialState.pagination ?? {
|
|
193
|
+
pageIndex: 0,
|
|
194
|
+
pageSize: 10,
|
|
195
|
+
pageCount: -1,
|
|
196
|
+
}
|
|
197
|
+
)
|
|
198
|
+
},
|
|
199
|
+
setPageIndex: updater => {
|
|
200
|
+
instance.setPagination(old => {
|
|
201
|
+
let pageIndex = functionalUpdate(updater, old.pageIndex)
|
|
202
|
+
|
|
203
|
+
const maxPageIndex =
|
|
204
|
+
old.pageCount && old.pageCount > 0
|
|
205
|
+
? old.pageCount - 1
|
|
206
|
+
: Number.MAX_SAFE_INTEGER
|
|
207
|
+
|
|
208
|
+
pageIndex = Math.min(Math.max(0, pageIndex), maxPageIndex)
|
|
209
|
+
|
|
210
|
+
return {
|
|
211
|
+
...old,
|
|
212
|
+
pageIndex,
|
|
213
|
+
}
|
|
214
|
+
})
|
|
215
|
+
},
|
|
216
|
+
resetPageIndex: () => {
|
|
217
|
+
instance.setPageIndex(0)
|
|
218
|
+
},
|
|
219
|
+
resetPageSize: () => {
|
|
220
|
+
instance.setPageSize(
|
|
221
|
+
instance.options.initialState?.pagination?.pageSize ?? 10
|
|
222
|
+
)
|
|
223
|
+
},
|
|
224
|
+
setPageSize: updater => {
|
|
225
|
+
instance.setPagination(old => {
|
|
226
|
+
const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize))
|
|
227
|
+
const topRowIndex = old.pageSize * old.pageIndex!
|
|
228
|
+
const pageIndex = Math.floor(topRowIndex / pageSize)
|
|
229
|
+
|
|
230
|
+
return {
|
|
231
|
+
...old,
|
|
232
|
+
pageIndex,
|
|
233
|
+
pageSize,
|
|
234
|
+
}
|
|
235
|
+
})
|
|
236
|
+
},
|
|
237
|
+
setPageCount: updater =>
|
|
238
|
+
instance.setPagination(old => {
|
|
239
|
+
let newPageCount = functionalUpdate(updater, old.pageCount)
|
|
240
|
+
|
|
241
|
+
if (typeof newPageCount === 'number') {
|
|
242
|
+
newPageCount = Math.max(-1, newPageCount)
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return {
|
|
246
|
+
...old,
|
|
247
|
+
pageCount: newPageCount,
|
|
248
|
+
}
|
|
249
|
+
}),
|
|
250
|
+
|
|
251
|
+
getPageOptions: memo(
|
|
252
|
+
() => [
|
|
253
|
+
instance.getState().pagination.pageSize,
|
|
254
|
+
instance.getState().pagination.pageCount,
|
|
255
|
+
],
|
|
256
|
+
(pageSize, pageCount) => {
|
|
257
|
+
let pageOptions: number[] = []
|
|
258
|
+
if (pageCount && pageCount > 0) {
|
|
259
|
+
pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i)
|
|
260
|
+
}
|
|
261
|
+
return pageOptions
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
key: 'getPageOptions',
|
|
265
|
+
debug: instance.options.debug,
|
|
266
|
+
}
|
|
267
|
+
),
|
|
268
|
+
|
|
269
|
+
getCanPreviousPage: () => instance.getState().pagination.pageIndex > 0,
|
|
270
|
+
|
|
271
|
+
getCanNextPage: () => {
|
|
272
|
+
const { pageIndex, pageCount, pageSize } = instance.getState().pagination
|
|
273
|
+
|
|
274
|
+
if (pageCount === -1) {
|
|
275
|
+
return true
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
if (pageCount === 0) {
|
|
279
|
+
return false
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
return (
|
|
283
|
+
pageIndex <
|
|
284
|
+
Math.ceil(instance.getPrePaginationRows().length / pageSize) - 1
|
|
285
|
+
)
|
|
286
|
+
},
|
|
287
|
+
|
|
288
|
+
previousPage: () => {
|
|
289
|
+
return instance.setPageIndex(old => old - 1)
|
|
290
|
+
},
|
|
291
|
+
|
|
292
|
+
nextPage: () => {
|
|
293
|
+
return instance.setPageIndex(old => {
|
|
294
|
+
return old + 1
|
|
295
|
+
})
|
|
296
|
+
},
|
|
297
|
+
|
|
298
|
+
getPaginationRowModel: memo(
|
|
299
|
+
() => [
|
|
300
|
+
instance.getState().pagination,
|
|
301
|
+
instance.getExpandedRowModel(),
|
|
302
|
+
instance.options.paginateRowsFn,
|
|
303
|
+
],
|
|
304
|
+
(_pagination, rowModel, paginateRowsFn) => {
|
|
305
|
+
if (!paginateRowsFn || !rowModel.rows.length) {
|
|
306
|
+
return rowModel
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
if (process.env.NODE_ENV !== 'production' && instance.options.debug)
|
|
310
|
+
console.info('Paginating...')
|
|
311
|
+
|
|
312
|
+
return paginateRowsFn(instance, rowModel)
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
key: 'getPaginationRowModel',
|
|
316
|
+
debug: instance.options.debug,
|
|
317
|
+
}
|
|
318
|
+
),
|
|
319
|
+
|
|
320
|
+
getPrePaginationRows: () => instance.getExpandedRowModel().rows,
|
|
321
|
+
getPrePaginationFlatRows: () => instance.getExpandedRowModel().flatRows,
|
|
322
|
+
getPrePaginationRowsById: () => instance.getExpandedRowModel().rowsById,
|
|
323
|
+
getPaginationRows: () => instance.getPaginationRowModel().rows,
|
|
324
|
+
getPaginationFlatRows: () => instance.getPaginationRowModel().flatRows,
|
|
325
|
+
getPaginationRowsById: () => instance.getPaginationRowModel().rowsById,
|
|
326
|
+
}
|
|
327
|
+
}
|
package/src/features/Pinning.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { OnChangeFn, Updater, ReactTable, Column } from '../types'
|
|
2
2
|
import { functionalUpdate, makeStateUpdater } from '../utils'
|
|
3
3
|
|
|
4
|
-
type ColumnPinningPosition =
|
|
4
|
+
type ColumnPinningPosition = false | 'left' | 'right'
|
|
5
5
|
|
|
6
6
|
export type ColumnPinningState = {
|
|
7
7
|
left?: string[]
|
|
@@ -29,7 +29,7 @@ export type ColumnPinningColumnDef = {
|
|
|
29
29
|
export type ColumnPinningColumn = {
|
|
30
30
|
getCanPin: () => boolean
|
|
31
31
|
getPinnedIndex: () => number
|
|
32
|
-
getIsPinned: () =>
|
|
32
|
+
getIsPinned: () => ColumnPinningPosition
|
|
33
33
|
pin: (position: ColumnPinningPosition) => void
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -44,7 +44,7 @@ export type ColumnPinningInstance<
|
|
|
44
44
|
resetColumnPinning: () => void
|
|
45
45
|
pinColumn: (columnId: string, position: ColumnPinningPosition) => void
|
|
46
46
|
getColumnCanPin: (columnId: string) => boolean
|
|
47
|
-
getColumnIsPinned: (columnId: string) =>
|
|
47
|
+
getColumnIsPinned: (columnId: string) => ColumnPinningPosition
|
|
48
48
|
getColumnPinnedIndex: (columnId: string) => number
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -186,25 +186,12 @@ export function getInstance<
|
|
|
186
186
|
const isLeft = leafColumnIds.some(d => left?.includes(d))
|
|
187
187
|
const isRight = leafColumnIds.some(d => right?.includes(d))
|
|
188
188
|
|
|
189
|
-
if (isLeft && isRight) {
|
|
190
|
-
return 'both'
|
|
191
|
-
}
|
|
192
|
-
|
|
193
189
|
return isLeft ? 'left' : isRight ? 'right' : false
|
|
194
190
|
},
|
|
195
191
|
|
|
196
192
|
getColumnPinnedIndex: columnId => {
|
|
197
193
|
const position = instance.getColumnIsPinned(columnId)
|
|
198
194
|
|
|
199
|
-
if (position === 'both') {
|
|
200
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
201
|
-
console.warn(
|
|
202
|
-
`Column ${columnId} has leaf columns that are pinned on both sides`
|
|
203
|
-
)
|
|
204
|
-
}
|
|
205
|
-
throw new Error()
|
|
206
|
-
}
|
|
207
|
-
|
|
208
195
|
return position
|
|
209
196
|
? instance.getState().columnPinning?.[position]?.indexOf(columnId) ?? -1
|
|
210
197
|
: 0
|