skbeta/components/task-table/data-table-row-actions.tsx
Christopher Arraya c55ab3d49e initial commit
2024-01-13 20:55:51 -05:00

76 lines
1.9 KiB
TypeScript

"use client";
import { DotsHorizontalIcon } from "@radix-ui/react-icons";
import { Row } from "@tanstack/react-table";
import { Button } from "@/components/ui/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { Trash } from "lucide-react";
import { useParams } from "next/navigation";
import { useRouter } from "next/navigation";
import { taskSchema } from "@/components/task-table/schema";
interface DataTableRowActionsProps<TData> {
row: Row<TData>;
}
export function DataTableRowActions<TData>({
row,
}: DataTableRowActionsProps<TData>) {
const task = taskSchema.parse(row.original);
const params = useParams();
const router = useRouter();
async function deleteTask() {
try {
const data = await fetch(
`/w/${params.workspaceID}/p/${params.projectID}/tasks/delete`,
{
method: "DELETE",
body: JSON.stringify({
id: task.id,
}),
}
);
const res = await data.json();
console.log("DELETE TASK RES ===>", res);
router.refresh();
} catch (err) {
console.error(err);
}
}
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button
variant="ghost"
className="flex h-8 w-8 p-0 data-[state=open]:bg-muted"
>
<DotsHorizontalIcon className="h-4 w-4" />
<span className="sr-only">Open menu</span>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="w-[160px]">
<DropdownMenuItem onClick={deleteTask}>
<Trash size={16} className="mr-2 text-muted-foreground" />
Delete
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
}