pagination
deploy to danak / build_and_deploy (push) Has been cancelled

This commit is contained in:
hamid zarghami
2026-06-29 09:45:56 +03:30
parent 2a5905b35f
commit 7601368bd3
6 changed files with 87 additions and 23 deletions
+48
View File
@@ -0,0 +1,48 @@
import { useCallback, useMemo } from "react";
import { useSearchParams } from "react-router-dom";
const PAGE_PARAM = "page";
export const useUrlPagination = (defaultPage = 1) => {
const [searchParams, setSearchParams] = useSearchParams();
const currentPage = useMemo(() => {
const page = Number.parseInt(searchParams.get(PAGE_PARAM) ?? "", 10);
return Number.isFinite(page) && page > 0 ? page : defaultPage;
}, [searchParams, defaultPage]);
const handlePageChange = useCallback(
(page: number) => {
setSearchParams(
(prev) => {
const next = new URLSearchParams(prev);
if (page <= defaultPage) {
next.delete(PAGE_PARAM);
} else {
next.set(PAGE_PARAM, page.toString());
}
return next;
},
{ replace: false },
);
},
[setSearchParams, defaultPage],
);
const resetPage = useCallback(() => {
setSearchParams(
(prev) => {
const next = new URLSearchParams(prev);
next.delete(PAGE_PARAM);
return next;
},
{ replace: true },
);
}, [setSearchParams]);
return {
currentPage,
handlePageChange,
resetPage,
};
};