← 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