Skip to content

Commit e638f92

Browse files
authored
fix: stabilize pagination item count (#695)
1 parent 3b6d3a6 commit e638f92

4 files changed

Lines changed: 156 additions & 314 deletions

File tree

src/Pagination.tsx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -486,13 +486,27 @@ const Pagination: React.FC<PaginationProps> = (props) => {
486486
left = allPages - pageBufferSize * 2;
487487
}
488488

489+
const hasJumpPrev =
490+
!!jumpPrev && current - 1 >= pageBufferSize * 2 && current !== 1 + 2;
491+
const hasJumpNext =
492+
!!jumpNext &&
493+
allPages - current >= pageBufferSize * 2 &&
494+
current !== allPages - 2;
495+
496+
if (!showLessItems && hasJumpPrev && right !== allPages) {
497+
left += 1;
498+
}
499+
if (!showLessItems && hasJumpNext && left !== 1) {
500+
right -= 1;
501+
}
502+
489503
for (let i = left; i <= right; i += 1) {
490504
pagerList.push(
491505
<Pager {...pagerProps} key={i} page={i} active={current === i} />,
492506
);
493507
}
494508

495-
if (current - 1 >= pageBufferSize * 2 && current !== 1 + 2) {
509+
if (hasJumpPrev) {
496510
pagerList[0] = React.cloneElement<PagerProps>(pagerList[0], {
497511
className: clsx(
498512
`${prefixCls}-item-after-jump-prev`,
@@ -503,7 +517,7 @@ const Pagination: React.FC<PaginationProps> = (props) => {
503517
pagerList.unshift(jumpPrev);
504518
}
505519

506-
if (allPages - current >= pageBufferSize * 2 && current !== allPages - 2) {
520+
if (hasJumpNext) {
507521
const lastOne = pagerList[pagerList.length - 1];
508522
pagerList[pagerList.length - 1] = React.cloneElement(lastOne, {
509523
className: clsx(

tests/__snapshots__/demo.test.tsx.snap

Lines changed: 8 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1550,18 +1550,7 @@ exports[`Example jumper 1`] = `
15501550
/>
15511551
</li>
15521552
<li
1553-
class="rc-pagination-item rc-pagination-item-3 rc-pagination-item-after-jump-prev"
1554-
tabindex="0"
1555-
title="3"
1556-
>
1557-
<a
1558-
rel="nofollow"
1559-
>
1560-
3
1561-
</a>
1562-
</li>
1563-
<li
1564-
class="rc-pagination-item rc-pagination-item-4"
1553+
class="rc-pagination-item rc-pagination-item-4 rc-pagination-item-after-jump-prev"
15651554
tabindex="0"
15661555
title="4"
15671556
>
@@ -1583,7 +1572,7 @@ exports[`Example jumper 1`] = `
15831572
</a>
15841573
</li>
15851574
<li
1586-
class="rc-pagination-item rc-pagination-item-6"
1575+
class="rc-pagination-item rc-pagination-item-6 rc-pagination-item-before-jump-next"
15871576
tabindex="0"
15881577
title="6"
15891578
>
@@ -1593,17 +1582,6 @@ exports[`Example jumper 1`] = `
15931582
6
15941583
</a>
15951584
</li>
1596-
<li
1597-
class="rc-pagination-item rc-pagination-item-7 rc-pagination-item-before-jump-next"
1598-
tabindex="0"
1599-
title="7"
1600-
>
1601-
<a
1602-
rel="nofollow"
1603-
>
1604-
7
1605-
</a>
1606-
</li>
16071585
<li
16081586
class="rc-pagination-jump-next"
16091587
tabindex="0"
@@ -1735,18 +1713,7 @@ exports[`Example jumper 1`] = `
17351713
/>
17361714
</li>
17371715
<li
1738-
class="rc-pagination-item rc-pagination-item-3 rc-pagination-item-after-jump-prev"
1739-
tabindex="0"
1740-
title="3"
1741-
>
1742-
<a
1743-
rel="nofollow"
1744-
>
1745-
3
1746-
</a>
1747-
</li>
1748-
<li
1749-
class="rc-pagination-item rc-pagination-item-4"
1716+
class="rc-pagination-item rc-pagination-item-4 rc-pagination-item-after-jump-prev"
17501717
tabindex="0"
17511718
title="4"
17521719
>
@@ -1768,7 +1735,7 @@ exports[`Example jumper 1`] = `
17681735
</a>
17691736
</li>
17701737
<li
1771-
class="rc-pagination-item rc-pagination-item-6"
1738+
class="rc-pagination-item rc-pagination-item-6 rc-pagination-item-before-jump-next"
17721739
tabindex="0"
17731740
title="6"
17741741
>
@@ -1778,17 +1745,6 @@ exports[`Example jumper 1`] = `
17781745
6
17791746
</a>
17801747
</li>
1781-
<li
1782-
class="rc-pagination-item rc-pagination-item-7 rc-pagination-item-before-jump-next"
1783-
tabindex="0"
1784-
title="7"
1785-
>
1786-
<a
1787-
rel="nofollow"
1788-
>
1789-
7
1790-
</a>
1791-
</li>
17921748
<li
17931749
class="rc-pagination-jump-next"
17941750
tabindex="0"
@@ -2097,18 +2053,7 @@ exports[`Example jumperWithGoButton 1`] = `
20972053
/>
20982054
</li>
20992055
<li
2100-
class="rc-pagination-item rc-pagination-item-3 rc-pagination-item-after-jump-prev"
2101-
tabindex="0"
2102-
title="3"
2103-
>
2104-
<a
2105-
rel="nofollow"
2106-
>
2107-
3
2108-
</a>
2109-
</li>
2110-
<li
2111-
class="rc-pagination-item rc-pagination-item-4"
2056+
class="rc-pagination-item rc-pagination-item-4 rc-pagination-item-after-jump-prev"
21122057
tabindex="0"
21132058
title="4"
21142059
>
@@ -2130,7 +2075,7 @@ exports[`Example jumperWithGoButton 1`] = `
21302075
</a>
21312076
</li>
21322077
<li
2133-
class="rc-pagination-item rc-pagination-item-6"
2078+
class="rc-pagination-item rc-pagination-item-6 rc-pagination-item-before-jump-next"
21342079
tabindex="0"
21352080
title="6"
21362081
>
@@ -2140,17 +2085,6 @@ exports[`Example jumperWithGoButton 1`] = `
21402085
6
21412086
</a>
21422087
</li>
2143-
<li
2144-
class="rc-pagination-item rc-pagination-item-7 rc-pagination-item-before-jump-next"
2145-
tabindex="0"
2146-
title="7"
2147-
>
2148-
<a
2149-
rel="nofollow"
2150-
>
2151-
7
2152-
</a>
2153-
</li>
21542088
<li
21552089
class="rc-pagination-jump-next"
21562090
tabindex="0"
@@ -2639,18 +2573,7 @@ exports[`Example locale 1`] = `
26392573
/>
26402574
</li>
26412575
<li
2642-
class="rc-pagination-item rc-pagination-item-3 rc-pagination-item-after-jump-prev"
2643-
tabindex="0"
2644-
title="3"
2645-
>
2646-
<a
2647-
rel="nofollow"
2648-
>
2649-
3
2650-
</a>
2651-
</li>
2652-
<li
2653-
class="rc-pagination-item rc-pagination-item-4"
2576+
class="rc-pagination-item rc-pagination-item-4 rc-pagination-item-after-jump-prev"
26542577
tabindex="0"
26552578
title="4"
26562579
>
@@ -2672,7 +2595,7 @@ exports[`Example locale 1`] = `
26722595
</a>
26732596
</li>
26742597
<li
2675-
class="rc-pagination-item rc-pagination-item-6"
2598+
class="rc-pagination-item rc-pagination-item-6 rc-pagination-item-before-jump-next"
26762599
tabindex="0"
26772600
title="6"
26782601
>
@@ -2682,17 +2605,6 @@ exports[`Example locale 1`] = `
26822605
6
26832606
</a>
26842607
</li>
2685-
<li
2686-
class="rc-pagination-item rc-pagination-item-7 rc-pagination-item-before-jump-next"
2687-
tabindex="0"
2688-
title="7"
2689-
>
2690-
<a
2691-
rel="nofollow"
2692-
>
2693-
7
2694-
</a>
2695-
</li>
26962608
<li
26972609
class="rc-pagination-jump-next"
26982610
tabindex="0"

0 commit comments

Comments
 (0)