/** * @flow * @file Pagination component * @author Box */ import React from 'react'; import { FormattedMessage } from 'react-intl'; import noop from 'lodash/noop'; import Button from '../../../components/button'; import ButtonGroup from '../../../components/button-group'; import IconPageBack from '../../../icons/general/IconPageBack'; import IconPageForward from '../../../icons/general/IconPageForward'; import PaginationMenu from './PaginationMenu'; import Tooltip from '../Tooltip'; import messages from '../messages'; import { DEFAULT_PAGE_SIZE } from '../../../constants'; import './Pagination.scss'; type Props = { offset?: number, onChange?: Function, pageSize?: number, totalCount?: number, }; const PAGE_ICON_STYLE = { height: 9, width: 6, }; const Pagination = ({ offset = 0, onChange = noop, pageSize = DEFAULT_PAGE_SIZE, totalCount = 0 }: Props) => { const pageCount = Math.ceil(totalCount / pageSize); if (pageCount <= 1) return null; const pageByOffset = Math.floor(offset / pageSize) + 1; const pageNumber = pageByOffset > 0 ? Math.min(pageCount, pageByOffset) : 1; const hasNextPage = pageNumber < pageCount; const hasPreviousPage = pageNumber > 1; const updateOffset = (newPageNumber: number) => { let newOffset = (newPageNumber - 1) * pageSize; if (newOffset <= 0) { newOffset = 0; } if (newOffset >= totalCount) { newOffset = totalCount - pageSize; } onChange(newOffset); }; const handleNextClick = () => { updateOffset(pageNumber + 1); }; const handlePreviousClick = () => { updateOffset(pageNumber - 1); }; return (