UNPKG

violet-paginator

Version:

Display, paginate, sort, filter, and update items from the server. violet-paginator is a complete list management library for react/redux applications.

64 lines (52 loc) 1.5 kB
import { PropTypes, Component } from 'react' import { connect } from 'react-redux' import { bindActionCreators } from 'redux' import composables from '../actions' import { defaultPaginator } from '../reducer' import { preloadedPaginator } from '../lib/stateManagement' export const connector = connect( (state, ownProps) => ({ paginator: preloadedPaginator(state, ownProps.listId, ownProps.preloaded) }), (dispatch, ownProps) => ({ pageActions: bindActionCreators(composables(ownProps), dispatch) }) ) export class PaginationWrapper extends Component { static propTypes = { pageActions: PropTypes.object.isRequired, paginator: PropTypes.object, children: PropTypes.element.isRequired, listId: PropTypes.string.isRequired } static childContextTypes = { listId: PropTypes.string } static defaultProps = { paginator: defaultPaginator } getChildContext() { return { listId: this.props.listId } } componentDidMount() { const { paginator, pageActions } = this.props if (!paginator.get('initialized')) { pageActions.initialize() } this.reloadIfStale(this.props) } componentWillReceiveProps(nextProps) { this.reloadIfStale(nextProps) } reloadIfStale(props) { const { paginator, pageActions } = props if (paginator.get('stale') && !paginator.get('isLoading') && !paginator.get('loadError')) { pageActions.reload() } } render() { return this.props.children } }