rsuite
Version:
A suite of react components
32 lines • 744 B
JavaScript
'use client';
import { useState } from 'react';
import { useEventCallback } from "../../internals/hooks/index.js";
function useFocusState(props) {
const {
target
} = 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);
});
return {
active,
focusItemValue,
setFocusItemValue,
triggerProps: {
onEnter,
onExit
}
};
}
export default useFocusState;