2023-10-18 14:56:26 -07:00
|
|
|
"use client"
|
|
|
|
|
|
|
|
import { cn } from "@/lib/utils";
|
|
|
|
import { Member, MemberRole, Profile, Server } from "@prisma/client"
|
|
|
|
import { ShieldAlert, ShieldCheck } from "lucide-react";
|
|
|
|
import { useParams } from "next/navigation";
|
2023-10-20 19:36:58 -07:00
|
|
|
import { useRouter } from "next/navigation";
|
2023-10-18 14:56:26 -07:00
|
|
|
import { UserAvatar } from "@/components/user-avatar";
|
|
|
|
|
|
|
|
interface ServerMemberProps {
|
|
|
|
member: Member & {
|
|
|
|
profile: Profile;
|
|
|
|
};
|
|
|
|
server: Server;
|
|
|
|
}
|
|
|
|
|
|
|
|
const roleIconMap = {
|
|
|
|
[MemberRole.GUEST]: null,
|
|
|
|
[MemberRole.MODERATOR]: <ShieldCheck className="h-4 w-4 ml-2 text-indigo-500" />,
|
|
|
|
[MemberRole.ADMIN]: <ShieldAlert className="w-4 h-4 ml-2 text-rose-500" />
|
|
|
|
}
|
|
|
|
|
|
|
|
export const ServerMember = ({
|
|
|
|
member,
|
|
|
|
server
|
|
|
|
}: ServerMemberProps) => {
|
|
|
|
const params = useParams();
|
2023-10-20 19:42:52 -07:00
|
|
|
const router = useRouter();
|
2023-10-18 14:56:26 -07:00
|
|
|
|
|
|
|
const icon = roleIconMap[member.role];
|
2023-10-20 19:42:52 -07:00
|
|
|
|
|
|
|
const onClick = () => {
|
|
|
|
router.push(`/servers/${params?.serverId}/conversations/${member.id}`);
|
|
|
|
}
|
|
|
|
|
2023-10-18 14:56:26 -07:00
|
|
|
return (
|
2023-10-20 19:42:52 -07:00
|
|
|
<button
|
|
|
|
onClick={onClick}
|
|
|
|
className={cn(
|
2023-10-18 14:56:26 -07:00
|
|
|
"group px-2 py-2 rounded-md flex items-center gap-x-2 w-full hover:bg-zinc-700/10 dark:hover:bg-zinc-700/50 transition mb-1",
|
|
|
|
params?.memberId === member.id && "bg-zinc-700/20 dark:bg-zinc-700"
|
|
|
|
)}>
|
|
|
|
<UserAvatar src={member.profile.imageUrl}
|
|
|
|
className="h-8 w-8 md:h-8 md:w-8"
|
|
|
|
/>
|
|
|
|
<p
|
|
|
|
className={cn(
|
|
|
|
"font-semibold text-sm text-zinc-500 group-hover:text-zinc-600 dark:text-zinc-400 dark:group-hover:text-zinc-300 transition",
|
2023-10-20 19:38:37 -07:00
|
|
|
params?.memberId === member.id &&
|
|
|
|
"dark:text-zinc-200 dark:group-hove:text-white"
|
2023-10-18 14:56:26 -07:00
|
|
|
)}
|
|
|
|
>
|
|
|
|
{member.profile.name}
|
|
|
|
</p>
|
|
|
|
{icon}
|
|
|
|
</button>
|
|
|
|
)
|
|
|
|
}
|