UNPKG

@hitachivantara/uikit-react-core

Version:
36 lines (35 loc) 1.03 kB
import { getDocument } from "../utils/document.js"; import { useMemo } from "react"; //#region src/hooks/useFocus.ts /** server-side safe `document.activeElement` wrapper */ var getActiveEl = () => getDocument()?.activeElement || null; function makeFocusUtils(containerRef) { function focus(el, checkFocus = true) { if (!checkFocus || containerRef.current?.contains(getActiveEl())) el?.focus(); } return { focusPrevious() { focus(getActiveEl()?.previousElementSibling); }, focusNext() { focus(getActiveEl()?.nextElementSibling); }, focusFirst() { focus(getActiveEl()?.parentElement?.firstElementChild); }, focusLast() { focus(getActiveEl()?.parentElement?.lastElementChild); }, focusChild(index) { focus(containerRef.current?.children[index], false); }, focusSibling(index) { focus(getActiveEl()?.parentElement?.children[index]); } }; } function useFocus({ containerRef }) { return useMemo(() => makeFocusUtils(containerRef), [containerRef]); } //#endregion export { useFocus };