import { useState } from "react"; import { Stack, Group, Text, Badge, Select, Button, ActionIcon, Divider, Box, Avatar, Tooltip, ScrollArea, } from "@mantine/core"; import { IconUserPlus, IconUserMinus, IconRefresh, IconUsers } from "@tabler/icons-react"; import type { Member, Peer, Room } from "../types"; interface Props { room: Room; members: Member[]; peers: Peer[]; myEndpoint: string; iAmOwner: boolean; nameFor: (endpoint: string) => string; onInvite: (target: string) => void; onKick: (target: string) => void; onRefresh: () => void; } // MembersPane is the right column: who is in the active room, plus invite (pick a // connected peer) and kick (owner only). Invite/kick address peers by name; the // gateway resolves the name to its bus endpoint. export function MembersPane({ room, members, peers, myEndpoint, iAmOwner, nameFor, onInvite, onKick, onRefresh, }: Props) { const [target, setTarget] = useState(null); const memberEndpoints = new Set(members.map((m) => m.endpoint)); // Candidates to invite: connected peers not already in the room. const candidates = peers .filter((p) => !memberEndpoints.has(p.endpoint_id)) .map((p) => ({ value: p.name, label: p.name })); const invite = () => { if (target) { onInvite(target); setTarget(null); } }; return ( Miembros {members.length} Invitar {room.encrypt && "(reparte la clave)"}