UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

35 lines (34 loc) 1.71 kB
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 };