import { FC, useCallback, useMemo, useState } from "react"; import { GoChevronLeft, GoChevronRight } from "react-icons/go"; import Select from "react-select"; import Button from "@/components/generics/button/Button"; import { PaginationType } from "@/api/documents/types"; import "./Pagination.scss"; import Input from "@/components/generics/input/Input"; interface PageSizeOption { value: number; label: string; } export type PaginationProps = PaginationType & { setPage: React.Dispatch>; setPageSize: React.Dispatch>; }; const pageSizeOptions: PageSizeOption[] = [ { value: 10, label: "10 / стр." }, { value: 20, label: "20 / стр." }, { value: 50, label: "50 / стр." }, { value: 100, label: "100 / стр." }, ]; export const Pagination: FC = ({ total, pageNumber, pageSize, setPage, setPageSize }) => { const [searchPage, setSearchPage] = useState(null); const totalPages = Math.ceil(total / pageSize); const handleChange = useCallback( (page: number) => { setPage(page); }, [setPage] ); const handlePageSizeChange = (selectedOption: PageSizeOption | null) => { if (selectedOption) { setPageSize(selectedOption.value); setPage(0); } }; const pages = useMemo(() => { let startPage = 1; let endPage = totalPages; if (totalPages > 5) { if (pageNumber + 1 <= 3) { endPage = 5; } else if (pageNumber + 3 >= totalPages) { startPage = totalPages - 4; } else { startPage = pageNumber - 1; endPage = pageNumber + 3; } } const pageNumbers = []; if (startPage > 1) { pageNumbers.push(