import { Col, Row } from './Grid'; import { GeneratedPropTypes } from '../types'; import { Icon } from './Icon'; import { Text } from '../components/Typography'; import { colors, fonts, typography } from '../theme'; import { ease, generateProps, mq, transitions } from 'styled-gen'; import React from 'react'; import ReactPaginate from 'react-paginate'; import styled, { css } from 'styled-components'; // #region ====== style === const PaginationWrapper = styled.div<{ disabled?: boolean } & GeneratedPropTypes>` align-items: center; display: flex; justify-content: space-between; width: 100%; & .pagesContainerMobile { display: none; } & .pagesContainer { align-items: center; display: flex; justify-content: center; & a { display: block; } & .prevPage, .nextPage { display: none; } & .page, .break { padding: 0 0.125rem; & a { color: ${colors.g500}; cursor: pointer; border-radius: 8px; font-family: ${fonts.families.sans}; font-size: ${typography.text.small[0] / 16}rem; font-weight: ${fonts.weights.medium}; line-height: ${typography.text.small[1] / 16}rem; padding: 0.625rem 1rem; ${transitions(['background-color', 'color'], 250, ease.inOutQuad)}; &:hover, &.pageSelected { background-color: ${colors.p600}; color: ${colors.n01}; } } } } & .navPages { &.disabled { opacity: 0.5; pointer-events: none; } & p, svg { ${transitions('color', 250, ease.inOutQuad)}; } &:hover { & p, svg { color: ${colors.p600}; } } } ${mq.phone( css` & .navPages p, .pagesContainer { display: none; } & .pagesContainerMobile { display: block; } ` )} ${({ disabled }) => disabled && ` & .pagesContainer { opacity: 0.5; pointer-events: none; } `} ${generateProps}; `; // #endregion === style === export type PaginationProps = { currentPage: number; disabled?: boolean; pageCount: number; handlePageClick: any; breakLabel?: string; nextLabel?: string; nextIcon?: string; previousLabel?: string; previousIcon?: string; pageRangeDisplayed?: number; marginPagesDisplayed?: number; mobileText?: any; } & GeneratedPropTypes; export const Pagination: React.FC = props => { const { currentPage, disabled, breakLabel, handlePageClick, marginPagesDisplayed, mobileText, nextLabel, nextIcon, pageCount, pageRangeDisplayed, previousIcon, previousLabel, ...forwardProps } = props; const Pagination = ReactPaginate as any; return ( <> {pageCount > 1 && ( {(previousLabel || previousIcon) && ( !disabled && handlePageClick(e, 1)} > {previousIcon && ( )} {previousLabel && ( {previousLabel} )} )} null} /> {mobileText || `${currentPage + 1} / ${pageCount}`} {(nextLabel || nextIcon) && ( !disabled && handlePageClick(e, 2)} > {nextLabel && ( {nextLabel} )} {nextIcon && ( )} )} )} ); };