"use client"; import { useMemo, useState } from "react"; import { Link } from "@/i18n/navigation"; import { MIROTALK_PROVIDER_LABEL, WEB_CHAT_PROVIDER_LABEL, type MeetupSession, } from "@/app/lib/meetups"; import MeetupSocialPanel from "@/app/components/meetups/MeetupSocialPanel"; interface EventLiveRoomProps { locale: string; meetup: { id: string; city: string; emoji: string; venue: string; date: string; time: string; organizer: string; gradientFrom: string; gradientTo: string; }; session: MeetupSession; formattedDate: string; } const copy = { zh: { back: "返回活动列表", video: "视频会议", chat: "Web 群聊", split: "分屏", videoOnly: "只看视频", chatOnly: "只看群聊", identity: "社区身份", guest: "访客", vip: "VIP", member: "成员", channel: "活动频道", openChat: "新窗口打开群聊", openVideo: "新窗口打开视频", locked: "当前权限不足,无法进入活动间", login: "登录社区账户", joinVip: "开通 VIP", providers: "服务由 VPS 自建开源项目提供", }, en: { back: "Back to events", video: "Video", chat: "Web chat", split: "Split", videoOnly: "Video only", chatOnly: "Chat only", identity: "Community identity", guest: "Guest", vip: "VIP", member: "Member", channel: "Event channel", openChat: "Open chat in new tab", openVideo: "Open video in new tab", locked: "You do not have access to this live room yet.", login: "Sign in", joinVip: "Get VIP", providers: "Powered by self-hosted open-source services on VPS", }, }; type PanelMode = "split" | "video" | "chat"; export default function EventLiveRoom({ locale, meetup, session, formattedDate }: EventLiveRoomProps) { const c = locale === "zh" ? copy.zh : copy.en; const [panel, setPanel] = useState("split"); const badge = useMemo(() => { if (session.user?.vip) return c.vip; if (session.user) return c.member; return c.guest; }, [c.guest, c.member, c.vip, session.user]); if (!session.canJoin) { return (

{c.locked}

{c.login} {session.lockReason === "vip_required" ? ( {c.joinVip} ) : null} {c.back}
); } const showVideo = panel === "split" || panel === "video"; const showChat = panel === "split" || panel === "chat"; return (
← {c.back}

{meetup.emoji} {meetup.city} · {meetup.venue}

{formattedDate}

{c.identity}: {session.displayName} {badge} {c.channel} {session.loungeChannel}
{MIROTALK_PROVIDER_LABEL} {WEB_CHAT_PROVIDER_LABEL} {c.providers}
{(["split", "video", "chat"] as PanelMode[]).map((mode) => ( ))} {c.openVideo} {c.openChat}
{showVideo ? (