Openstatus
www.openstatus.dev
1import {
2 Cog,
3 Copy,
4 CopyPlus,
5 Globe,
6 Network,
7 Server,
8 Trash2,
9} from "lucide-react";
10
11export const monitorTypes = [
12 {
13 id: "http",
14 label: "HTTP",
15 icon: Globe,
16 },
17 {
18 id: "tcp",
19 label: "TCP",
20 icon: Network,
21 },
22 {
23 id: "dns",
24 label: "DNS",
25 icon: Server,
26 },
27] as const;
28
29export const actions = [
30 {
31 id: "edit",
32 label: "Settings",
33 icon: Cog,
34 variant: "default" as const,
35 },
36 {
37 id: "copy-id",
38 label: "Copy ID",
39 icon: Copy,
40 variant: "default" as const,
41 },
42 {
43 id: "clone",
44 label: "Clone",
45 icon: CopyPlus,
46 variant: "default" as const,
47 },
48 // {
49 // id: "export",
50 // label: "Export Code",
51 // icon: Code,
52 // variant: "default" as const,
53 // },
54 {
55 id: "delete",
56 label: "Delete",
57 icon: Trash2,
58 variant: "destructive" as const,
59 },
60] as const;
61
62export type MonitorAction = (typeof actions)[number];
63
64export const getActions = (
65 props: Partial<Record<MonitorAction["id"], () => Promise<void> | void>>,
66): (MonitorAction & { onClick?: () => Promise<void> | void })[] => {
67 return actions.map((action) => ({
68 ...action,
69 onClick: props[action.id as keyof typeof props],
70 }));
71};