Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

Paging.js 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import React from "react";
  2. import PropTypes from "prop-types";
  3. import {
  4. Arrow,
  5. ArrowIcon,
  6. PageNumber,
  7. PagingContainer,
  8. ThreeDots,
  9. } from "./Paging.styled";
  10. const Paging = (props) => {
  11. const pages = props.pages
  12. ? props.pages
  13. : props.totalElements
  14. ? Math.ceil(props.totalElements / props.elementsPerPage)
  15. : 1;
  16. let moving = 0;
  17. const pagesAsArray = Array.apply(null, Array(5)).map(() => {});
  18. const threeDotsBefore = props.current - 2 > 1;
  19. const threeDotsAfter = props.current + 2 < pages;
  20. return (
  21. <PagingContainer>
  22. <Arrow
  23. onClick={() => props.changePage(props.current - 1)}
  24. disabled={props.current - 1 < 1}
  25. >
  26. <ArrowIcon side="left" />
  27. </Arrow>
  28. {threeDotsBefore && (
  29. <React.Fragment>
  30. <PageNumber onClick={() => props.changePage(1)}>1</PageNumber>
  31. {props.current - 3 !== 1 && <ThreeDots>...</ThreeDots>}
  32. </React.Fragment>
  33. )}
  34. {pagesAsArray.map((item, index) => {
  35. const pageNum = props.current - 2 + moving++;
  36. if (pageNum > pages ) return;
  37. if (pageNum < 1) return;
  38. return (
  39. <PageNumber
  40. current={pageNum === props.current}
  41. key={index}
  42. onClick={() => props.changePage(pageNum)}
  43. >
  44. {pageNum}
  45. </PageNumber>
  46. );
  47. })}
  48. {threeDotsAfter && (
  49. <React.Fragment>
  50. {props.current + 3 !== pages && <ThreeDots>...</ThreeDots>}
  51. <PageNumber onClick={() => props.changePage(pages)}>
  52. {pages}
  53. </PageNumber>
  54. </React.Fragment>
  55. )}
  56. <Arrow
  57. onClick={() => props.changePage(props.current + 1)}
  58. disabled={props.current + 1 > pages}
  59. >
  60. <ArrowIcon side="right" />
  61. </Arrow>
  62. </PagingContainer>
  63. );
  64. };
  65. Paging.propTypes = {
  66. children: PropTypes.any,
  67. totalElements: PropTypes.number,
  68. elementsPerPage: PropTypes.number,
  69. pages: PropTypes.number,
  70. current: PropTypes.number,
  71. changePage: PropTypes.func,
  72. };
  73. export default Paging;