UNPKG

@wordpress/compose

Version:
44 lines (43 loc) 1.5 kB
// 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