import Button from "./Button"; import tw, { styled } from "twin.macro"; const Btn = styled(Button)(({ active }) => [tw`rounded-none mx-0`, active && tw`bg-accent`]); function CustomBtn({ children, setPage, currentPage, page, ...props }) { return ( setPage(page)} active={page == currentPage} {...props}> {children} ); } export default function Pagination({ currentPage, maxPages, setPage, ...props }) { function RenderButtons() { switch (maxPages) { case 1: return ( 1 ); case 2: return ( <> 1 2 ); case 3: return ( <> 1 2 3 ); case 4: return ( <> 1 2 3 4 ); case 5: return ( <> 1 2 3 4 5 ); default: { let firstItem = Math.min(Math.max(currentPage - 2, 1), maxPages - 4); let secondItem = Math.min(Math.max(currentPage - 1, 2), maxPages - 3); let thirdItem = Math.min(Math.max(currentPage, 3), maxPages - 2); let fourthItem = Math.min(Math.max(currentPage + 1, 4), maxPages - 1); let fifthItem = Math.min(Math.max(currentPage + 2, 5), maxPages); return ( <> {firstItem != 1 ? <>< : firstItem} {secondItem} {thirdItem} {fourthItem} {fifthItem != maxPages ? <>> : fifthItem} ); } } } return (
); }