benfluleck/HelloBooks

View on GitHub
client/src/app/components/container/common/Pagination.jsx

Summary

Maintainability
A
0 mins
Test Coverage
import React from 'react';
import { PropTypes } from 'prop-types';
import { Pagination, Row } from 'react-materialize';

/**
 *
 *
 * @class PaginationWrapper
 *
 * @extends {React.Component}
 */
class PaginationWrapper extends React.Component {
  /**
  * @param {number} number
  *
  * @memberOf PaginationWrapper
  *
  * @returns {function} Function fetch
  */
  onSelect = (number) => {
    const { numberOfRecords } = this.props;
    this
      .props
      .fetch(this.pageLimit(number, numberOfRecords), numberOfRecords);
  }
  /**
   *
   * @param {number} pagenumber
   *
   * @param {number} numberOfRecords
   *
   * @returns {number} pageOffset * numberOfRecords
   *
   * @memberOf PaginationWrapper
   */
  pageLimit = (pagenumber, numberOfRecords) => {
    let pageOffset;
    pageOffset = (pagenumber === 1) ?
      0 :
      pagenumber - 1;
    return pageOffset * numberOfRecords;
  }
  /**
   * renders Pagination Wrapper displays Pagination
   * for each component that requires it
   *
   * @method render
   *
   * @member Pagination
   *
   * @returns {object} component
   */
  render() {
    return (
      <Row>
        <Pagination
          onSelect={this.onSelect}
          {...this.props.config}
          maxButtons={5}
        />
      </Row>
    );
  }
}

export default PaginationWrapper;

PaginationWrapper.defaultProps = {
  items: 0,
  activePage: 1,
  maxButtons: 5,
};

PaginationWrapper.propTypes = {
  items: PropTypes.number,
  activePage: PropTypes.number,
  maxButtons: PropTypes.number,
  fetch: PropTypes.func.isRequired,
  numberOfRecords: PropTypes.number.isRequired,
  config: PropTypes.object
};