/* Copyright 2023, 2024 New Vector Ltd. SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ import { logger } from "matrix-js-sdk/lib/logger"; import { type MatrixRTCSession, MatrixRTCSessionEvent, } from "matrix-js-sdk/lib/matrixrtc"; import { useEffect, useState } from "react"; export function useMatrixRTCSessionJoinState( rtcSession: MatrixRTCSession | undefined, ): boolean { const [, setNumUpdates] = useState(0); useEffect(() => { if (rtcSession !== undefined) { const onJoinStateChanged = (isJoined: boolean): void => { logger.info( `Session in room ${rtcSession.room.roomId} changed to ${ isJoined ? "joined" : "left" }`, ); setNumUpdates((n) => n + 1); // Force an update }; rtcSession.on(MatrixRTCSessionEvent.JoinStateChanged, onJoinStateChanged); return (): void => { rtcSession.off( MatrixRTCSessionEvent.JoinStateChanged, onJoinStateChanged, ); }; } }, [rtcSession]); return rtcSession?.isJoined() ?? false; }