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);