import React, { Component } from 'react'; import { I18n } from '@lingui/react'; import { Trans, t } from '@lingui/macro'; import { Button, Dropdown, DropdownDirection, DropdownItem, DropdownToggle, Form, FormGroup, Level, LevelItem, TextInput, Toolbar, ToolbarGroup, ToolbarItem, Split, SplitItem, } from '@patternfly/react-core'; class Pagination extends Component { constructor (props) { super(props); const { page } = this.props; this.state = { value: page, isOpen: false }; } componentDidUpdate (prevProps) { const { page } = this.props; if (prevProps.page !== page) { this.setState({ value: page }); } } onPageChange = value => { this.setState({ value }); }; onSubmit = event => { const { onSetPage, page, pageCount, page_size } = this.props; const { value } = this.state; event.preventDefault(); const isPositiveInteger = value >>> 0 === parseFloat(value) && parseInt(value, 10) > 0; const isValid = isPositiveInteger && parseInt(value, 10) <= pageCount; if (isValid) { onSetPage(value, page_size); } else{ this.setState({ value: page }); } }; onFirst = () => { const { onSetPage, page_size} = this.props; onSetPage(1, page_size); }; onPrevious = () => { const { onSetPage, page, page_size } = this.props; const previousPage = page - 1; if (previousPage >= 1) { onSetPage(previousPage, page_size) } }; onNext = () => { const { onSetPage, page, pageCount, page_size } = this.props; const nextPage = page + 1; if (nextPage <= pageCount) { onSetPage(nextPage, page_size) } }; onLast = () => { const { onSetPage, pageCount, page_size } = this.props; onSetPage(pageCount, page_size) }; onTogglePageSize = isOpen => { this.setState({ isOpen }); }; onSelectPageSize = ({ target }) => { const { onSetPage } = this.props; const page = 1; const page_size = parseInt(target.innerText, 10); this.setState({ isOpen: false }); onSetPage(page, page_size); }; render () { const { up } = DropdownDirection; const { count, page, pageCount, page_size, pageSizeOptions, } = this.props; const { value, isOpen } = this.state; const opts = pageSizeOptions.slice().reverse().filter(o => o !== page_size); const isOnFirst = page === 1; const isOnLast = page === pageCount; const itemCount = isOnLast ? count % page_size : page_size; const itemMin = ((page - 1) * page_size) + 1; const itemMax = itemMin + itemCount - 1; const disabledStyle = { backgroundColor: '#EDEDED', border: '1px solid #C2C2CA', borderRadius: '0px', color: '#C2C2CA', }; return ( {({ i18n }) => (
{ page_size } )}> {opts.map(option => ( { option } ))} Per Page { itemMin } - { itemMax } of { count }
Page of { pageCount }
)}
); } } export default Pagination;