Openstatus
www.openstatus.dev
1"use client";
2
3import type { Row } from "@tanstack/react-table";
4import { MoreHorizontal } from "lucide-react";
5import Link from "next/link";
6
7import {
8 Button,
9 DropdownMenu,
10 DropdownMenuContent,
11 DropdownMenuItem,
12 DropdownMenuTrigger,
13} from "@openstatus/ui";
14import { z } from "zod";
15
16interface DataTableRowActionsProps<TData> {
17 row: Row<TData>;
18}
19
20export function DataTableRowActions<TData>({
21 row,
22}: DataTableRowActionsProps<TData>) {
23 // FIXME: DRY - this is a duplicate of the OSTinybird endpoint
24 const ping = z
25 .object({
26 monitorId: z.string(),
27 cronTimestamp: z.number(),
28 region: z.string(),
29 })
30 .parse(row.original);
31 return (
32 <DropdownMenu>
33 <DropdownMenuTrigger asChild>
34 <Button
35 variant="ghost"
36 className="h-8 w-8 p-0 data-[state=open]:bg-accent"
37 >
38 <span className="sr-only">Open menu</span>
39 <MoreHorizontal className="h-4 w-4" />
40 </Button>
41 </DropdownMenuTrigger>
42 <DropdownMenuContent align="end">
43 <Link
44 href={`./details?monitorId=${ping.monitorId}&cronTimestamp=${ping.cronTimestamp}®ion=${ping.region}`}
45 >
46 <DropdownMenuItem>Details</DropdownMenuItem>
47 </Link>
48 </DropdownMenuContent>
49 </DropdownMenu>
50 );
51}