From 688f85f4039aab9fcc01ca71e8a51d0da92129a0 Mon Sep 17 00:00:00 2001 From: Dustin Brett Date: Wed, 31 Aug 2022 21:16:47 -0700 Subject: [PATCH] Keep iframe focus callback ref updated --- hooks/useIFrameFocuser.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hooks/useIFrameFocuser.ts b/hooks/useIFrameFocuser.ts index e0848bf6..e1d20219 100644 --- a/hooks/useIFrameFocuser.ts +++ b/hooks/useIFrameFocuser.ts @@ -1,11 +1,13 @@ import { useProcesses } from "contexts/process"; +import type { Processes } from "contexts/process/types"; import { useSession } from "contexts/session"; -import { useCallback, useEffect } from "react"; +import { useCallback, useEffect, useRef } from "react"; import { ONE_TIME_PASSIVE_EVENT } from "utils/constants"; const useIFrameFocuser = (): void => { const { processes } = useProcesses(); const { setForegroundId } = useSession(); + const processesRef = useRef({}); const focusIframeWindow = useCallback((): void => { if (document.activeElement instanceof HTMLIFrameElement) { const [id] = @@ -19,7 +21,7 @@ const useIFrameFocuser = (): void => { "click", ({ target }) => { const [focusId = ""] = - Object.entries(processes).find( + Object.entries(processesRef.current).find( ([, { componentWindow }]) => target instanceof HTMLElement && componentWindow?.contains(target) @@ -38,6 +40,10 @@ const useIFrameFocuser = (): void => { return () => window.removeEventListener("blur", focusIframeWindow); }, [focusIframeWindow]); + + useEffect(() => { + processesRef.current = processes; + }, [processes]); }; export default useIFrameFocuser;