@appearhere/bloom
Version:
Appear Here's pattern library and styleguide
60 lines (50 loc) • 1.47 kB
JavaScript
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import cx from 'classnames';
import noop from '../../utils/noop';
import Icon from '../Icon/Icon';
import ScreenReadable from '../ScreenReadable/ScreenReadable';
import css from './PaginationLink.css';
export const NextLink = props => (
<PaginationLink {...props}>
<Icon name="arrow" className={css.nextArrow} />
</PaginationLink>
);
export const PreviousLink = props => (
<PaginationLink {...props}>
<Icon name="arrow" className={css.prevArrow} />
</PaginationLink>
);
export class PaginationLink extends Component {
static propTypes = {
page: PropTypes.number.isRequired,
children: PropTypes.node.isRequired,
accessibilityLabel: PropTypes.string,
active: PropTypes.bool,
disabled: PropTypes.bool,
onClick: PropTypes.func,
};
static defaultProps = {
accessibilityLabel: 'go to page',
onClick: noop,
};
handleClick = e => {
const { page, onClick } = this.props;
onClick(e, page);
};
render() {
const { accessibilityLabel, page, active, children, disabled } = this.props;
return (
<a
href={!disabled ? `?page=${page}` : null}
className={cx(css.root, active ? css.active : null, disabled ? css.disabled : null)}
onClick={this.handleClick}
>
{children}
<ScreenReadable>
{accessibilityLabel} {page}
</ScreenReadable>
</a>
);
}
}