import React from "react"; import { Box, Button, Flex, Select } from "@chakra-ui/react"; import Link from "next/link"; import { useRouter } from "next/router"; function PaginationToolbar({ isLoading, totalCount, numPerPage = 30, ...props }) { const { numTotalPages, currentPageNumber, goToPageNumber, buildPageUrl, } = useRouterPagination(totalCount, numPerPage); const pagesAreLoaded = currentPageNumber != null && numTotalPages != null; const hasPrevPage = pagesAreLoaded && currentPageNumber > 1; const hasNextPage = pagesAreLoaded && currentPageNumber < numTotalPages; const prevPageUrl = hasPrevPage ? buildPageUrl(currentPageNumber - 1) : null; const nextPageUrl = hasNextPage ? buildPageUrl(currentPageNumber + 1) : null; return ( ← Prev {numTotalPages && ( Page of {numTotalPages} )} Next → ); } function useRouterPagination(totalCount, numPerPage) { const { query, push: pushHistory } = useRouter(); const currentOffset = parseInt(query.offset) || 0; const currentPageIndex = Math.floor(currentOffset / numPerPage); const currentPageNumber = currentPageIndex + 1; const numTotalPages = totalCount ? Math.ceil(totalCount / numPerPage) : null; const buildPageUrl = React.useCallback( (newPageNumber) => { const newParams = new URLSearchParams(query); const newPageIndex = newPageNumber - 1; const newOffset = newPageIndex * numPerPage; newParams.set("offset", newOffset); return "?" + newParams.toString(); }, [query, numPerPage] ); const goToPageNumber = React.useCallback( (newPageNumber) => { pushHistory(buildPageUrl(newPageNumber)); }, [buildPageUrl, pushHistory] ); return { numTotalPages, currentPageNumber, goToPageNumber, buildPageUrl, }; } function LinkOrButton({ href, ...props }) { if (href != null) { return (