()
| 12 | ); |
| 13 | |
| 14 | const SensorStatusBar: React.FC = () => { |
| 15 | const [streams, setStreams] = useState<StreamState>(() => StreamManager.getCurrentState()); |
| 16 | |
| 17 | useEffect(() => { |
| 18 | const handleStreamUpdate = (newState: StreamState) => { |
| 19 | setStreams(newState); |
| 20 | }; |
| 21 | StreamManager.addListener(handleStreamUpdate); |
| 22 | return () => { |
| 23 | StreamManager.removeListener(handleStreamUpdate); |
| 24 | }; |
| 25 | }, []); |
| 26 | |
| 27 | return ( |
| 28 | <div className="fixed bottom-0 left-1/2 -translate-x-1/2 mb-4 px-4 py-2 bg-gray-800 bg-opacity-80 backdrop-blur-sm rounded-lg shadow-lg border border-gray-700"> |
| 29 | <div className="flex items-center gap-4"> |
| 30 | <SensorIcon Icon={Monitor} isActive={!!streams.screenVideoStream} label="Screen Sharing" /> |
| 31 | <SensorIcon Icon={Video} isActive={!!streams.cameraStream} label="Camera" /> |
| 32 | <SensorIcon Icon={Mic} isActive={!!streams.microphoneStream} label="Microphone" /> |
| 33 | </div> |
| 34 | </div> |
| 35 | ); |
| 36 | }; |
| 37 | |
| 38 | export default SensorStatusBar; |
nothing calls this directly
no test coverage detected