import { Room } from 'matrix-js-sdk'; import { useMemo } from 'react'; import { useStateEvent } from './useStateEvent'; import { StateEvent } from '../../types/matrix/room'; import { RoomQualityContent } from '../utils/callQuality'; export type RoomCallPolicy = { allowCamera: boolean; allowScreenshare: boolean; }; /** * [Gitea #26] Shared room-level camera/screenshare policy, read from the * `io.lotus.room_quality` state event. Absent/true = allowed; only an explicit * `false` forbids. Hoisted out of `CallControls` so other call surfaces (e.g. * the app-wide `CallStatus` bar) can apply the same gating. */ export const useRoomCallPolicy = (room: Room): RoomCallPolicy => { const roomQualityEvent = useStateEvent(room, StateEvent.LotusRoomQuality); return useMemo(() => { const roomQuality = roomQualityEvent?.getContent(); return { allowCamera: roomQuality?.allow_camera !== false, allowScreenshare: roomQuality?.allow_screenshare !== false, }; }, [roomQualityEvent]); };