← full-stack-fastapi-template / frontend/src/components/Items/ItemActionsMenu.tsx
| 1 | import { EllipsisVertical } from "lucide-react" |
| 2 | import { useState } from "react" |
| 3 | |
| 4 | import type { ItemPublic } from "@/client" |
| 5 | import { Button } from "@/components/ui/button" |
| 6 | import { |
| 7 | DropdownMenu, |
| 8 | DropdownMenuContent, |
| 9 | DropdownMenuTrigger, |
| 10 | } from "@/components/ui/dropdown-menu" |
| 11 | import DeleteItem from "../Items/DeleteItem" |
| 12 | import EditItem from "../Items/EditItem" |
| 13 | |
| 14 | interface ItemActionsMenuProps { |
| 15 | item: ItemPublic |
| 16 | } |
| 17 | |
| 18 | export const ItemActionsMenu = ({ item }: ItemActionsMenuProps) => { |
| 19 | const [open, setOpen] = useState(false) |
| 20 | |
| 21 | return ( |
| 22 | <DropdownMenu open={open} onOpenChange={setOpen}> |
| 23 | <DropdownMenuTrigger asChild> |
| 24 | <Button variant="ghost" size="icon"> |
| 25 | <EllipsisVertical /> |
| 26 | </Button> |
| 27 | </DropdownMenuTrigger> |
| 28 | <DropdownMenuContent align="end"> |
| 29 | <EditItem item={item} onSuccess={() => setOpen(false)} /> |
| 30 | <DeleteItem id={item.id} onSuccess={() => setOpen(false)} /> |
| 31 | </DropdownMenuContent> |
| 32 | </DropdownMenu> |
| 33 | ) |
| 34 | } |
| 35 |