import { Button } from "@/src/components/ui/button"; import { InputCommandShortcut } from "@/src/components/ui/input-command"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/src/components/ui/tooltip"; import { type ListEntry, useDetailPageLists, } from "@/src/features/navigate-detail-pages/context"; import { usePostHogClientCapture } from "@/src/features/posthog-analytics/usePostHogClientCapture"; import { ChevronDown, ChevronUp } from "lucide-react"; import { useRouter } from "next/router"; import { useEffect } from "react"; export const DetailPageNav = (props: { currentId: string; path: (entry: ListEntry) => string; listKey: string; }) => { const { detailPagelists } = useDetailPageLists(); const entries = detailPagelists[props.listKey] ?? []; const capture = usePostHogClientCapture(); const router = useRouter(); const currentIndex = entries.findIndex( (entry) => entry.id === props.currentId, ); const previousPageEntry = currentIndex > 0 ? entries[currentIndex - 1] : undefined; const nextPageEntry = currentIndex < entries.length - 1 ? entries[currentIndex + 1] : undefined; // keyboard shortcuts for buttons k and j useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { // don't trigger keyboard shortcuts if the user is typing in an input if ( event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement || (event.target instanceof HTMLElement && event.target.getAttribute("role") === "textbox") ) { return; } // don't trigger shortcuts if modifier keys are pressed (e.g., Cmd+K for universal search) if (event.metaKey || event.ctrlKey) { return; } if (event.key === "k" && previousPageEntry) { void router.push( props.path({ id: encodeURIComponent(previousPageEntry.id), params: previousPageEntry.params, }), ); } else if (event.key === "j" && nextPageEntry) { void router.push( props.path({ id: encodeURIComponent(nextPageEntry.id), params: nextPageEntry.params, }), ); } }; window.addEventListener("keydown", handleKeyDown); return () => window.removeEventListener("keydown", handleKeyDown); }, [previousPageEntry, nextPageEntry, router, props]); if (entries.length > 1) return (
Navigate up k Navigate down j
); else return null; };