Keep iframe focus callback ref updated

This commit is contained in:
Dustin Brett
2022-08-31 21:16:47 -07:00
parent 6dcf49da7a
commit 688f85f403

View File

@@ -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<Processes>({});
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;