@kiwicom/orbit-components
Version:
Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.
91 lines (88 loc) • 3.2 kB
JavaScript
import * as React from "react";
import ButtonLink from "../ButtonLink";
import Stack from "../Stack";
import Hide from "../Hide";
import ChevronLeft from "../icons/ChevronLeft";
import ChevronRight from "../icons/ChevronRight";
import { MAXIMUM_PAGES, SIZES } from "./consts";
import Pages from "./components/Pages";
import CompactPages from "./components/CompactPages";
import ActiveButton from "./components/ActiveButton";
import Translate from "../Translate";
const handlePageChange = (onPageChange, pageCount) => nextPageIndex => {
if (onPageChange && nextPageIndex <= pageCount && nextPageIndex >= 0) {
onPageChange(nextPageIndex);
}
};
const Pagination = ({
pageCount,
selectedPage = 1,
onPageChange,
dataTest,
hideLabels = true,
size = SIZES.NORMAL
}) => {
const pageChanged = handlePageChange(onPageChange, pageCount);
return React.createElement(Stack, {
direction: "row",
spacing: "tight",
align: "center",
dataTest: dataTest,
element: "nav"
}, selectedPage !== 1 && React.createElement(React.Fragment, null, React.createElement(Hide, {
on: ["smallMobile", "mediumMobile", "largeMobile"]
}, React.createElement(ButtonLink, {
onClick: () => pageChanged(selectedPage - 1),
iconLeft: React.createElement(ChevronLeft, null),
type: "secondary",
size: size
}, !hideLabels && React.createElement(Translate, {
tKey: "pagination_label_prev"
}))), React.createElement(Hide, {
on: ["tablet", "desktop", "largeDesktop"]
}, React.createElement(ButtonLink, {
onClick: () => pageChanged(selectedPage - 1),
iconLeft: React.createElement(ChevronLeft, null),
type: "secondary",
size: size
}))), React.createElement(Hide, {
on: ["smallMobile", "mediumMobile", "largeMobile"]
}, React.createElement(Stack, {
direction: "row",
spacing: "tight",
align: "center"
}, pageCount <= MAXIMUM_PAGES ? React.createElement(Pages, {
pageCount: pageCount,
selectedPage: selectedPage,
onPageChange: onPageChange,
size: size
}) : React.createElement(CompactPages, {
pageCount: pageCount,
selectedPage: selectedPage,
onPageChange: onPageChange,
size: size
}))), React.createElement(Hide, {
on: ["tablet", "desktop", "largeDesktop"]
}, React.createElement(ActiveButton, {
transparent: true,
size: size
}, selectedPage, " of ", pageCount)), pageCount !== selectedPage && React.createElement(React.Fragment, null, React.createElement(Hide, {
on: ["smallMobile", "mediumMobile", "largeMobile"]
}, React.createElement(ButtonLink, {
onClick: () => pageChanged(selectedPage + 1),
iconRight: !hideLabels && React.createElement(ChevronRight, null),
iconLeft: hideLabels && React.createElement(ChevronRight, null),
type: "secondary",
size: size
}, !hideLabels && React.createElement(Translate, {
tKey: "pagination_label_next"
}))), React.createElement(Hide, {
on: ["tablet", "desktop", "largeDesktop"]
}, React.createElement(ButtonLink, {
onClick: () => pageChanged(selectedPage + 1),
iconLeft: React.createElement(ChevronRight, null),
type: "secondary",
size: size
}))));
};
export default Pagination;