import type { JSX } from "solid-js"; import { usePageContext } from "vike-solid/usePageContext"; import { cleanProps } from "@/utils/cleanProps"; import { navigation } from "@/libs/navigation"; import { Link } from "@/components/Link"; import clsx from "clsx"; function ArrowIcon(props: JSX.IntrinsicElements["svg"]) { return ( ); } type PageLinkProps = Omit & { title: string; href: string; dir?: "previous" | "next"; }; function PageLink(props: PageLinkProps) { const pageCategory = navigation.find((section) => { return section.links.some( (link) => link.href === props.href || link.subitems.some((subitem) => subitem.href === props.href), ); }); return (
{props.dir === "next" ? "Suivant" : "Précédent"}

{pageCategory && ( {pageCategory.title} )} {props.title}

); } export function PrevNextLinks() { const pageContext = usePageContext(); const allLinks = navigation .flatMap((section) => section.links) .flatMap((link) => { return link.subitems ? [link, ...link.subitems] : link; }); const getNeighboringLinks = () => { const linkIndex = allLinks.findIndex( (link) => link.href === pageContext.urlPathname, ); if (linkIndex === -1) return [null, null]; const previousPage = allLinks[linkIndex - 1] || null; let nextPage = allLinks[linkIndex + 1] || null; if (nextPage?.href === pageContext.urlPathname) { nextPage = allLinks[linkIndex + 2] || null; } return [previousPage, nextPage]; }; const [previousPage, nextPage] = getNeighboringLinks(); if (!nextPage && !previousPage) return null; return (
{previousPage && } {nextPage && }
); }