UNPKG

rsuite

Version:

A suite of react components

31 lines (29 loc) 1.06 kB
'use client'; import { useCallback, useRef } from 'react'; export function useFocus(elementRef) { // When grabbing focus, keep track of previous activeElement // so that we can return focus later const previousActiveElementRef = useRef(null); // Focus the element itself const grab = useCallback(() => { requestAnimationFrame(() => { if (document.activeElement !== elementRef.current) { var _elementRef$current; previousActiveElementRef.current = document.activeElement; (_elementRef$current = elementRef.current) === null || _elementRef$current === void 0 || _elementRef$current.focus(); } }); }, [elementRef]); // Return focus to previous active element const release = useCallback(options => { requestAnimationFrame(() => { var _previousActiveElemen; (_previousActiveElemen = previousActiveElementRef.current) === null || _previousActiveElemen === void 0 || _previousActiveElemen.focus(options); }); }, []); return { grab, release }; } export default useFocus;