Openstatus www.openstatus.dev
at main 48 lines 1.5 kB view raw
1"use client"; 2 3import { Button } from "@/components/ui/button"; 4import { 5 DropdownMenu, 6 DropdownMenuContent, 7 DropdownMenuGroup, 8 DropdownMenuItem, 9 DropdownMenuLabel, 10 DropdownMenuTrigger, 11} from "@/components/ui/dropdown-menu"; 12import { TRIGGER } from "@/data/metrics.client"; 13import { cn } from "@/lib/utils"; 14import { Check } from "lucide-react"; 15import { parseAsStringLiteral, useQueryState } from "nuqs"; 16 17const parseTrigger = parseAsStringLiteral(TRIGGER); 18 19export function DropdownTrigger() { 20 const [trigger, setTrigger] = useQueryState("trigger", parseTrigger); 21 22 return ( 23 <DropdownMenu> 24 <DropdownMenuTrigger asChild> 25 <Button variant="outline" size="sm" className="capitalize"> 26 {trigger ?? "All Trigger"} 27 </Button> 28 </DropdownMenuTrigger> 29 <DropdownMenuContent align="start"> 30 <DropdownMenuGroup> 31 <DropdownMenuLabel className="font-medium text-muted-foreground text-xs"> 32 Trigger 33 </DropdownMenuLabel> 34 {TRIGGER.map((item) => ( 35 <DropdownMenuItem 36 key={item} 37 onSelect={() => setTrigger(item)} 38 className={cn("capitalize")} 39 > 40 {item === "cron" ? "Scheduled" : "API"} 41 {trigger === item ? <Check className="ml-auto shrink-0" /> : null} 42 </DropdownMenuItem> 43 ))} 44 </DropdownMenuGroup> 45 </DropdownMenuContent> 46 </DropdownMenu> 47 ); 48}