"use client"; import { useEffect, useState } from "react"; import { usePilotConnectionStore } from "_store/pilot/connectionStore"; import { Disc, Mic, PlugZap, ServerCrash, ShieldQuestion, Signal, SignalLow, SignalMedium, WifiOff, ZapOff, } from "lucide-react"; import { useAudioStore } from "_store/audioStore"; import { cn } from "_helpers/cn"; import { ConnectionQuality } from "livekit-client"; import { ROOMS } from "_data/livekitRooms"; export const Audio = () => { const connection = usePilotConnectionStore(); const [showSource, setShowSource] = useState(false); const { isTalking, toggleTalking, connect, state, connectionQuality, disconnect, remoteParticipants, room, message, source, } = useAudioStore(); const [selectedRoom, setSelectedRoom] = useState("LST_01"); useEffect(() => { setShowSource(true); }, [source, isTalking]); useEffect(() => { const joinRoom = async () => { if (connection.status != "connected") return; if (state === "connected") return; connect(selectedRoom); }; joinRoom(); return () => { disconnect(); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [connection.status]); return ( <>
{state === "error" &&
{message}
} {showSource && source && (
)} {state === "connected" && (
{connectionQuality === ConnectionQuality.Excellent && } {connectionQuality === ConnectionQuality.Good && } {connectionQuality === ConnectionQuality.Poor && } {connectionQuality === ConnectionQuality.Lost && } {connectionQuality === ConnectionQuality.Unknown && ( )}
{remoteParticipants}
    {ROOMS.map((r) => (
  • ))}
)}
); };