import React, { useCallback } from "react"; import { faAngleDoubleLeft, faAngleLeft, faAngleRight, faAngleDoubleRight, } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Paginated } from "../../services/Paginated"; import Button, { ButtonType } from "./Button"; import { InputType } from "./Input"; interface PaginationProps { data: Paginated | null; onChangePage: (page: number, pageSize: number) => void; onUnselect?: () => void; } function Pagination({ data, onChangePage, onUnselect, }: PaginationProps): JSX.Element { const changePage = useCallback( (page: number, pageSize: number) => { onChangePage(page, pageSize); if (onUnselect) onUnselect(); }, [onChangePage, onUnselect], ); if (data === null) return <>; const { page, pageSize, totalPages, count } = data; const clickFirst = () => changePage(1, pageSize); const clickPrevious = () => changePage(page - 1, pageSize); const clickNext = () => changePage(page + 1, pageSize); const clickLast = () => changePage(totalPages, pageSize); const PageSizeChange = (e: React.ChangeEvent) => { const newPageSize = Number(e.currentTarget.value); changePage(page, newPageSize); }; const handlePageSelect = (e: React.ChangeEvent) => { const newPage = Number(e.currentTarget.value); if (1 <= newPage && newPage <= totalPages) { changePage(newPage, pageSize); } }; const pageSizeOptions = [10, 25, 50, 100]; return (
{" "} of {totalPages} {count} Items
); } export default Pagination;