@modern-kit/react
Version:
35 lines (31 loc) • 1.12 kB
JavaScript
;
var utils = require('@modern-kit/utils');
var React = require('react');
var hooksUseEventListener = require('../useEventListener/index.cjs');
var hooksUsePreservedCallback = require('../usePreservedCallback/index.cjs');
require('../useIsomorphicLayoutEffect/index.cjs');
function useFocus({
onFocus = utils.noop,
onBlur = utils.noop
} = {}) {
const [isFocus, setIsFocus] = React.useState(false);
const ref = React.useRef(null);
const preservedFocusAction = hooksUsePreservedCallback.usePreservedCallback((event) => {
setIsFocus(true);
onFocus(event);
});
const preservedBlurAction = hooksUsePreservedCallback.usePreservedCallback((event) => {
setIsFocus(false);
onBlur(event);
});
const setFocus = React.useCallback(() => {
if (!ref.current) return;
ref.current.focus();
setIsFocus(true);
}, []);
hooksUseEventListener.useEventListener(ref, "focus", preservedFocusAction);
hooksUseEventListener.useEventListener(ref, "blur", preservedBlurAction);
return { ref, isFocus, setFocus };
}
exports.useFocus = useFocus;
//# sourceMappingURL=index.cjs.map