@hitachivantara/uikit-react-core
Version:
UI Kit Core React components.
36 lines (35 loc) • 1.03 kB
JavaScript
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 };