diff --git a/frontend/src/components/paginator.js b/frontend/src/components/paginator.js index a30c60172e..4d74ca651e 100644 --- a/frontend/src/components/paginator.js +++ b/frontend/src/components/paginator.js @@ -1,7 +1,9 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; +import className from 'classnames'; import { navigate } from '@gatsbyjs/reach-router'; import { gettext } from '../utils/constants'; +import { DropdownMenu, Dropdown, DropdownToggle, DropdownItem } from 'reactstrap'; import '../css/pagination.css'; @@ -14,10 +16,18 @@ const propTypes = { curPerPage: PropTypes.number.isRequired }; +const PAGES = [25, 50, 100]; + class Paginator extends Component { - resetPerPage = (e) => { - const perPage = parseInt(e.target.value); + constructor(props) { + super(props); + this.state = { + isMenuShow: false + }; + } + + resetPerPage = (perPage) => { this.updateURL(1, perPage); this.props.resetPerPage(perPage); }; @@ -47,6 +57,24 @@ class Paginator extends Component { return gettext('{number_placeholder} / Page').replace('{number_placeholder}', perPage); }; + toggleOperationMenu = (e) => { + e.stopPropagation(); + this.setState({ isMenuShow: !this.state.isMenuShow }); + }; + + renderDropdownItem = (curPerPage, perPage) => { + return ( + {this.resetPerPage(perPage);}} key={perPage}> + + {curPerPage === perPage && } + + + {this.getPerPageText(perPage)} + + + ); + }; + render() { const { curPerPage, currentPage } = this.props; return ( @@ -67,15 +95,22 @@ class Paginator extends Component { - + + + {this.getPerPageText(curPerPage)} + + + + {PAGES.map(perPage => { + return this.renderDropdownItem(curPerPage, perPage); + })} + + ); } diff --git a/frontend/src/css/pagination.css b/frontend/src/css/pagination.css index c1e4c84aba..b3943b2277 100644 --- a/frontend/src/css/pagination.css +++ b/frontend/src/css/pagination.css @@ -1,3 +1,32 @@ .paginator .btn { min-width: 2.375rem; + font-weight: normal; +} + +.paginator .paginator-dropdown .btn:active, +.paginator .paginator-dropdown .btn:focus { + background-color: #fff; + border-color: #1991eb; + outline: 0; + box-shadow: 0 0 0 2px rgba(70, 127, 207, 0.25); +} + +.paginator-dropdown .dropdown-menu { + min-width: auto; +} + +.paginator-dropdown>.btn .sf3-font { + color: #666; +} + +.paginator-dropdown .dropdown-menu .dropdown-item { + display: flex; + padding-left: 10px; + padding-right: 24px; +} + +.paginator-dropdown .dropdown-menu .dropdown-item .paginator-dropdown-tick { + display: inline-block; + width: 14px; + margin-right: 4px; }