@appearhere/bloom
Version:
Appear Here's pattern library and styleguide
64 lines (58 loc) • 1.53 kB
JavaScript
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import cx from 'classnames';
import css from './Pagination.css';
import { PreviousLink, NextLink } from './PaginationLink';
export default class Pagination extends Component {
static propTypes = {
currentPage: PropTypes.number.isRequired,
totalPages: PropTypes.number.isRequired,
children: PropTypes.node,
PreviousComponent: PropTypes.func,
NextComponent: PropTypes.func,
className: PropTypes.string,
showPrevNext: PropTypes.bool,
arrowProps: PropTypes.object,
};
static defaultProps = {
NextComponent: NextLink,
PreviousComponent: PreviousLink,
showPrevNext: true,
arrowProps: {},
};
render() {
const {
totalPages,
currentPage,
className,
NextComponent,
PreviousComponent,
showPrevNext,
children,
arrowProps,
} = this.props;
return (
<div className={cx(css.root, className)}>
{showPrevNext && (
<span className={css.page}>
<PreviousComponent
{...arrowProps}
page={currentPage - 1}
disabled={currentPage === 1}
/>
</span>
)}
{children}
{showPrevNext && (
<span className={css.page}>
<NextComponent
{...arrowProps}
page={currentPage + 1}
disabled={currentPage === totalPages}
/>
</span>
)}
</div>
);
}
}