rsuite
Version:
A suite of react components
46 lines (45 loc) • 1.09 kB
JavaScript
'use client';
;
exports.__esModule = true;
exports.default = void 0;
var _react = require("react");
var _hooks = require("../../internals/hooks");
function useFocusState(props) {
const {
target,
value,
focusActiveNode
} = props;
const [active, setActive] = (0, _react.useState)(false);
const [focusItemValue, setFocusItemValue] = (0, _react.useState)(null);
const focusTarget = (0, _hooks.useEventCallback)(() => {
target.current?.focus();
});
const onEnter = (0, _hooks.useEventCallback)(node => {
setActive(true);
props.onEnter?.(node);
});
const onExit = (0, _hooks.useEventCallback)(node => {
setActive(false);
focusTarget();
props.onExit?.(node);
});
const onEntered = (0, _hooks.useEventCallback)(node => {
if (value) {
setFocusItemValue(value);
focusActiveNode();
}
props.onEntered?.(node);
});
return {
active,
focusItemValue,
setFocusItemValue,
triggerProps: {
onEnter,
onExit,
onEntered
}
};
}
var _default = exports.default = useFocusState;