Select: Fix scrolling virtualized menu on mobile (#90724)

pass select-menu innerRef to virtualized list
This commit is contained in:
Ashley Harrison 2024-07-22 14:27:50 +01:00 committed by GitHub
parent 95589ed091
commit dc30858e9d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,6 +1,6 @@
import { cx } from '@emotion/css';
import { max } from 'lodash';
import { RefCallback, useEffect, useMemo, useRef } from 'react';
import { RefCallback, useLayoutEffect, useMemo, useRef } from 'react';
import * as React from 'react';
import { MenuListProps } from 'react-select';
import { FixedSizeList as List } from 'react-window';
@ -52,6 +52,7 @@ const VIRTUAL_LIST_WIDTH_EXTRA = 36;
export const VirtualizedSelectMenu = ({
children,
maxHeight,
innerRef: scrollRef,
options,
focusedOption,
}: MenuListProps<SelectableValue>) => {
@ -71,7 +72,7 @@ export const VirtualizedSelectMenu = ({
const focusedIndex = flattenedOptions.findIndex(
(option: SelectableValue<unknown>) => option.value === focusedOption?.value
);
useEffect(() => {
useLayoutEffect(() => {
listRef.current?.scrollToItem(focusedIndex);
}, [focusedIndex]);
@ -111,6 +112,7 @@ export const VirtualizedSelectMenu = ({
return (
<List
outerRef={scrollRef}
ref={listRef}
className={styles.menu}
height={heightEstimate}