diff --git a/src/client/components/layout/Table/index.scss b/src/client/components/layout/Table/index.scss index 31aeda0e9d..adf298fae8 100644 --- a/src/client/components/layout/Table/index.scss +++ b/src/client/components/layout/Table/index.scss @@ -2,6 +2,7 @@ table { width: 100%; + margin-bottom: base(.75); th { @extend %uppercase-label; diff --git a/src/client/components/modules/Pagination/NextArrow/index.js b/src/client/components/modules/Pagination/NextArrow/index.js deleted file mode 100644 index d1cdb7a207..0000000000 --- a/src/client/components/modules/Pagination/NextArrow/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import Arrow from '../../../graphics/Arrow'; - -import './index.scss'; - -const NextArrow = () => ; - -export default NextArrow; diff --git a/src/client/components/modules/Pagination/Page/index.scss b/src/client/components/modules/Pagination/Page/index.scss deleted file mode 100644 index b022313066..0000000000 --- a/src/client/components/modules/Pagination/Page/index.scss +++ /dev/null @@ -1,5 +0,0 @@ -.paginator__page { - &--is-current { - background: red; - } -} diff --git a/src/client/components/modules/Pagination/PrevArrow/index.js b/src/client/components/modules/Pagination/PrevArrow/index.js deleted file mode 100644 index 8762908cd8..0000000000 --- a/src/client/components/modules/Pagination/PrevArrow/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import Arrow from '../../../graphics/Arrow'; - -import './index.scss'; - -const PrevArrow = () => ; - -export default PrevArrow; diff --git a/src/client/components/modules/Pagination/index.scss b/src/client/components/modules/Pagination/index.scss deleted file mode 100644 index a8ecb183b9..0000000000 --- a/src/client/components/modules/Pagination/index.scss +++ /dev/null @@ -1,20 +0,0 @@ -@import '../../../scss/styles.scss'; - -.pagination { - margin-top: base(.5); - display: flex; - align-items: flex-end; - - .pagination-node.prev { - .icon { - transform: scaleX(-1); - } - } - - .ellipsis { - line-height: 1; - padding: base(.25); - padding-bottom: 0; - margin-right: base(.45); - } -} diff --git a/src/client/components/modules/Pagination/Ellipsis/index.js b/src/client/components/modules/Paginator/Ellipsis/index.js similarity index 51% rename from src/client/components/modules/Pagination/Ellipsis/index.js rename to src/client/components/modules/Paginator/Ellipsis/index.js index 0f3b7e5adb..b5a6fac356 100644 --- a/src/client/components/modules/Pagination/Ellipsis/index.js +++ b/src/client/components/modules/Paginator/Ellipsis/index.js @@ -2,6 +2,6 @@ import React from 'react'; import './index.scss'; -const Ellipsis = () => ...; +const Ellipsis = () => ...; export default Ellipsis; diff --git a/src/client/components/modules/Pagination/Ellipsis/index.scss b/src/client/components/modules/Paginator/Ellipsis/index.scss similarity index 100% rename from src/client/components/modules/Pagination/Ellipsis/index.scss rename to src/client/components/modules/Paginator/Ellipsis/index.scss diff --git a/src/client/components/modules/Paginator/NextArrow/index.js b/src/client/components/modules/Paginator/NextArrow/index.js new file mode 100644 index 0000000000..905d9dcda8 --- /dev/null +++ b/src/client/components/modules/Paginator/NextArrow/index.js @@ -0,0 +1,26 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import Arrow from '../../../graphics/Arrow'; + +import './index.scss'; + +const NextArrow = ({ updatePage }) => ( + +); + +NextArrow.defaultProps = { + updatePage: null, +}; + +NextArrow.propTypes = { + updatePage: PropTypes.func, +}; + +export default NextArrow; diff --git a/src/client/components/modules/Pagination/NextArrow/index.scss b/src/client/components/modules/Paginator/NextArrow/index.scss similarity index 100% rename from src/client/components/modules/Pagination/NextArrow/index.scss rename to src/client/components/modules/Paginator/NextArrow/index.scss diff --git a/src/client/components/modules/Pagination/Page/index.js b/src/client/components/modules/Paginator/Page/index.js similarity index 65% rename from src/client/components/modules/Pagination/Page/index.js rename to src/client/components/modules/Paginator/Page/index.js index c647bd0918..1a47f4b0b9 100644 --- a/src/client/components/modules/Pagination/Page/index.js +++ b/src/client/components/modules/Paginator/Page/index.js @@ -1,4 +1,5 @@ import React from 'react'; +import PropTypes from 'prop-types'; import './index.scss'; @@ -21,4 +22,16 @@ const Page = ({ page, isCurrent, updatePage }) => { ); }; +Page.defaultProps = { + page: 1, + isCurrent: false, + updatePage: null, +}; + +Page.propTypes = { + page: PropTypes.number, + isCurrent: PropTypes.bool, + updatePage: PropTypes.func, +}; + export default Page; diff --git a/src/client/components/modules/Pagination/PrevArrow/index.scss b/src/client/components/modules/Paginator/Page/index.scss similarity index 100% rename from src/client/components/modules/Pagination/PrevArrow/index.scss rename to src/client/components/modules/Paginator/Page/index.scss diff --git a/src/client/components/modules/Paginator/PrevArrow/index.js b/src/client/components/modules/Paginator/PrevArrow/index.js new file mode 100644 index 0000000000..cf855ec33f --- /dev/null +++ b/src/client/components/modules/Paginator/PrevArrow/index.js @@ -0,0 +1,26 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import Arrow from '../../../graphics/Arrow'; + +import './index.scss'; + +const PrevArrow = ({ updatePage }) => ( + +); + +PrevArrow.defaultProps = { + updatePage: null, +}; + +PrevArrow.propTypes = { + updatePage: PropTypes.func, +}; + +export default PrevArrow; diff --git a/src/client/components/modules/Paginator/PrevArrow/index.scss b/src/client/components/modules/Paginator/PrevArrow/index.scss new file mode 100644 index 0000000000..3749fcc9c1 --- /dev/null +++ b/src/client/components/modules/Paginator/PrevArrow/index.scss @@ -0,0 +1,3 @@ +.prev-arrow { + transform: rotate(180deg); +} diff --git a/src/client/components/modules/Pagination/index.js b/src/client/components/modules/Paginator/index.js similarity index 89% rename from src/client/components/modules/Pagination/index.js rename to src/client/components/modules/Paginator/index.js index 7dc082aba3..85dc3eb9c5 100644 --- a/src/client/components/modules/Pagination/index.js +++ b/src/client/components/modules/Paginator/index.js @@ -17,7 +17,7 @@ const nodeTypes = { PrevArrow, }; -const baseClass = 'pagination'; +const baseClass = 'paginator'; const Pagination = (props) => { const history = useHistory(); @@ -33,6 +33,7 @@ const Pagination = (props) => { numberOfNeighbors, } = props; + // uses react router to set the current page const updatePage = (page) => { const params = queryString.parse(location.search, { ignoreQueryPrefix: true }); params.page = page; @@ -56,8 +57,9 @@ const Pagination = (props) => { const nodes = pages.slice(rangeStartIndex, rangeEndIndex); // Add prev ellipsis and first page if necessary + if (currentPage - numberOfNeighbors - 1 >= 2) nodes.unshift({ type: 'Ellipsis' }); + // Add first page if necessary if (currentPage > numberOfNeighbors + 1) { - nodes.unshift({ type: 'Ellipsis' }); nodes.unshift({ type: 'Page', props: { @@ -68,8 +70,9 @@ const Pagination = (props) => { } // Add next ellipsis and total page if necessary + if (currentPage + numberOfNeighbors + 1 < totalPages) nodes.push({ type: 'Ellipsis' }); + // Add last page if necessary if (rangeEndIndex < totalPages) { - nodes.push({ type: 'Ellipsis' }); nodes.push({ type: 'Page', props: { @@ -79,7 +82,7 @@ const Pagination = (props) => { }); } - // Add prev and next arrows based on need + // Add prev and next arrows based on necessity if (hasPrevPage) { nodes.unshift({ type: 'PrevArrow', diff --git a/src/client/components/modules/Paginator/index.scss b/src/client/components/modules/Paginator/index.scss new file mode 100644 index 0000000000..38aaa814cb --- /dev/null +++ b/src/client/components/modules/Paginator/index.scss @@ -0,0 +1,38 @@ +@import '../../../scss/styles.scss'; + +.paginator { + display: flex; + align-items: flex-end; + + &__prev-arrow, + &__next-arrow, + &__page { + @extend %btn-reset; + line-height: 1; + outline: 0; + box-shadow: $shadow-sm; + padding: base(.5) base(.65); + margin-right: base(.45); + cursor: pointer; + font-size: base(.4); + color: $black; + + &--is-current { + color: $gray; + cursor: default; + } + } + + &__prev-arrow { + .icon { + transform: rotate(180deg); + } + } + + &__ellipsis { + line-height: 1; + padding: base(.25); + padding-bottom: 0; + margin-right: base(.45); + } +} diff --git a/src/client/components/views/collections/List/index.js b/src/client/components/views/collections/List/index.js index 4fe7def690..075fa96616 100644 --- a/src/client/components/views/collections/List/index.js +++ b/src/client/components/views/collections/List/index.js @@ -7,7 +7,7 @@ import getSanitizedConfig from '../../../../config/getSanitizedConfig'; import DefaultTemplate from '../../../layout/DefaultTemplate'; import HeadingButton from '../../../modules/HeadingButton'; import SearchableTable from '../../../modules/SearchableTable'; -import Pagination from '../../../modules/Pagination'; +import Pagination from '../../../modules/Paginator'; import './index.scss'; @@ -27,7 +27,7 @@ const ListView = (props) => { `${serverURL}/${collection.slug}?`, page && `page=${page}&`, 'page=4&', - 'limit=4', + 'limit=1', ].filter(Boolean).join(''); const [{ data }] = usePayloadAPI(apiURL);