diff --git a/src/frontend/src/features/rooms/components/RecordingIndicator.tsx b/src/frontend/src/features/rooms/components/RecordingIndicator.tsx new file mode 100644 index 00000000..675ef7bc --- /dev/null +++ b/src/frontend/src/features/rooms/components/RecordingIndicator.tsx @@ -0,0 +1,53 @@ +import { useRoomContext } from '@livekit/components-react' +import { useEffect, useState } from 'react' +import { RoomEvent } from 'livekit-client' +import { egressStore } from '@/stores/egress.ts' +import { useSnapshot } from 'valtio' + +export const RecordingIndicator = () => { + const room = useRoomContext() + const [isRecording, setIsRecording] = useState(room.isRecording) + + const egressSnap = useSnapshot(egressStore) + const egressIsStopping = egressSnap.egressIsStopping + + useEffect(() => { + const handleRecordingStatusChanges = (isRecording: boolean) => { + if (!isRecording) { + egressStore.egressIsStopping = false + } + + setIsRecording(isRecording) + } + room.on(RoomEvent.RecordingStatusChanged, handleRecordingStatusChanges) + return () => { + room.off(RoomEvent.RecordingStatusChanged, handleRecordingStatusChanges) + } + }, [room]) + + const getStatus = () => { + if (egressIsStopping) { + return 'saving recording' + } + if (isRecording) { + return 'recording' + } + if (!isRecording) { + return 'available' + } + } + + return ( +