Skip to content

Commit 9d5aa2c

Browse files
committed
Context menu tweaks
1 parent fa14da3 commit 9d5aa2c

4 files changed

Lines changed: 20 additions & 14 deletions

File tree

src/ContextMenu/ContextMenu.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
11
.context-menu {
22
position: fixed;
3+
// Kind of hacky - we need the context menu to always
4+
// display on top of everything else. We could use the zIndex that's
5+
// stored in global state, but this is fine for now.
6+
// It will hit an issue in a very rare case, when window zindexes have
7+
// been switched enough and the bordered app hits or exceeds this number.
8+
z-index: 9999;
39
}

src/ContextMenu/ContextMenu.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useRef } from "react";
22
import MenuItems, { MenuItemProps } from "../components/MenuItems";
33
import "./ContextMenu.scss";
4-
import useDetectClickOutside from "../hooks/useDetectClickOutside";
4+
import useDetectMouseDownOutside from "../hooks/useDetectMouseDownOutside";
55

66
interface ContextMenuProps {
77
items: Array<MenuItemProps>;
@@ -12,7 +12,7 @@ interface ContextMenuProps {
1212
function ContextMenu({ items, position, close }: ContextMenuProps) {
1313
const elementRef = useRef<HTMLDivElement>(null);
1414

15-
useDetectClickOutside({ elementRef, onClick: close });
15+
useDetectMouseDownOutside({ elementRef, onMouseDown: close });
1616

1717
return (
1818
<div

src/components/BorderedApp/BorderedAppMenu/BorderedAppMenu.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useEffect, useRef, useState } from "react";
22
import "./BorderedAppMenu.scss";
3-
import useDetectClickOutside from "../../../hooks/useDetectClickOutside";
3+
import useDetectMouseDownOutside from "../../../hooks/useDetectMouseDownOutside";
44
import MenuItems, { MenuItemProps } from "../../MenuItems";
55

66
export interface BorderedAppMenuProps {
@@ -20,7 +20,7 @@ function BorderedAppMenu({ title, items }: BorderedAppMenuProps) {
2020
}, [elementRef]);
2121

2222
// Close the menu if an outside click occurs
23-
useDetectClickOutside({ elementRef, onClick: () => setOpen(false) });
23+
useDetectMouseDownOutside({ elementRef, onMouseDown: () => setOpen(false) });
2424

2525
return (
2626
<div
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useEffect } from "react";
22

3-
interface UseDetectClickOutsideProps<Element extends HTMLElement> {
3+
interface UseDetectMouseDownOutsideProps<Element extends HTMLElement> {
44
/**
55
* A reference to the top-most element./
66
* Clicks on any parents of this element will trigger the callback.
@@ -12,18 +12,18 @@ interface UseDetectClickOutsideProps<Element extends HTMLElement> {
1212
* The callback to be invoked when a click
1313
* has been detected outside
1414
*/
15-
onClick: () => void;
15+
onMouseDown: () => void;
1616
}
1717

1818
/**
1919
* Detects a click that has occurred outside of the specified element.
2020
*/
21-
function useDetectClickOutside<Element extends HTMLElement>({
21+
function useDetectMouseDownOutside<Element extends HTMLElement>({
2222
elementRef,
23-
onClick,
24-
}: UseDetectClickOutsideProps<Element>) {
23+
onMouseDown,
24+
}: UseDetectMouseDownOutsideProps<Element>) {
2525
useEffect(() => {
26-
function clickHandler(e: MouseEvent) {
26+
function handler(e: MouseEvent) {
2727
// If the element has been clicked on, we dont want to invoke the callback
2828
if (e.target === elementRef.current) return;
2929

@@ -34,13 +34,13 @@ function useDetectClickOutside<Element extends HTMLElement>({
3434
}
3535

3636
// Click must be outside, so invoke callback
37-
onClick();
37+
onMouseDown();
3838
}
3939

40-
window.addEventListener("click", clickHandler);
40+
window.addEventListener("mousedown", handler);
4141

42-
return () => window.removeEventListener("click", clickHandler);
42+
return () => window.removeEventListener("mousedown", handler);
4343
});
4444
}
4545

46-
export default useDetectClickOutside;
46+
export default useDetectMouseDownOutside;

0 commit comments

Comments
 (0)