aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src/views/common/menu/PopupMenu.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'FrontEnd/src/views/common/menu/PopupMenu.tsx')
-rw-r--r--FrontEnd/src/views/common/menu/PopupMenu.tsx56
1 files changed, 51 insertions, 5 deletions
diff --git a/FrontEnd/src/views/common/menu/PopupMenu.tsx b/FrontEnd/src/views/common/menu/PopupMenu.tsx
index 0d447f09..50f80a91 100644
--- a/FrontEnd/src/views/common/menu/PopupMenu.tsx
+++ b/FrontEnd/src/views/common/menu/PopupMenu.tsx
@@ -1,17 +1,63 @@
+import classNames from "classnames";
import React from "react";
+import { usePopper } from "react-popper";
import Menu, { MenuItems } from "./Menu";
+import "./PopupMenu.css";
+
export interface PopupMenuProps {
items: MenuItems;
- children: React.ReactElement;
+ children?: React.ReactNode;
+ containerClassName?: string;
+ containerStyle?: React.CSSProperties;
}
-export const PopupMenu: React.FC<PopupMenuProps> = ({ items, children }) => {
+const PopupMenu: React.FC<PopupMenuProps> = ({
+ items,
+ children,
+ containerClassName,
+ containerStyle,
+}) => {
const [show, setShow] = React.useState<boolean>(false);
- const toggle = (): void => setShow(!show);
- // TODO:
+ const [referenceElement, setReferenceElement] =
+ 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 } }],
+ });
- return <Menu items={items} onItemClicked={() => setShow(false)} />;
+ return (
+ <>
+ <div
+ ref={setReferenceElement}
+ className={classNames(
+ "cru-popup-menu-trigger-container",
+ containerClassName
+ )}
+ style={containerStyle}
+ onClick={() => setShow(true)}
+ >
+ {children}
+ </div>
+ {show ? (
+ <div
+ ref={setPopperElement}
+ className="cru-popup-menu-menu-container"
+ style={styles.popper}
+ {...attributes.popper}
+ >
+ <Menu items={items} />
+ <div ref={setArrowElement} style={styles.arrow} />
+ </div>
+ ) : null}
+ </>
+ );
};
+
+export default PopupMenu;