/** * Component for displaying pagination rows for tables * * @author: Denis Makarov * @date: 2019-05-08 */ import * as React from 'react'; import * as styles from './pagination.m.scss'; import {Button} from '../../../index'; export interface IPaginationProps { page: number; pages: number; onPageChange: (page: number) => void; showPageJump: boolean; showFirstLastButtons: boolean; canPrevious: boolean; canNext: boolean; hidePages?: boolean; isDisabled?: boolean; ofText?: string; } export class Pagination extends React.Component { static defaultProps = { showPageJump: true, canPrevious: true, canNext: true, showFirstLastButtons: true }; inputEl = React.createRef(); override componentDidMount (): void { if (this.inputEl.current) { this.inputEl.current.value = this.props.page.toString(); } } override componentDidUpdate () { if (this.inputEl.current) { this.inputEl.current.value = this.props.page.toString(); } } getSafePage = (page?: number) => { if (!page || Number.isNaN(page)) { page = this.props.page; } return Math.min(Math.max(page, 1), this.props.pages); }; setPage = (page: number) => { page = this.getSafePage(page); if (this.props.page !== page) { this.props.onPageChange(page); } else { this.forceUpdate(); } }; changePage = (page: number) => { return (e: React.SyntheticEvent) => { e.stopPropagation(); this.setPage(page); }; }; onBlur = () => { if (this.inputEl.current) { this.setPage(Number(this.inputEl.current.value)); } }; onKeyPress = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { this.onBlur(); } }; override render () { const { pages, page, showPageJump, canPrevious, canNext, isDisabled, ofText } = this.props; return (
{this.props.showFirstLastButtons && (
); } }