← full-stack-fastapi-template / frontend/src/components/Admin/UserActionsMenu.tsx
| 1 | import { EllipsisVertical } from "lucide-react" |
| 2 | import { useState } from "react" |
| 3 | |
| 4 | import type { UserPublic } 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 useAuth from "@/hooks/useAuth" |
| 12 | import DeleteUser from "./DeleteUser" |
| 13 | import EditUser from "./EditUser" |
| 14 | |
| 15 | interface UserActionsMenuProps { |
| 16 | user: UserPublic |
| 17 | } |
| 18 | |
| 19 | export const UserActionsMenu = ({ user }: UserActionsMenuProps) => { |
| 20 | const [open, setOpen] = useState(false) |
| 21 | const { user: currentUser } = useAuth() |
| 22 | |
| 23 | if (user.id === currentUser?.id) { |
| 24 | return null |
| 25 | } |
| 26 | |
| 27 | return ( |
| 28 | <DropdownMenu open={open} onOpenChange={setOpen}> |
| 29 | <DropdownMenuTrigger asChild> |
| 30 | <Button variant="ghost" size="icon"> |
| 31 | <EllipsisVertical /> |
| 32 | </Button> |
| 33 | </DropdownMenuTrigger> |
| 34 | <DropdownMenuContent align="end"> |
| 35 | <EditUser user={user} onSuccess={() => setOpen(false)} /> |
| 36 | <DeleteUser id={user.id} onSuccess={() => setOpen(false)} /> |
| 37 | </DropdownMenuContent> |
| 38 | </DropdownMenu> |
| 39 | ) |
| 40 | } |
| 41 |