From 3930822268469baa079e0620bc00a6524ffe9ec8 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Fri, 25 Dec 2020 10:59:56 +0300 Subject: [PATCH] Allowing to open menu by contextmenu event Signed-off-by: Alex Andreev --- src/renderer/components/menu/menu.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/renderer/components/menu/menu.tsx b/src/renderer/components/menu/menu.tsx index db2b4ed195..bcc1eb9196 100644 --- a/src/renderer/components/menu/menu.tsx +++ b/src/renderer/components/menu/menu.tsx @@ -31,6 +31,7 @@ export interface MenuProps { closeOnScroll?: boolean; // applicable when usePortal={true} position?: MenuPosition; // applicable when usePortal={false} children?: ReactNode; + toggleEvent?: "click" | "contextmenu"; } interface State { @@ -44,6 +45,7 @@ const defaultPropsMenu: Partial = { closeOnClickItem: true, closeOnClickOutside: true, closeOnScroll: false, + toggleEvent: "click" }; @autobind() @@ -72,18 +74,19 @@ export class Menu extends React.Component { this.opener = document.getElementById(this.props.htmlFor); // might not exist in sub-menus if (this.opener) { - this.opener.addEventListener("click", this.toggle); + this.opener.addEventListener(this.props.toggleEvent, this.toggle); this.opener.addEventListener("keydown", this.onKeyDown); } this.elem.addEventListener("keydown", this.onKeyDown); window.addEventListener("resize", this.onWindowResize); window.addEventListener("click", this.onClickOutside, true); window.addEventListener("scroll", this.onScrollOutside, true); + window.addEventListener("contextmenu", this.onContextMenu, true); } componentWillUnmount() { if (this.opener) { - this.opener.removeEventListener("click", this.toggle); + this.opener.removeEventListener(this.props.toggleEvent, this.toggle); this.opener.removeEventListener("keydown", this.onKeyDown); } this.elem.removeEventListener("keydown", this.onKeyDown); @@ -198,6 +201,10 @@ export class Menu extends React.Component { } } + onContextMenu() { + this.close(); + } + onWindowResize() { if (!this.isOpen) return; this.refreshPosition();