import Link from 'next/link' import { Doc } from 'contentlayer/generated' import { NavItem, NavItemWithChildren } from '@/types/nav' import { docsConfig } from '@/config/docs' import { cn } from '@/lib/utils' import { buttonVariants } from 'ui' import { ChevronLeft, ChevronRight } from 'lucide-react' interface DocsPagerProps { doc: Doc } export function DocsPager({ doc }: DocsPagerProps) { const pager = getPagerForDoc(doc) if (!pager) { return null } return (
{pager?.prev?.href && (
Previous {pager.prev.title}
)} {pager?.next?.href && (
Next {pager.next.title}
)}
) } export function getPagerForDoc(doc: Doc) { const flattenedLinks = [null, ...flatten(docsConfig.sidebarNav), null] const activeIndex = flattenedLinks.findIndex((link) => doc.slug === link?.href) const prev = activeIndex !== 0 ? flattenedLinks[activeIndex - 1] : null const next = activeIndex !== flattenedLinks.length - 1 ? flattenedLinks[activeIndex + 1] : null return { prev, next, } } export function flatten(links: NavItemWithChildren[]): NavItem[] { return links .reduce((flat, link) => { return flat.concat(link.items?.length ? flatten(link.items) : link) }, []) .filter((link) => !link?.disabled) }