@hyphen/hyphen-components 2.13.0 → 2.13.1
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/dist/components/Pagination/Pagination.utilities.d.ts +3 -4
- package/dist/hyphen-components.cjs.development.js +59 -58
- package/dist/hyphen-components.cjs.development.js.map +1 -1
- package/dist/hyphen-components.cjs.production.min.js +1 -1
- package/dist/hyphen-components.cjs.production.min.js.map +1 -1
- package/dist/hyphen-components.esm.js +59 -58
- package/dist/hyphen-components.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Pagination/Pagination.test.tsx +5 -2
- package/src/components/Pagination/Pagination.tsx +43 -25
- package/src/components/Pagination/Pagination.utilities.test.ts +15 -30
- package/src/components/Pagination/Pagination.utilities.ts +21 -59
|
@@ -2,10 +2,9 @@ export interface Page {
|
|
|
2
2
|
isPage: boolean;
|
|
3
3
|
pageNumber: number;
|
|
4
4
|
}
|
|
5
|
-
export declare const generatePages: (
|
|
6
|
-
export declare const generatePageRange: (numberOfPagesDisplayed: number, pageTotal: number) => number;
|
|
5
|
+
export declare const generatePages: (pageTotal: number, activePage: number, numberOfPagesDisplayed: number) => Page[];
|
|
7
6
|
export declare const generatePageTotal: (totalItemsCount: number, itemsPerPage: number) => number;
|
|
8
7
|
export declare const generateActiveListRange: (activePage: number, totalItemsCount: number, itemsPerPage: number) => {
|
|
9
|
-
first
|
|
10
|
-
last
|
|
8
|
+
first: number;
|
|
9
|
+
last: number;
|
|
11
10
|
};
|
|
@@ -3387,20 +3387,17 @@ var Modal = /*#__PURE__*/function () {
|
|
|
3387
3387
|
return Modal;
|
|
3388
3388
|
}();
|
|
3389
3389
|
|
|
3390
|
-
var generatePages = function generatePages(
|
|
3391
|
-
var
|
|
3390
|
+
var generatePages = function generatePages(pageTotal, activePage, numberOfPagesDisplayed) {
|
|
3391
|
+
var pageRange = Math.min(pageTotal, Math.max(1, numberOfPagesDisplayed));
|
|
3392
3392
|
var pages = [];
|
|
3393
3393
|
var startingPage = 1;
|
|
3394
3394
|
var endingPage = pageRange;
|
|
3395
|
-
if (
|
|
3396
|
-
startingPage = 1;
|
|
3397
|
-
endingPage =
|
|
3398
|
-
} else
|
|
3399
|
-
startingPage =
|
|
3400
|
-
endingPage = startingPage +
|
|
3401
|
-
} else if (activePage > numberOfPagesDisplayed && activePage + numberOfPagesDisplayed <= pageTotal) {
|
|
3402
|
-
startingPage = activePage - Math.floor(numberOfPagesDisplayed / 2);
|
|
3403
|
-
endingPage = startingPage + (numberOfPagesDisplayed - 1);
|
|
3395
|
+
if (activePage + Math.floor(pageRange / 2) >= pageTotal) {
|
|
3396
|
+
startingPage = Math.max(1, pageTotal - pageRange + 1);
|
|
3397
|
+
endingPage = pageTotal;
|
|
3398
|
+
} else {
|
|
3399
|
+
startingPage = Math.max(1, activePage - Math.floor(pageRange / 2));
|
|
3400
|
+
endingPage = Math.min(pageTotal, startingPage + pageRange - 1);
|
|
3404
3401
|
}
|
|
3405
3402
|
for (var i = startingPage; i <= endingPage; i += 1) {
|
|
3406
3403
|
pages.push({
|
|
@@ -3408,36 +3405,32 @@ var generatePages = function generatePages(pageRange, pageTotal, activePage, num
|
|
|
3408
3405
|
isPage: true
|
|
3409
3406
|
});
|
|
3410
3407
|
}
|
|
3411
|
-
|
|
3412
|
-
|
|
3413
|
-
|
|
3414
|
-
if (pageTotal > numberOfPagesDisplayed + 1) {
|
|
3408
|
+
// Handling ellipsis for overflow pages
|
|
3409
|
+
if (endingPage < pageTotal) {
|
|
3410
|
+
if (endingPage < pageTotal - 1) {
|
|
3415
3411
|
pages.push({
|
|
3416
|
-
pageNumber:
|
|
3412
|
+
pageNumber: -1,
|
|
3417
3413
|
isPage: false
|
|
3418
|
-
});
|
|
3414
|
+
}); // represents ellipsis
|
|
3419
3415
|
}
|
|
3420
3416
|
pages.push({
|
|
3421
3417
|
pageNumber: pageTotal,
|
|
3422
3418
|
isPage: true
|
|
3423
3419
|
});
|
|
3424
3420
|
}
|
|
3425
|
-
if (
|
|
3426
|
-
var threeDotsPage = activePage - numberOfPagesDisplayed > 1 ? activePage - numberOfPagesDisplayed : activePage - numberOfPagesDisplayed + 1;
|
|
3421
|
+
if (startingPage > 1) {
|
|
3427
3422
|
pages.unshift({
|
|
3428
3423
|
pageNumber: 1,
|
|
3429
3424
|
isPage: true
|
|
3430
|
-
}, {
|
|
3431
|
-
pageNumber: threeDotsPage,
|
|
3432
|
-
isPage: false
|
|
3433
3425
|
});
|
|
3426
|
+
if (startingPage > 2) {
|
|
3427
|
+
pages.splice(1, 0, {
|
|
3428
|
+
pageNumber: -1,
|
|
3429
|
+
isPage: false
|
|
3430
|
+
}); // represents ellipsis
|
|
3431
|
+
}
|
|
3434
3432
|
}
|
|
3435
|
-
return
|
|
3436
|
-
};
|
|
3437
|
-
// Return the true page range in cases
|
|
3438
|
-
// where number of pages wanted for display is larger than the actual page total.
|
|
3439
|
-
var generatePageRange = function generatePageRange(numberOfPagesDisplayed, pageTotal) {
|
|
3440
|
-
return numberOfPagesDisplayed > pageTotal ? pageTotal : numberOfPagesDisplayed;
|
|
3433
|
+
return pages;
|
|
3441
3434
|
};
|
|
3442
3435
|
var generatePageTotal = function generatePageTotal(totalItemsCount, itemsPerPage) {
|
|
3443
3436
|
return Math.ceil(totalItemsCount / itemsPerPage);
|
|
@@ -3446,19 +3439,12 @@ var generatePageTotal = function generatePageTotal(totalItemsCount, itemsPerPage
|
|
|
3446
3439
|
// E.G: if the items per page is 20 and we are on page 1, it will return:
|
|
3447
3440
|
// { first: 1, last: 20 }
|
|
3448
3441
|
var generateActiveListRange = function generateActiveListRange(activePage, totalItemsCount, itemsPerPage) {
|
|
3449
|
-
var
|
|
3450
|
-
var
|
|
3451
|
-
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
}
|
|
3455
|
-
activePageRange.first = activePage * itemsPerPage - (itemsPerPage - 1);
|
|
3456
|
-
activePageRange.last = activePage * itemsPerPage;
|
|
3457
|
-
} else {
|
|
3458
|
-
activePageRange.first = activePage * itemsPerPage - (itemsPerPage - 1);
|
|
3459
|
-
activePageRange.last = totalItemsCount;
|
|
3460
|
-
}
|
|
3461
|
-
return activePageRange;
|
|
3442
|
+
var first = (activePage - 1) * itemsPerPage + 1;
|
|
3443
|
+
var last = Math.min(activePage * itemsPerPage, totalItemsCount);
|
|
3444
|
+
return {
|
|
3445
|
+
first: first,
|
|
3446
|
+
last: last
|
|
3447
|
+
};
|
|
3462
3448
|
};
|
|
3463
3449
|
|
|
3464
3450
|
var Pagination = function Pagination(_ref) {
|
|
@@ -3481,23 +3467,31 @@ var Pagination = function Pagination(_ref) {
|
|
|
3481
3467
|
_ref$prevPageText = _ref.prevPageText,
|
|
3482
3468
|
prevPageText = _ref$prevPageText === void 0 ? 'Previous' : _ref$prevPageText;
|
|
3483
3469
|
var pageTotal = React.useMemo(function () {
|
|
3470
|
+
if (itemsPerPage <= 0) return 1;
|
|
3484
3471
|
return generatePageTotal(totalItemsCount, itemsPerPage);
|
|
3485
3472
|
}, [totalItemsCount, itemsPerPage]);
|
|
3486
|
-
var
|
|
3487
|
-
return generatePageRange(numberOfPagesDisplayed, pageTotal);
|
|
3488
|
-
}, [numberOfPagesDisplayed, pageTotal]);
|
|
3473
|
+
var validActivePage = Math.max(1, Math.min(activePage, pageTotal));
|
|
3489
3474
|
var activeListRange = React.useMemo(function () {
|
|
3490
|
-
return generateActiveListRange(
|
|
3491
|
-
}, [
|
|
3475
|
+
return generateActiveListRange(validActivePage, totalItemsCount, itemsPerPage);
|
|
3476
|
+
}, [validActivePage, totalItemsCount, itemsPerPage]);
|
|
3492
3477
|
var pages = React.useMemo(function () {
|
|
3493
|
-
return generatePages(
|
|
3494
|
-
}, [
|
|
3478
|
+
return generatePages(pageTotal, validActivePage, numberOfPagesDisplayed);
|
|
3479
|
+
}, [pageTotal, validActivePage, numberOfPagesDisplayed]);
|
|
3480
|
+
var paginationClassNames = React.useMemo(function () {
|
|
3481
|
+
return classNames(className);
|
|
3482
|
+
}, [className]);
|
|
3483
|
+
var activeListRangeText = React.useMemo(function () {
|
|
3484
|
+
if (totalItemsCount === 0) {
|
|
3485
|
+
return 'No items to display';
|
|
3486
|
+
}
|
|
3487
|
+
return "Showing " + activeListRange.first + "-" + activeListRange.last + " of " + totalItemsCount;
|
|
3488
|
+
}, [activeListRange, totalItemsCount]);
|
|
3495
3489
|
return React.createElement(Box, {
|
|
3496
3490
|
as: "nav",
|
|
3497
3491
|
direction: "row",
|
|
3498
3492
|
alignItems: "center",
|
|
3499
3493
|
justifyContent: "space-between",
|
|
3500
|
-
className:
|
|
3494
|
+
className: paginationClassNames
|
|
3501
3495
|
}, React.createElement(Box, {
|
|
3502
3496
|
direction: "row",
|
|
3503
3497
|
justifyContent: {
|
|
@@ -3511,18 +3505,17 @@ var Pagination = function Pagination(_ref) {
|
|
|
3511
3505
|
}, React.createElement(Button, {
|
|
3512
3506
|
variant: "secondary",
|
|
3513
3507
|
size: isCompact ? 'sm' : 'md',
|
|
3514
|
-
isDisabled:
|
|
3508
|
+
isDisabled: validActivePage === 1,
|
|
3515
3509
|
onClick: function onClick() {
|
|
3516
|
-
return onChange(
|
|
3510
|
+
return onChange(validActivePage - 1);
|
|
3517
3511
|
}
|
|
3518
3512
|
}, prevPageText), arePagesVisible && React.createElement(Box, {
|
|
3519
3513
|
direction: "row",
|
|
3520
3514
|
gap: "2xs"
|
|
3521
|
-
}, pages.map(function (_ref2) {
|
|
3515
|
+
}, pages.map(function (_ref2, index) {
|
|
3522
3516
|
var pageNumber = _ref2.pageNumber,
|
|
3523
3517
|
isPage = _ref2.isPage;
|
|
3524
|
-
|
|
3525
|
-
return React.createElement(Button, {
|
|
3518
|
+
return isPage ? React.createElement(Button, {
|
|
3526
3519
|
key: pageNumber,
|
|
3527
3520
|
onClick: function onClick() {
|
|
3528
3521
|
return onChange(pageNumber);
|
|
@@ -3533,13 +3526,21 @@ var Pagination = function Pagination(_ref) {
|
|
|
3533
3526
|
minWidth: isCompact ? '33px' : '42px'
|
|
3534
3527
|
},
|
|
3535
3528
|
className: className
|
|
3536
|
-
},
|
|
3529
|
+
}, pageNumber) : React.createElement(Box, {
|
|
3530
|
+
key: "ellipsis-" + index,
|
|
3531
|
+
style: {
|
|
3532
|
+
display: 'flexk',
|
|
3533
|
+
minWidth: isCompact ? '33px' : '42px',
|
|
3534
|
+
justifyContent: 'space-around',
|
|
3535
|
+
alignItems: 'center'
|
|
3536
|
+
}
|
|
3537
|
+
}, "...");
|
|
3537
3538
|
})), React.createElement(Button, {
|
|
3538
3539
|
variant: "secondary",
|
|
3539
3540
|
size: isCompact ? 'sm' : 'md',
|
|
3540
|
-
isDisabled:
|
|
3541
|
+
isDisabled: validActivePage === pageTotal,
|
|
3541
3542
|
onClick: function onClick() {
|
|
3542
|
-
return onChange(
|
|
3543
|
+
return onChange(validActivePage + 1);
|
|
3543
3544
|
}
|
|
3544
3545
|
}, nextPageText)), React.createElement(Box, {
|
|
3545
3546
|
as: "p",
|
|
@@ -3548,7 +3549,7 @@ var Pagination = function Pagination(_ref) {
|
|
|
3548
3549
|
tablet: 'block'
|
|
3549
3550
|
},
|
|
3550
3551
|
fontSize: isCompact ? 'sm' : 'md'
|
|
3551
|
-
}, isTotalVisible &&
|
|
3552
|
+
}, isTotalVisible && activeListRangeText));
|
|
3552
3553
|
};
|
|
3553
3554
|
|
|
3554
3555
|
var styles$6 = {"slider":"RangeInput-module_slider__Z6D68","disabled":"RangeInput-module_disabled__gyu72"};
|