| 9 | import { cn } from "@repo/ui/utils"; |
| 10 | |
| 11 | export function PageToggle({ |
| 12 | allProblems, |
| 13 | isAtHeader = false, |
| 14 | track, |
| 15 | }: { |
| 16 | allProblems: Problem[]; |
| 17 | isAtHeader?: boolean; |
| 18 | track: Track & { problems: Problem[] }; |
| 19 | }) { |
| 20 | const { trackIds }: { trackIds?: string[] } = useParams(); |
| 21 | const currentTrack = trackIds ? trackIds.join("/") : ""; |
| 22 | |
| 23 | const isLegacyMode = useRecoilValue(isLegacyViewMode); |
| 24 | |
| 25 | return ( |
| 26 | <DropdownMenu> |
| 27 | <DropdownMenuTrigger asChild> |
| 28 | <Button |
| 29 | className={`flex gap-2 font-semibold ${isLegacyMode ? "" : "dark:bg-[#323232]"}`} |
| 30 | size={"lg"} |
| 31 | variant={isLegacyMode ? "outline" : "secondary"} |
| 32 | > |
| 33 | <span className={`hidden ${isAtHeader ? "lg" : "md"}:block`}>Jump To</span> |
| 34 | <ArrowUpRight className="size-4" /> |
| 35 | </Button> |
| 36 | </DropdownMenuTrigger> |
| 37 | <DropdownMenuContent align="start" className={cn("max-h-[80vh] overflow-y-auto dark:bg-[#151515]")}> |
| 38 | {allProblems.map((problem: { id: string; title: string }, index: number) => ( |
| 39 | <DropdownMenuItem key={index} disabled={currentTrack === `${track.id}/${problem.id}`}> |
| 40 | <Link |
| 41 | key={problem.id} |
| 42 | prefetch={true} |
| 43 | className="w-full max-w-screen-md" |
| 44 | href={`/tracks/${track.id}/${problem.id}`} |
| 45 | > |
| 46 | {index + 1} - {problem.title} |
| 47 | </Link> |
| 48 | </DropdownMenuItem> |
| 49 | ))} |
| 50 | </DropdownMenuContent> |
| 51 | </DropdownMenu> |
| 52 | ); |
| 53 | } |