discord-clone/components/server/server-member.tsx

49 lines
1.5 KiB
TypeScript
Raw Normal View History

"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";
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();
//const router = useRouter();
const icon = roleIconMap[member.role];
return (
<button className={cn(
"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",
)}
>
{member.profile.name}
</p>
{icon}
</button>
)
}