rsuite
Version:
A suite of react components
29 lines (25 loc) • 1.08 kB
JavaScript
import { useCallback, useRef } from 'react';
export default function useFocus(elementRef) {
// When grabbing focus, keep track of previous activeElement
// so that we can return focus later
var previousActiveElementRef = useRef(null); // Focus the element itself
var grab = useCallback(function () {
requestAnimationFrame(function () {
if (document.activeElement !== elementRef.current) {
var _elementRef$current;
previousActiveElementRef.current = document.activeElement;
(_elementRef$current = elementRef.current) === null || _elementRef$current === void 0 ? void 0 : _elementRef$current.focus();
}
});
}, [elementRef]); // Return focus to previous active element
var release = useCallback(function (options) {
requestAnimationFrame(function () {
var _previousActiveElemen;
(_previousActiveElemen = previousActiveElementRef.current) === null || _previousActiveElemen === void 0 ? void 0 : _previousActiveElemen.focus(options);
});
}, []);
return {
grab: grab,
release: release
};
}