UNPKG

@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
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;