import React from "react"; import { Box, Table, Link, Flex, IconButton, Text, Spinner, } from "@chakra-ui/react"; import { LuLink } from "react-icons/lu"; import { Room } from "../../../api"; import { RoomActionsMenu } from "./RoomActionsMenu"; interface RoomTableProps { rooms: Room[]; linkCopied: string; onCopyUrl: (roomName: string) => void; onEdit: (roomId: string, roomData: any) => void; onDelete: (roomId: string) => void; loading?: boolean; } const getRoomModeDisplay = (mode: string): string => { switch (mode) { case "normal": return "2-4 people"; case "group": return "2-200 people"; default: return mode; } }; const getRecordingDisplay = (type: string, trigger: string): string => { if (type === "none") return "-"; if (type === "local") return "Local"; if (type === "cloud") { switch (trigger) { case "none": return "Cloud (None)"; case "prompt": return "Cloud (Prompt)"; case "automatic-2nd-participant": return "Cloud (Auto)"; default: return `Cloud (${trigger})`; } } return type; }; const getZulipDisplay = ( autoPost: boolean, stream: string, topic: string, ): string => { if (!autoPost) return "-"; if (stream && topic) return `${stream} > ${topic}`; if (stream) return stream; return "Enabled"; }; export function RoomTable({ rooms, linkCopied, onCopyUrl, onEdit, onDelete, loading, }: RoomTableProps) { return ( {loading && ( )} Room Name Zulip Room Size Recording {rooms.map((room) => ( {room.name} {getZulipDisplay( room.zulip_auto_post, room.zulip_stream, room.zulip_topic, )} {getRoomModeDisplay(room.room_mode)} {getRecordingDisplay( room.recording_type, room.recording_trigger, )} {linkCopied === room.name ? ( Copied! ) : ( onCopyUrl(room.name)} size="sm" variant="ghost" > )} ))} ); }