diff options
author | crupest <crupest@outlook.com> | 2021-06-30 18:18:04 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-06-30 18:18:04 +0800 |
commit | 979ad8556be3576b09e318c9e85ae0138ecf11ec (patch) | |
tree | 37cf6b3806b601e07e2a8cd7e073bc905d22ee25 /FrontEnd/src | |
parent | 6b5d88a6a1a3fe12721f3159a6837d3f41d69022 (diff) | |
download | timeline-979ad8556be3576b09e318c9e85ae0138ecf11ec.tar.gz timeline-979ad8556be3576b09e318c9e85ae0138ecf11ec.tar.bz2 timeline-979ad8556be3576b09e318c9e85ae0138ecf11ec.zip |
...
Diffstat (limited to 'FrontEnd/src')
-rw-r--r-- | FrontEnd/src/views/common/index.css | 2 | ||||
-rw-r--r-- | FrontEnd/src/views/common/menu/PopupMenu.css | 4 | ||||
-rw-r--r-- | FrontEnd/src/views/common/menu/PopupMenu.tsx | 32 |
3 files changed, 29 insertions, 9 deletions
diff --git a/FrontEnd/src/views/common/index.css b/FrontEnd/src/views/common/index.css index e2769fe4..cb1cccd4 100644 --- a/FrontEnd/src/views/common/index.css +++ b/FrontEnd/src/views/common/index.css @@ -1,4 +1,6 @@ :root {
+ --cru-background-color: #f8f9fa;
+
--cru-primary-color: rgb(255, 105, 0);
--cru-primary-l1-color: rgb(255, 120, 26);
--cru-primary-l2-color: rgb(255, 135, 51);
diff --git a/FrontEnd/src/views/common/menu/PopupMenu.css b/FrontEnd/src/views/common/menu/PopupMenu.css index 8465a1bb..8f8fd20e 100644 --- a/FrontEnd/src/views/common/menu/PopupMenu.css +++ b/FrontEnd/src/views/common/menu/PopupMenu.css @@ -1,3 +1,5 @@ .cru-popup-menu-menu-container {
-
+ border-radius: 5px;
+ border: var(--cru-primary-color) 1px solid;
+ background-color: var(--cru-background-color);
}
diff --git a/FrontEnd/src/views/common/menu/PopupMenu.tsx b/FrontEnd/src/views/common/menu/PopupMenu.tsx index 50f80a91..851f3bee 100644 --- a/FrontEnd/src/views/common/menu/PopupMenu.tsx +++ b/FrontEnd/src/views/common/menu/PopupMenu.tsx @@ -25,12 +25,24 @@ const PopupMenu: React.FC<PopupMenuProps> = ({ React.useState<HTMLDivElement | null>(null); const [popperElement, setPopperElement] = React.useState<HTMLDivElement | null>(null); - const [arrowElement, setArrowElement] = React.useState<HTMLDivElement | null>( - null - ); - const { styles, attributes } = usePopper(referenceElement, popperElement, { - modifiers: [{ name: "arrow", options: { element: arrowElement } }], - }); + const { styles, attributes } = usePopper(referenceElement, popperElement); + + React.useEffect(() => { + const handler = (event: MouseEvent): void => { + let element: HTMLElement | null = event.target as HTMLElement; + while (element) { + if (element == referenceElement || element == popperElement) { + return; + } + element = element.parentElement; + } + setShow(false); + }; + document.addEventListener("click", handler); + return () => { + document.removeEventListener("click", handler); + }; + }, [referenceElement, popperElement]); return ( <> @@ -52,8 +64,12 @@ const PopupMenu: React.FC<PopupMenuProps> = ({ style={styles.popper} {...attributes.popper} > - <Menu items={items} /> - <div ref={setArrowElement} style={styles.arrow} /> + <Menu + items={items} + onItemClicked={() => { + setShow(false); + }} + /> </div> ) : null} </> |