Skip to content

Commit d3cb7a4

Browse files
authored
fix: LEAP-1258: prevent dropdown from opening upward when viewport short (#6426)
1 parent 0ddb6cc commit d3cb7a4

File tree

8 files changed

+23
-6
lines changed

8 files changed

+23
-6
lines changed

web/libs/datamanager/src/components/Common/Dropdown/DropdownComponent.jsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,21 @@ export const Dropdown = React.forwardRef(({ animated = true, visible = false, ..
1717
const { triggerRef } = React.useContext(DropdownContext) ?? {};
1818
const isInline = triggerRef === undefined;
1919

20-
const { children, align } = props;
20+
const { children, align, openUpwardForShortViewport } = props;
2121
const [currentVisible, setVisible] = React.useState(visible);
2222
const [offset, setOffset] = React.useState({});
2323
const [visibility, setVisibility] = React.useState(visible ? "visible" : null);
2424

2525
const calculatePosition = React.useCallback(() => {
2626
const dropdownEl = dropdown.current;
2727
const parent = triggerRef?.current ?? dropdownEl.parentNode;
28-
const { left, top } = alignElements(parent, dropdownEl, align ?? "bottom-left");
28+
const { left, top } = alignElements(
29+
parent,
30+
dropdownEl,
31+
align ?? "bottom-left",
32+
0,
33+
openUpwardForShortViewport ?? true,
34+
);
2935

3036
setOffset({ left, top });
3137
}, [triggerRef]);

web/libs/datamanager/src/components/Common/FieldsButton.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ export const FieldsButton = injector(
7373
selected,
7474
tooltip,
7575
tooltipTheme = "dark",
76+
openUpwardForShortViewport = true,
7677
}) => {
7778
const content = [];
7879

@@ -102,6 +103,7 @@ export const FieldsButton = injector(
102103
maxHeight: 280,
103104
overflow: "auto",
104105
}}
106+
openUpwardForShortViewport={openUpwardForShortViewport}
105107
>
106108
{tooltip ? (
107109
<Elem name={"field-button"} style={{ zIndex: 1000 }}>

web/libs/datamanager/src/components/Common/FiltersPane.jsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,12 @@ export const FiltersPane = injector(
5858
}, [sidebarEnabled]);
5959

6060
return (
61-
<Dropdown.Trigger ref={dropdown} disabled={sidebarEnabled} content={<Filters />}>
61+
<Dropdown.Trigger
62+
ref={dropdown}
63+
disabled={sidebarEnabled}
64+
content={<Filters />}
65+
openUpwardForShortViewport={false}
66+
>
6267
<FiltersButton {...rest} size={size} />
6368
</Dropdown.Trigger>
6469
);

web/libs/datamanager/src/components/Common/Tabs/Tabs.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ export const TabsItem = ({
163163
{showMenu && (
164164
<Dropdown.Trigger
165165
align="bottom-left"
166+
openUpwardForShortViewport={false}
166167
content={
167168
<TabsMenu
168169
editable={tabIsEditable}

web/libs/datamanager/src/components/DataManager/Toolbar/ActionsButton.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ export const ActionsButton = injector(
154154
<Menu size="compact">{actionButtons}</Menu>
155155
)
156156
}
157+
openUpwardForShortViewport={false}
157158
disabled={!hasSelected}
158159
onToggle={(visible) => isFFLOPSE3 && setIsOpen(visible)}
159160
>

web/libs/datamanager/src/components/DataManager/Toolbar/OrderButton.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const OrderButton = injector(({ size, ordering, view, ...rest }) => {
4343
</div>
4444
</Space>
4545
)}
46+
openUpwardForShortViewport={false}
4647
/>
4748

4849
<Button

web/libs/datamanager/src/components/DataManager/Toolbar/instruments.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ export const instruments = {
9090
title={"Columns"}
9191
size={size}
9292
style={style}
93+
openUpwardForShortViewport={false}
9394
/>
9495
);
9596
},

web/libs/datamanager/src/utils/dom.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const positioner = (source, target) => {
2727
};
2828
};
2929

30-
export const alignElements = (elem, target, align, padding = 0) => {
30+
export const alignElements = (elem, target, align, padding = 0, openUpwardForShortViewport = true) => {
3131
let offsetLeft = 0;
3232
let offsetTop = 0;
3333

@@ -67,10 +67,10 @@ export const alignElements = (elem, target, align, padding = 0) => {
6767
break;
6868
}
6969

70-
if (offsetTop < window.scrollX) {
70+
if (offsetTop < window.scrollY) {
7171
offsetTop = pos.bottom + padding;
7272
resultAlign[0] = "bottom";
73-
} else if (offsetTop + pos.target.height > window.scrollX + window.innerHeight) {
73+
} else if (openUpwardForShortViewport && offsetTop + pos.target.height > window.scrollY + window.innerHeight) {
7474
offsetTop = pos.top - padding;
7575
resultAlign[0] = "top";
7676
}

0 commit comments

Comments
 (0)