@heycar-uikit/core
Version:
The React UI library from HeyCar
117 lines (114 loc) • 5.07 kB
JavaScript
var tslib_es6 = require('../tslib.es6-dc6abeaa.js');
var Pagination_types = require('../Pagination.types-254e1d66.js');
var utils_getSiblingsToRender = require('../utils/getSiblingsToRender.js');
var utils_parseOnClick = require('../utils/parseOnClick.js');
var hooks_useBreakpoint_hook = require('./useBreakpoint.hook.js');
require('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 = hooks_useBreakpoint_hook["default"]().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 = utils_getSiblingsToRender.getSiblingsToRender(totalPages, currentPage);
var items = tslib_es6.__spreadArray(tslib_es6.__spreadArray([
// Previous button
{
itemType: Pagination_types.PaginationItemType.Previous,
page: currentPage - 1,
isDisabled: currentPage === 1,
onClick: utils_parseOnClick({
onClick: onClick,
pageNumber: currentPage - 1,
isDisabled: currentPage === 1,
}),
'aria-label': locale.prevPage,
}
], (isDesktop
? tslib_es6.__spreadArray(tslib_es6.__spreadArray(tslib_es6.__spreadArray(tslib_es6.__spreadArray([
// First page
{
itemType: Pagination_types.PaginationItemType.PageNumber,
page: 1,
isCurrentPage: currentPage === 1,
onClick: utils_parseOnClick({
onClick: onClick,
pageNumber: 1,
isDisabled: false,
}),
'aria-label': getLabelForPageNumbers(1, currentPage === 1, locale),
}
], shouldReturnObjInArray(shouldShowPreDots, {
itemType: Pagination_types.PaginationItemType.Ellipsis,
}), true), siblingsToRender.map(function (page) { return ({
itemType: Pagination_types.PaginationItemType.PageNumber,
page: page,
isCurrentPage: currentPage === page,
onClick: utils_parseOnClick({
onClick: onClick,
pageNumber: page,
isDisabled: false,
}),
'aria-label': getLabelForPageNumbers(page, currentPage === page, locale),
}); }), true), shouldReturnObjInArray(shouldShowPostDots, {
itemType: Pagination_types.PaginationItemType.Ellipsis,
}), true), shouldReturnObjInArray(totalPages > 1, {
itemType: Pagination_types.PaginationItemType.PageNumber,
page: totalPages,
isCurrentPage: currentPage === totalPages,
onClick: utils_parseOnClick({
onClick: onClick,
pageNumber: totalPages,
isDisabled: false,
}),
'aria-label': getLabelForPageNumbers(totalPages, currentPage === totalPages, locale),
}), true) : tslib_es6.__spreadArray(tslib_es6.__spreadArray(tslib_es6.__spreadArray([], shouldReturnObjInArray(currentPage !== totalPages || totalPages === 1, {
itemType: Pagination_types.PaginationItemType.PageNumber,
page: currentPage,
onClick: utils_parseOnClick({
onClick: onClick,
pageNumber: currentPage,
isDisabled: false,
}),
'aria-label': getLabelForPageNumbers(currentPage, true, locale),
}), true), shouldReturnObjInArray(currentPage !== totalPages, {
itemType: Pagination_types.PaginationItemType.Slash,
}), true), shouldReturnObjInArray(totalPages > 1, {
itemType: Pagination_types.PaginationItemType.PageNumber,
page: totalPages,
onClick: utils_parseOnClick({
onClick: onClick,
pageNumber: totalPages,
isDisabled: false,
}),
'aria-label': getLabelForPageNumbers(totalPages, currentPage === totalPages, locale),
}), true)), true), [
// Next button
{
itemType: Pagination_types.PaginationItemType.Next,
page: currentPage + 1,
isDisabled: currentPage === totalPages,
onClick: utils_parseOnClick({
onClick: onClick,
pageNumber: currentPage + 1,
isDisabled: currentPage === totalPages,
}),
'aria-label': locale.nextPage,
},
], false);
return { items: items };
};
module.exports = usePagination;