Skip to content

Commit dee389b

Browse files
committed
fix(combobox): position menu with floating-ui to stop it jumping
1 parent da3cc0d commit dee389b

1 file changed

Lines changed: 7 additions & 6 deletions

File tree

packages/pluggableWidgets/combobox-web/src/components/ComboboxMenuWrapper.tsx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import classNames from "classnames";
22
import { UseComboboxPropGetters } from "downshift/typings";
3-
import { MouseEvent, PropsWithChildren, ReactElement, ReactNode } from "react";
4-
import { useMenuStyle } from "../hooks/useMenuStyle";
3+
import { CSSProperties, MouseEvent, PropsWithChildren, ReactElement, ReactNode, Ref } from "react";
54
import { NoOptionsPlaceholder } from "./Placeholder";
65

76
interface ComboboxMenuWrapperProps extends PropsWithChildren, Partial<UseComboboxPropGetters<string>> {
87
alwaysOpen?: boolean;
8+
floatingRef?: Ref<HTMLDivElement>;
9+
floatingStyles?: CSSProperties;
910
highlightedIndex?: number | null;
1011
isEmpty: boolean;
1112
isLoading: boolean;
@@ -32,6 +33,8 @@ export function ComboboxMenuWrapper(props: ComboboxMenuWrapperProps): ReactEleme
3233
const {
3334
alwaysOpen,
3435
children,
36+
floatingRef,
37+
floatingStyles,
3538
getMenuProps,
3639
highlightedIndex,
3740
isEmpty,
@@ -46,11 +49,9 @@ export function ComboboxMenuWrapper(props: ComboboxMenuWrapperProps): ReactEleme
4649
onScroll
4750
} = props;
4851

49-
const [ref, style] = useMenuStyle<HTMLDivElement>(isOpen);
50-
5152
return (
5253
<div
53-
ref={ref}
54+
ref={alwaysOpen ? undefined : floatingRef}
5455
className={classNames("widget-combobox-menu", { "widget-combobox-menu-hidden": !isOpen })}
5556
style={
5657
alwaysOpen
@@ -59,7 +60,7 @@ export function ComboboxMenuWrapper(props: ComboboxMenuWrapperProps): ReactEleme
5960
visibility: "visible",
6061
position: "relative"
6162
}
62-
: style
63+
: floatingStyles
6364
}
6465
data-overlay-content={isOpen || undefined}
6566
>

0 commit comments

Comments
 (0)