@heycar-uikit/core
Version:
The React UI library from HeyCar
117 lines (114 loc) • 4.72 kB
JavaScript
import { b as __spreadArray } from '../tslib.es6-56356891.js';
import { P as PaginationItemType } from '../Pagination.types-db9615e7.js';
import { getSiblingsToRender } from '../utils/getSiblingsToRender.js';
import parseOnClick from '../utils/parseOnClick.js';
import useBreakpoint from './useBreakpoint.hook.js';
import 'react';
var shouldReturnObjInArray = function (condition, obj) {
if (condition) {
return [obj];
}
return [];
};
var getLabelForPageNumbers = function (page, isCurrentPage, locale) {
if (isCurrentPage) {
return locale.page.replace('#{page}', page.toString());
}
return locale.goto.replace('#{page}', page.toString());
};
var usePagination = function (_a) {
var onClick = _a.onClick, currentPage = _a.currentPage, totalPages = _a.totalPages, locale = _a.locale;
var breakpoints = useBreakpoint().breakpoints;
var isDesktop = breakpoints.isDesktop;
var shouldShowPreDots = (currentPage > 3 && totalPages !== 4) || currentPage > 4;
var shouldShowPostDots = (currentPage < totalPages - 2 && totalPages !== 4) ||
currentPage < totalPages - 3;
var siblingsToRender = getSiblingsToRender(totalPages, currentPage);
var items = __spreadArray(__spreadArray([
// Previous button
{
itemType: PaginationItemType.Previous,
page: currentPage - 1,
isDisabled: currentPage === 1,
onClick: parseOnClick({
onClick: onClick,
pageNumber: currentPage - 1,
isDisabled: currentPage === 1,
}),
'aria-label': locale.prevPage,
}
], (isDesktop
? __spreadArray(__spreadArray(__spreadArray(__spreadArray([
// First page
{
itemType: PaginationItemType.PageNumber,
page: 1,
isCurrentPage: currentPage === 1,
onClick: parseOnClick({
onClick: onClick,
pageNumber: 1,
isDisabled: false,
}),
'aria-label': getLabelForPageNumbers(1, currentPage === 1, locale),
}
], shouldReturnObjInArray(shouldShowPreDots, {
itemType: PaginationItemType.Ellipsis,
}), true), siblingsToRender.map(function (page) { return ({
itemType: PaginationItemType.PageNumber,
page: page,
isCurrentPage: currentPage === page,
onClick: parseOnClick({
onClick: onClick,
pageNumber: page,
isDisabled: false,
}),
'aria-label': getLabelForPageNumbers(page, currentPage === page, locale),
}); }), true), shouldReturnObjInArray(shouldShowPostDots, {
itemType: PaginationItemType.Ellipsis,
}), true), shouldReturnObjInArray(totalPages > 1, {
itemType: PaginationItemType.PageNumber,
page: totalPages,
isCurrentPage: currentPage === totalPages,
onClick: parseOnClick({
onClick: onClick,
pageNumber: totalPages,
isDisabled: false,
}),
'aria-label': getLabelForPageNumbers(totalPages, currentPage === totalPages, locale),
}), true) : __spreadArray(__spreadArray(__spreadArray([], shouldReturnObjInArray(currentPage !== totalPages || totalPages === 1, {
itemType: PaginationItemType.PageNumber,
page: currentPage,
onClick: parseOnClick({
onClick: onClick,
pageNumber: currentPage,
isDisabled: false,
}),
'aria-label': getLabelForPageNumbers(currentPage, true, locale),
}), true), shouldReturnObjInArray(currentPage !== totalPages, {
itemType: PaginationItemType.Slash,
}), true), shouldReturnObjInArray(totalPages > 1, {
itemType: PaginationItemType.PageNumber,
page: totalPages,
onClick: parseOnClick({
onClick: onClick,
pageNumber: totalPages,
isDisabled: false,
}),
'aria-label': getLabelForPageNumbers(totalPages, currentPage === totalPages, locale),
}), true)), true), [
// Next button
{
itemType: PaginationItemType.Next,
page: currentPage + 1,
isDisabled: currentPage === totalPages,
onClick: parseOnClick({
onClick: onClick,
pageNumber: currentPage + 1,
isDisabled: currentPage === totalPages,
}),
'aria-label': locale.nextPage,
},
], false);
return { items: items };
};
export { usePagination as default };