22 lines
619 B
TypeScript
22 lines
619 B
TypeScript
import type React from 'react';
|
|
import type { VirtuosoHandle } from 'react-virtuoso';
|
|
|
|
const selectChild = (index: number, handle: React.RefObject<VirtuosoHandle>, node: ParentNode = document) => {
|
|
const selector = `[data-index="${index}"] .focusable`;
|
|
const element = node.querySelector<HTMLDivElement>(selector);
|
|
|
|
if (element) {
|
|
element.focus({ preventScroll: false });
|
|
} else {
|
|
handle.current?.scrollIntoView({
|
|
index,
|
|
behavior: 'smooth',
|
|
done: () => {
|
|
if (!element) document.querySelector<HTMLDivElement>(selector)?.focus();
|
|
},
|
|
});
|
|
}
|
|
};
|
|
|
|
export { selectChild };
|