import { useNavigate, type LinkProps } from "@tanstack/react-router"; import type { FC } from "react"; interface PaginationControlsProps { urlName: LinkProps["to"]; hasNextPage: boolean; hasPrevPage: boolean; page: number; perPage: number; total: number; keyword?: string; } type NavigationOptions = { to: string; search?: Record; params?: Record; reloadDocument?: boolean; }; export function getPaginationNavigation( urlName: string, keyword: string | undefined, page: number, perPage: number ): NavigationOptions { const encodedKeyword = keyword?.replaceAll(" ", "-"); switch (urlName) { case "/search": return { to: "/search", search: { keyword: encodedKeyword, page, perPage, }, // reloadDocument: true, }; case "/c/$slug": return { to: "/c/$slug", params: { slug: `${encodedKeyword}-ai-porn` }, search: { page, perPage, }, // reloadDocument: true, }; default: throw new Error(`Unhandled route: ${urlName}`); } } export const PaginationControls: FC = ({ urlName, hasNextPage, hasPrevPage, page = 1, perPage = 10, total = perPage, keyword, }) => { const navigate = useNavigate(); const currentPage = page; const lastPage = Math.ceil(total / Number(perPage)); let beforePage = page - 1; let afterPage = page + 1; if (page == lastPage) { beforePage = beforePage - 2; } else if (page == lastPage - 1) { beforePage = beforePage - 1; } if (page == 1) { afterPage = afterPage + 2; } else if (page == 2) { afterPage = afterPage + 1; } return ( ); };