import { useMemo, memo } from 'react';
import type { RoomMemberResponse } from '@/client';
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
import { ScrollArea } from '@/components/ui/scroll-area';
import { cn } from '@/lib/utils';
import { Loader2, Shield, UserRound } from 'lucide-react';
import type { ReactNode } from 'react';
interface RoomParticipantsPanelProps {
members: RoomMemberResponse[];
membersLoading: boolean;
}
export const RoomParticipantsPanel = memo(function RoomParticipantsPanel({
members,
membersLoading,
}: RoomParticipantsPanelProps) {
// Separate owners/admins from regular members
const admins = useMemo(
() => members.filter((m) => m.role === 'owner' || m.role === 'admin'),
[members],
);
const regular = useMemo(
() => members.filter((m) => m.role === 'member' || m.role === 'guest'),
[members],
);
return (
);
});
function ParticipantSection({
title,
icon,
children,
}: {
title: string;
icon: ReactNode;
children: ReactNode;
}) {
return (
{icon}
{title}
{displayName}
@{displayName}