@primer/react
Version:
An implementation of GitHub's Primer Design System using React
35 lines (34 loc) • 1.71 kB
JavaScript
import { useProvidedRefOrCreate } from "./useProvidedRefOrCreate.js";
import React, { useEffect } from "react";
import { FocusKeys as FocusKeys$1, focusZone } from "@primer/behaviors";
//#region src/hooks/useFocusZone.ts
function useFocusZone(settings = {}, dependencies = []) {
const containerRef = useProvidedRefOrCreate(settings.containerRef);
const useActiveDescendant = !!settings.activeDescendantFocus;
const activeDescendantControlRef = useProvidedRefOrCreate(typeof settings.activeDescendantFocus === "boolean" || !settings.activeDescendantFocus ? void 0 : settings.activeDescendantFocus);
const disabled = settings.disabled;
const abortController = React.useRef();
useEffect(() => {
if (containerRef.current instanceof HTMLElement && (!useActiveDescendant || activeDescendantControlRef.current instanceof HTMLElement)) if (!disabled) {
var _activeDescendantCont;
const vanillaSettings = {
...settings,
activeDescendantControl: (_activeDescendantCont = activeDescendantControlRef.current) !== null && _activeDescendantCont !== void 0 ? _activeDescendantCont : void 0
};
abortController.current = focusZone(containerRef.current, vanillaSettings);
return () => {
var _abortController$curr;
(_abortController$curr = abortController.current) === null || _abortController$curr === void 0 || _abortController$curr.abort();
};
} else {
var _abortController$curr2;
(_abortController$curr2 = abortController.current) === null || _abortController$curr2 === void 0 || _abortController$curr2.abort();
}
}, [disabled, ...dependencies]);
return {
containerRef,
activeDescendantControlRef
};
}
//#endregion
export { FocusKeys$1 as FocusKeys, useFocusZone };