"use client"; import axios from "axios"; import qs from "query-string"; import { Check, Gavel, Loader2, MoreVertical, Shield, ShieldAlert, ShieldCheck, ShieldQuestion } from "lucide-react"; import { useState } from "react"; import { MemberRole } from "@prisma/client"; import { useRouter } from "next/navigation"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { useModal } from "@/hooks/use-modal-store"; import { ServerWithMembersWithProfiles } from "@/types"; import { ScrollArea } from "@/components/ui/scroll-area"; import { UserAvatar } from "@/components/user-avatar"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuPortal, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuTrigger, DropdownMenuSubTrigger, } from "@/components/ui/dropdown-menu"; const roleIconMap = { "GUEST": null, "MODERATOR": , "ADMIN": } export const MembersModal = () => { const router = useRouter(); const { onOpen, isOpen, onClose, type, data } = useModal(); const [loadingId, setloadingId] = useState(""); const isModalOpen = isOpen && type === "members"; const { server } = data as { server: ServerWithMembersWithProfiles }; const onKick = async (memberId: string) => { try { setloadingId(memberId); const url = qs.stringifyUrl({ url: `/api/members/${memberId}`, query: { serverId: server?.id, } }); const repsponse = await axios.delete(url); router.refresh(); onOpen("members", {server: repsponse.data}); } catch (error) { console.log(error); } finally { setloadingId(""); } } const onRoleChange = async (memberId: string, role: MemberRole) => { try { setloadingId(memberId); const url = qs.stringifyUrl({ url: `/api/members/${memberId}`, query: { serverId: server?.id, } }); const response = await axios.patch(url, { role }); router.refresh(); onOpen("members", {server: response.data}); } catch (error) { console.log(error); } finally { setloadingId(""); } } return ( Manage Members {server?.members?.length} Members {server?.members?.map((member) => (
{member.profile.name} {roleIconMap[member.role]}

{member.profile.email}

{server.profileId !== member.profileId && loadingId !== member.id && (
Role onRoleChange(member.id, "GUEST")}> Guest {member.role === "GUEST" && ( )} onRoleChange(member.id, "MODERATOR")}> Moderator {member.role === "MODERATOR" && ( )} onKick(member.id)}> Kick
)} {loadingId === member.id && ( )}
))}
) }