Spaces:
Sleeping
Sleeping
File size: 2,292 Bytes
05c5ed5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | "use client";
import { DBWorkflow } from "app-types/workflow";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "ui/dropdown-menu";
import { EditWorkflowPopup } from "./edit-workflow-popup";
import { useState } from "react";
import { safe } from "ts-safe";
import { toast } from "sonner";
import { mutate } from "swr";
import { useTranslations } from "next-intl";
import { PencilIcon, Trash2Icon } from "lucide-react";
interface WorkflowContextMenuProps {
children: React.ReactNode;
workflow: Pick<
DBWorkflow,
"id" | "name" | "description" | "icon" | "isPublished" | "visibility"
>;
}
export function WorkflowContextMenu(props: WorkflowContextMenuProps) {
const [editOpen, setEditOpen] = useState(false);
const [open, setOpen] = useState(false);
const t = useTranslations();
const handleDeleteWorkflow = async () => {
toast.promise(
safe(() =>
fetch(`/api/workflow/${props.workflow.id}`, {
method: "DELETE",
}),
)
.ifOk(() => {
mutate("/api/workflow");
setOpen(false);
})
.unwrap(),
{
success: t("Common.success"),
loading: t("Common.deleting"),
},
);
};
return (
<>
<DropdownMenu open={open} onOpenChange={setOpen}>
<DropdownMenuTrigger asChild>{props.children}</DropdownMenuTrigger>
<DropdownMenuContent onClick={(e) => e.stopPropagation()}>
<DropdownMenuItem
className="cursor-pointer text-sm"
onClick={() => setEditOpen(true)}
>
<PencilIcon className="size-3.5" />
{t("Common.edit")}
</DropdownMenuItem>
<DropdownMenuItem
className="cursor-pointer text-sm"
variant="destructive"
onClick={(e) => {
e.stopPropagation();
handleDeleteWorkflow();
}}
>
<Trash2Icon className="size-3.5" />
{t("Common.delete")}
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
<EditWorkflowPopup
defaultValue={props.workflow}
submitAfterRoute={false}
open={editOpen}
onOpenChange={setEditOpen}
/>
</>
);
}
|