rsuite
Version:
A suite of react components
42 lines • 955 B
JavaScript
'use client';
import { useState } from 'react';
import { useEventCallback } from "../../internals/hooks/index.js";
function useFocusState(props) {
const {
target,
value,
focusActiveNode
} = props;
const [active, setActive] = useState(false);
const [focusItemValue, setFocusItemValue] = useState(null);
const focusTarget = useEventCallback(() => {
target.current?.focus();
});
const onEnter = useEventCallback(node => {
setActive(true);
props.onEnter?.(node);
});
const onExit = useEventCallback(node => {
setActive(false);
focusTarget();
props.onExit?.(node);
});
const onEntered = useEventCallback(node => {
if (value) {
setFocusItemValue(value);
focusActiveNode();
}
props.onEntered?.(node);
});
return {
active,
focusItemValue,
setFocusItemValue,
triggerProps: {
onEnter,
onExit,
onEntered
}
};
}
export default useFocusState;