Rev 14164 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect } from "react";
import styled from "styled-components";
import { Pagination } from "react-bootstrap";
const StyledDefaultPagination = styled(Pagination)`
display: flex;
justify-content: center;
align-items: center;
flex-direction: inherit !important;
position: inherit !important;
transform: inherit !important;
`;
const StyledRowPagination = styled(Pagination)`
display: flex;
justify-content: center;
align-items: center;
flex-direction: initial !important;
position: inherit !important;
transform: inherit !important;
`;
const PaginationComponent = (props) => {
const { pages = 1, currentActivePage = 1, onChangePage } = props;
const currentPage = currentActivePage;
const StyledPagination = props.isRow ? StyledRowPagination : StyledDefaultPagination
// const pages = 10;
const nextPages = [];
const previousPages = [];
const maxPages = 5 > pages ? pages : 5;
useEffect(() => { }, [currentPage, pages]);
const generateCurrentPages = () => {
let isPreviousOrNext = false;
let pagesCont = 1;
let nextPage = currentPage + 1;
let previousPage = currentPage - 1;
do {
if (isPreviousOrNext) {
// nextPage
if (nextPage <= pages) {
nextPages.push(nextPage);
nextPage++;
pagesCont++;
}
isPreviousOrNext = !isPreviousOrNext;
} else {
// previousPage
if (previousPage > 0) {
previousPages.unshift(previousPage);
previousPage--;
pagesCont++;
}
isPreviousOrNext = !isPreviousOrNext;
}
} while (pagesCont < maxPages);
};
const previousPageHandler = () => {
onChangePage(currentPage - 1);
};
const nextPageHandler = () => {
onChangePage(currentPage + 1);
};
const onClickHandler = (pageToNavigate) => {
onChangePage(pageToNavigate);
};
generateCurrentPages();
return (
<React.Fragment>
{pages > 1 ? (
<StyledPagination>
<Pagination.Prev
disabled={currentPage - 1 <= 0}
onClick={previousPageHandler}
/>
{previousPages.map((previousPage) => (
<Pagination.Item
key={previousPage}
onClick={() => onClickHandler(previousPage)}
>
{previousPage}
</Pagination.Item>
))}
<Pagination.Item active>{currentPage}</Pagination.Item>
{nextPages.map((nextPage) => (
<Pagination.Item
key={nextPage}
onClick={() => onClickHandler(nextPage)}
>
{nextPage}
</Pagination.Item>
))}
<Pagination.Next
onClick={nextPageHandler}
disabled={currentPage + 1 > pages}
/>
</StyledPagination>
) : (
""
)}
</React.Fragment>
);
};
export default PaginationComponent;