Skip to content

Commit f2fab8c

Browse files
Scott DoverScott Dover
authored andcommitted
wip: fix menu float positions
Signed-off-by: Scott Dover <[email protected]>
1 parent ac86748 commit f2fab8c

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

client/src/webview/ColumnHeaderMenu.tsx

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Fragment, useRef, useState } from "react";
1+
import { Fragment, useEffect, useRef, useState } from "react";
22

33
import { AgColumn } from "ag-grid-community";
44

@@ -27,14 +27,16 @@ const GridMenu = ({
2727
menuItems,
2828
theme,
2929
top,
30-
left,
30+
left: incomingLeft,
3131
subMenu,
32+
subtractWidthFromLeft,
3233
}: {
3334
menuItems: (MenuItem | string)[];
3435
theme: string;
3536
top: number;
3637
left: number;
3738
subMenu?: boolean;
39+
subtractWidthFromLeft?: boolean;
3840
}) => {
3941
const menuRef = useRef<HTMLDivElement>(undefined);
4042
const [subMenuItems, setSubMenuItems] = useState<(MenuItem | string)[]>([]);
@@ -43,22 +45,41 @@ const GridMenu = ({
4345
: `ag-menu ag-column-menu ag-ltr ag-popup-child ag-popup-positioned-under ${theme}`;
4446
const [activeIndex, setActiveIndex] = useState(-1);
4547

48+
const [offset, setOffset] = useState(0);
49+
const [left, setLeft] = useState(incomingLeft);
50+
useEffect(() => {
51+
const w = menuRef.current.getBoundingClientRect().width;
52+
const cw = menuRef.current.closest("body").clientWidth;
53+
if (subtractWidthFromLeft) {
54+
setLeft(incomingLeft - w);
55+
return;
56+
}
57+
if (left + w > cw) {
58+
setOffset(left + w - cw + 15);
59+
}
60+
}, []);
61+
4662
return (
4763
<Fragment>
4864
{subMenuItems.length > 0 && (
4965
<GridMenu
5066
menuItems={subMenuItems}
5167
theme={theme}
5268
top={top}
53-
left={left + menuRef.current.getBoundingClientRect().width}
69+
left={
70+
offset === 0
71+
? left + menuRef.current.getBoundingClientRect().width
72+
: left - offset
73+
}
74+
subtractWidthFromLeft={offset !== 0}
5475
subMenu
5576
/>
5677
)}
5778
<div className="ag-theme-sas ag-popup">
5879
<div
5980
className={className}
6081
role="presentation"
61-
style={{ top, left }}
82+
style={{ top, left: left - offset }}
6283
ref={menuRef}
6384
>
6485
<div className="ag-menu-list ag-focus-managed" role="menu">

0 commit comments

Comments
 (0)