@swrve/core
Version:
Core set of Swrve UI Components
79 lines (69 loc) • 2.04 kB
JSX
import React from 'react'
import classnames from 'classnames'
import { number, func, oneOfType, string, object, array } from 'prop-types'
import { Icon } from '@swrve/icons'
import PaginationItem from './PaginationItem'
import PaginationNumbers from './PaginationNumbers'
const Pagination = ({
activePage,
className,
numberOfPages,
onPageChange,
maxVisibleButtons,
...props
}) => {
const paginationStyles = classnames('sw-pagination', className)
if (!numberOfPages) return null
return (
<nav className={paginationStyles} aria-label="Pagination" {...props}>
<ul className="flex justify-center">
<li>
<PaginationItem
aria-label="Previous Page"
className="prev"
disabled={activePage === 1}
page={activePage - 1}
onPageChange={onPageChange}
>
<Icon name="arrow" size="small" />
</PaginationItem>
</li>
<PaginationNumbers
activePage={activePage}
maxVisibleButtons={maxVisibleButtons}
numberOfPages={numberOfPages}
onPageChange={onPageChange}
/>
<li>
<PaginationItem
aria-label="Next Page"
disabled={activePage === numberOfPages}
className="next"
page={activePage + 1}
onPageChange={onPageChange}
>
<Icon name="arrow" size="small" />
</PaginationItem>
</li>
</ul>
</nav>
)
}
Pagination.propTypes = {
/** Pagination Item Content */
activePage: number,
/** Additional externs classnames */
className: oneOfType([string, object, array]),
/** Pagination max number of page buttons visible */
maxVisibleButtons: number,
/** Total number of pages in data */
numberOfPages: number.isRequired,
/** Callback when pagination button is click */
onPageChange: func
}
Pagination.defaultProps = {
activePage: 1,
maxVisibleButtons: 10
}
Pagination.displayName = 'Pagination'
export default Pagination