@wordpress/compose
Version:
WordPress higher-order components (HOCs).
44 lines (43 loc) • 1.5 kB
JavaScript
// packages/compose/src/hooks/use-focus-return/index.ts
import { useRef, useEffect, useCallback } from "@wordpress/element";
var origin = null;
function useFocusReturn(onFocusReturn) {
const ref = useRef(null);
const focusedBeforeMountRef = useRef(null);
const onFocusReturnRef = useRef(
onFocusReturn
);
useEffect(() => {
onFocusReturnRef.current = onFocusReturn;
}, [onFocusReturn]);
return useCallback((node) => {
if (node) {
ref.current = node;
if (focusedBeforeMountRef.current) {
return;
}
const activeDocument = node.ownerDocument.activeElement instanceof window.HTMLIFrameElement ? node.ownerDocument.activeElement.contentDocument : node.ownerDocument;
focusedBeforeMountRef.current = activeDocument?.activeElement ?? null;
} else if (focusedBeforeMountRef.current) {
const isFocused = ref.current?.contains(
ref.current?.ownerDocument.activeElement ?? null
);
if (ref.current?.isConnected && !isFocused) {
origin ??= focusedBeforeMountRef.current;
return;
}
if (onFocusReturnRef.current) {
onFocusReturnRef.current();
} else {
const elementToFocus = !focusedBeforeMountRef.current.isConnected ? origin : focusedBeforeMountRef.current;
elementToFocus?.focus();
}
origin = null;
}
}, []);
}
var use_focus_return_default = useFocusReturn;
export {
use_focus_return_default as default
};
//# sourceMappingURL=index.mjs.map