29 lines
1.0 KiB
TypeScript
29 lines
1.0 KiB
TypeScript
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<RoomQualityContent>();
|
||
|
|
return {
|
||
|
|
allowCamera: roomQuality?.allow_camera !== false,
|
||
|
|
allowScreenshare: roomQuality?.allow_screenshare !== false,
|
||
|
|
};
|
||
|
|
}, [roomQualityEvent]);
|
||
|
|
};
|