@kadoui/react
Version:
Kadoui primitive components for React
43 lines (42 loc) • 1.48 kB
JavaScript
"use client";
import { jsx as _jsx } from "react/jsx-runtime";
import { useRouter, useSearchParams } from "next/navigation";
import { useEffect, useState } from "react";
import { PaginationContext } from "./PaginationContext";
export function PaginationSearchParamsRoot({ pages, pagesLength, pageKey, ...p }) {
const router = useRouter();
const searchParams = useSearchParams();
const [currentPage, setCurrentPage] = useState(1);
const correctPagesLength = (pages?.length || pagesLength);
useEffect(() => {
setCurrentPage(+(searchParams.get(pageKey || "page") || "1"));
}, [pageKey, searchParams]);
const pushRouter = (page) => {
const params = new URLSearchParams(searchParams.toString());
params.set(pageKey || "page", page.toString());
router.push("?" + params.toString());
};
const setPage = (page) => {
if (page !== currentPage) {
pushRouter(page);
}
};
const nextPage = () => {
if (currentPage < correctPagesLength) {
pushRouter(currentPage + 1);
}
};
const prevPage = () => {
if (currentPage > 1) {
pushRouter(currentPage - 1);
}
};
return (_jsx(PaginationContext.Provider, { value: {
pages,
page: currentPage,
setPage,
pagesLength: correctPagesLength,
nextPage,
prevPage,
}, children: _jsx("div", { ...p }) }));
}