const listRef = useRef<Array<HTMLElement | null>>([]);
const [activeIndex, setActiveIndex] = useState<number | null>(null);
const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions(
[
useRole(context, { role: 'listbox' }),
useDismiss(context, { escapeKey: true, outsidePress: false }),
useListNavigation(context, {
activeIndex,
listRef,
loop: true,
onNavigate: (index) => {
onNavigate?.();
setActiveIndex(index);
},
orientation: 'vertical',
virtual: true,
}),
],
);
useLayoutEffect(() => {
requestAnimationFrame(() => {
if (activeIndex !== null) {
listRef.current[activeIndex]?.scrollIntoView({ block: 'nearest' });
}
});
}, [activeIndex]);