import { useAudioStore } from "_store/audioStore"; import { LocalParticipant, LocalTrackPublication, Participant, RemoteParticipant, RemoteTrack, RemoteTrackPublication, Track, } from "livekit-client"; export const handleTrackSubscribed = ( track: RemoteTrack, publication: RemoteTrackPublication, participant: RemoteParticipant, ) => { console.log("Track subscribed:", track, publication, participant); if (!track.isMuted) { useAudioStore.getState().addSpeakingParticipant(participant); } track.on("unmuted", () => { useAudioStore.getState().addSpeakingParticipant(participant); console.log("Track unmuted:", track); }); track.on("muted", () => { useAudioStore.getState().removeSpeakingParticipant(participant); console.log("Track muted:", track); }); if (track.kind === Track.Kind.Video || track.kind === Track.Kind.Audio) { // attach it to a new HTMLVideoElement or HTMLAudioElement const element = track.attach(); element.play(); } }; export const handleTrackUnsubscribed = ( track: RemoteTrack, publication: RemoteTrackPublication, participant: RemoteParticipant, ) => { // remove tracks from all attached elements track.detach(); }; export const handleLocalTrackUnpublished = ( publication: LocalTrackPublication, participant: LocalParticipant, ) => { // when local tracks are ended, update UI to remove them from rendering publication.track?.detach(); }; export const handleDisconnect = () => { console.log("disconnected from room"); };