Openstatus
www.openstatus.dev
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}