diff --git a/src/room/PTTCallView.tsx b/src/room/PTTCallView.tsx index e065c143..2dbc07ec 100644 --- a/src/room/PTTCallView.tsx +++ b/src/room/PTTCallView.tsx @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React from "react"; +import React, { useEffect } from "react"; import useMeasure from "react-use-measure"; import { ResizeObserver } from "@juggle/resize-observer"; import { GroupCall, MatrixClient, RoomMember } from "matrix-js-sdk"; @@ -142,8 +142,7 @@ export const PTTCallView: React.FC = ({ const networkWaiting = talkingExpected && !activeSpeakerUserId && !showTalkOverError; - const activeSpeakerIsLocalUser = - activeSpeakerUserId && client.getUserId() === activeSpeakerUserId; + const activeSpeakerIsLocalUser = activeSpeakerUserId === client.getUserId(); const activeSpeakerUser = activeSpeakerUserId ? client.getUser(activeSpeakerUserId) : null; @@ -152,6 +151,10 @@ export const PTTCallView: React.FC = ({ ? activeSpeakerUser.displayName : ""; + useEffect(() => { + setTalkingExpected(activeSpeakerIsLocalUser); + }, [activeSpeakerIsLocalUser, setTalkingExpected]); + return (
( @@ -24,20 +24,26 @@ export const useDelayedState = ( const timers = useRef>>(); if (!timers.current) timers.current = new Set(); - const setStateDelayed = (value: T, delay: number) => { - const timer = setTimeout(() => { - setState(value); - timers.current.delete(timer); - }, delay); - timers.current.add(timer); - }; - const setStateImmediate = (value: T) => { - // Clear all updates currently in the queue - for (const timer of timers.current) clearTimeout(timer); - timers.current.clear(); + const setStateDelayed = useCallback( + (value: T, delay: number) => { + const timer = setTimeout(() => { + setState(value); + timers.current.delete(timer); + }, delay); + timers.current.add(timer); + }, + [setState, timers] + ); + const setStateImmediate = useCallback( + (value: T) => { + // Clear all updates currently in the queue + for (const timer of timers.current) clearTimeout(timer); + timers.current.clear(); - setState(value); - }; + setState(value); + }, + [setState, timers] + ); return [state, setStateDelayed, setStateImmediate]; };