From f99e0aba70efad0deb907d8e27f09fc9f527c8a4 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Fri, 17 Feb 2023 17:07:50 +0700 Subject: Refactor --- .../components/elements/Pagination/Pagination.js | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/core/components/elements/Pagination/Pagination.js (limited to 'src/core/components/elements/Pagination') diff --git a/src/core/components/elements/Pagination/Pagination.js b/src/core/components/elements/Pagination/Pagination.js new file mode 100644 index 00000000..485295fe --- /dev/null +++ b/src/core/components/elements/Pagination/Pagination.js @@ -0,0 +1,64 @@ +import Link from "../Link/Link" + +const Pagination = ({ pageCount, currentPage, url, className }) => { + let firstPage = false + let lastPage = false + let dotsPrevPage = false + let dotsNextPage = false + let urlParameterPrefix = url.includes('?') ? '&' : '?' + + return pageCount > 1 && ( +
+ { Array.from(Array(pageCount)).map((v, i) => { + let page = i + 1 + let rangePrevPage = currentPage - 2 + let rangeNextPage = currentPage + 2 + let PageComponent = {page} + let DotsComponent =
...
+ + if (pageCount == 7) { + return PageComponent + } + + if (currentPage == 1) rangeNextPage += 3 + if (currentPage == 2) rangeNextPage += 2 + if (currentPage == 3) rangeNextPage += 1 + if (currentPage == 4) rangePrevPage -= 1 + if (currentPage == pageCount) rangePrevPage -= 3 + if (currentPage == pageCount - 1) rangePrevPage -= 2 + if (currentPage == pageCount - 2) rangePrevPage -= 1 + if (currentPage == pageCount - 3) rangeNextPage += 1 + + if (page > rangePrevPage && page < rangeNextPage) { + return PageComponent + } + + if (page == 1 && rangePrevPage >= 1 && !firstPage) { + firstPage = true + return PageComponent + } + + if (page == pageCount && rangeNextPage <= pageCount && !lastPage) { + lastPage = true + return PageComponent + } + + if (page > currentPage && (pageCount - currentPage) > 1 && !dotsNextPage) { + dotsNextPage = true + return DotsComponent + } + + if (page < currentPage && (currentPage - 1) > 1 && !dotsPrevPage) { + dotsPrevPage = true + return DotsComponent + } + }) } +
+ ) +} + +Pagination.defaultProps = { + className: '' +} + +export default Pagination \ No newline at end of file -- cgit v1.2.3 From f66b12fd1d0b83af0d7230d7b1565fbe00afbe3c Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Wed, 22 Feb 2023 11:03:34 +0700 Subject: prettier --- .../components/elements/Pagination/Pagination.js | 102 ++++++++++++--------- 1 file changed, 59 insertions(+), 43 deletions(-) (limited to 'src/core/components/elements/Pagination') diff --git a/src/core/components/elements/Pagination/Pagination.js b/src/core/components/elements/Pagination/Pagination.js index 485295fe..c009171f 100644 --- a/src/core/components/elements/Pagination/Pagination.js +++ b/src/core/components/elements/Pagination/Pagination.js @@ -1,4 +1,4 @@ -import Link from "../Link/Link" +import Link from '../Link/Link' const Pagination = ({ pageCount, currentPage, url, className }) => { let firstPage = false @@ -6,54 +6,70 @@ const Pagination = ({ pageCount, currentPage, url, className }) => { let dotsPrevPage = false let dotsNextPage = false let urlParameterPrefix = url.includes('?') ? '&' : '?' - - return pageCount > 1 && ( -
- { Array.from(Array(pageCount)).map((v, i) => { - let page = i + 1 - let rangePrevPage = currentPage - 2 - let rangeNextPage = currentPage + 2 - let PageComponent = {page} - let DotsComponent =
...
- if (pageCount == 7) { - return PageComponent - } + return ( + pageCount > 1 && ( +
+ {Array.from(Array(pageCount)).map((v, i) => { + let page = i + 1 + let rangePrevPage = currentPage - 2 + let rangeNextPage = currentPage + 2 + let PageComponent = ( + + {page} + + ) + let DotsComponent = ( +
+ ... +
+ ) - if (currentPage == 1) rangeNextPage += 3 - if (currentPage == 2) rangeNextPage += 2 - if (currentPage == 3) rangeNextPage += 1 - if (currentPage == 4) rangePrevPage -= 1 - if (currentPage == pageCount) rangePrevPage -= 3 - if (currentPage == pageCount - 1) rangePrevPage -= 2 - if (currentPage == pageCount - 2) rangePrevPage -= 1 - if (currentPage == pageCount - 3) rangeNextPage += 1 + if (pageCount == 7) { + return PageComponent + } - if (page > rangePrevPage && page < rangeNextPage) { - return PageComponent - } + if (currentPage == 1) rangeNextPage += 3 + if (currentPage == 2) rangeNextPage += 2 + if (currentPage == 3) rangeNextPage += 1 + if (currentPage == 4) rangePrevPage -= 1 + if (currentPage == pageCount) rangePrevPage -= 3 + if (currentPage == pageCount - 1) rangePrevPage -= 2 + if (currentPage == pageCount - 2) rangePrevPage -= 1 + if (currentPage == pageCount - 3) rangeNextPage += 1 - if (page == 1 && rangePrevPage >= 1 && !firstPage) { - firstPage = true - return PageComponent - } + if (page > rangePrevPage && page < rangeNextPage) { + return PageComponent + } - if (page == pageCount && rangeNextPage <= pageCount && !lastPage) { - lastPage = true - return PageComponent - } + if (page == 1 && rangePrevPage >= 1 && !firstPage) { + firstPage = true + return PageComponent + } - if (page > currentPage && (pageCount - currentPage) > 1 && !dotsNextPage) { - dotsNextPage = true - return DotsComponent - } + if (page == pageCount && rangeNextPage <= pageCount && !lastPage) { + lastPage = true + return PageComponent + } - if (page < currentPage && (currentPage - 1) > 1 && !dotsPrevPage) { - dotsPrevPage = true - return DotsComponent - } - }) } -
+ if (page > currentPage && pageCount - currentPage > 1 && !dotsNextPage) { + dotsNextPage = true + return DotsComponent + } + + if (page < currentPage && currentPage - 1 > 1 && !dotsPrevPage) { + dotsPrevPage = true + return DotsComponent + } + })} +
+ ) ) } @@ -61,4 +77,4 @@ Pagination.defaultProps = { className: '' } -export default Pagination \ No newline at end of file +export default Pagination -- cgit v1.2.3 From ac3fdf7be9982e65d8f83a20bc487f8dd62e3bfc Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Wed, 22 Feb 2023 23:36:47 +0700 Subject: fix --- src/core/components/elements/Pagination/Pagination.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/core/components/elements/Pagination') diff --git a/src/core/components/elements/Pagination/Pagination.js b/src/core/components/elements/Pagination/Pagination.js index c009171f..18964fc4 100644 --- a/src/core/components/elements/Pagination/Pagination.js +++ b/src/core/components/elements/Pagination/Pagination.js @@ -26,7 +26,10 @@ const Pagination = ({ pageCount, currentPage, url, className }) => { ) let DotsComponent = ( -
+
...
) -- cgit v1.2.3