"use client"; import { useEffect, useRef, 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"; import { useSession } from "next-auth/react"; export const Audio = () => { const connection = usePilotConnectionStore(); const [showSource, setShowSource] = useState(false); const serverSession = useSession(); const { isTalking, toggleTalking, connect, state, connectionQuality, disconnect, remoteParticipants, room, message, source, } = useAudioStore(); const [selectedRoom, setSelectedRoom] = useState("LST_01"); useEffect(() => { setShowSource(true); const timeout = setTimeout(() => { setShowSource(false); }, 6000); return () => { clearTimeout(timeout); }; }, [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 &&
{source}
} {state === "connected" && (
{connectionQuality === ConnectionQuality.Excellent && } {connectionQuality === ConnectionQuality.Good && } {connectionQuality === ConnectionQuality.Poor && } {connectionQuality === ConnectionQuality.Lost && } {connectionQuality === ConnectionQuality.Unknown && ( )}
{remoteParticipants}
    {ROOMS.map((r) => (
  • ))}
)}
); };