import React from "react"; import { Box, Button, Flex, Select } from "@chakra-ui/react"; import { Link, useHistory, useLocation } from "react-router-dom"; const PER_PAGE = 30; function PaginationToolbar({ isLoading, totalCount, ...props }) { const { search } = useLocation(); const history = useHistory(); const currentOffset = parseInt(new URLSearchParams(search).get("offset")) || 0; const currentPageIndex = Math.floor(currentOffset / PER_PAGE); const currentPageNumber = currentPageIndex + 1; const numTotalPages = totalCount ? Math.ceil(totalCount / PER_PAGE) : null; const prevPageSearchParams = new URLSearchParams(search); const prevPageOffset = currentOffset - PER_PAGE; prevPageSearchParams.set("offset", prevPageOffset); const prevPageUrl = "?" + prevPageSearchParams.toString(); const prevPageIsDisabled = isLoading || prevPageOffset < 0; const nextPageSearchParams = new URLSearchParams(search); const nextPageOffset = currentOffset + PER_PAGE; nextPageSearchParams.set("offset", nextPageOffset); const nextPageUrl = "?" + nextPageSearchParams.toString(); const nextPageIsDisabled = isLoading || nextPageOffset >= totalCount; const goToPageNumber = React.useCallback( (newPageNumber) => { const newPageIndex = newPageNumber - 1; const newPageOffset = newPageIndex * PER_PAGE; const newPageSearchParams = new URLSearchParams(search); newPageSearchParams.set("offset", newPageOffset); history.push({ search: newPageSearchParams.toString() }); }, [search, history] ); return ( {numTotalPages && ( Page of {numTotalPages} )} ); } function PageNumberSelect({ currentPageNumber, numTotalPages, onChange, ...props }) { const allPageNumbers = Array.from({ length: numTotalPages }, (_, i) => i + 1); const handleChange = React.useCallback( (e) => onChange(Number(e.target.value)), [onChange] ); return ( ); } export default PaginationToolbar;