Skip to content

Commit f60fc31

Browse files
Copilotev-sc
andcommitted
Improve hover menu UX with delay before closing
Co-authored-by: ev-sc <4164774+ev-sc@users.noreply.github.com>
1 parent dbc1aa3 commit f60fc31

File tree

1 file changed

+26
-4
lines changed

1 file changed

+26
-4
lines changed

src/app/map/[id]/components/controls/ControlHoverMenu.tsx

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState } from "react";
1+
import { useState, useRef } from "react";
22
import {
33
DropdownMenu,
44
DropdownMenuContent,
@@ -17,18 +17,40 @@ export default function ControlHoverMenu({
1717
onDelete: () => void;
1818
}) {
1919
const [open, setOpen] = useState(false);
20+
const timeoutRef = useRef<NodeJS.Timeout | null>(null);
21+
22+
const handleMouseEnter = () => {
23+
if (timeoutRef.current) {
24+
clearTimeout(timeoutRef.current);
25+
timeoutRef.current = null;
26+
}
27+
setOpen(true);
28+
};
29+
30+
const handleMouseLeave = () => {
31+
// Add a small delay before closing to allow moving to menu
32+
timeoutRef.current = setTimeout(() => {
33+
setOpen(false);
34+
}, 150);
35+
};
2036

2137
return (
2238
<div
2339
className="relative w-full"
24-
onMouseEnter={() => setOpen(true)}
25-
onMouseLeave={() => setOpen(false)}
40+
onMouseEnter={handleMouseEnter}
41+
onMouseLeave={handleMouseLeave}
2642
>
2743
<DropdownMenu open={open} onOpenChange={setOpen}>
2844
<DropdownMenuTrigger asChild>
2945
<div className="w-full">{children}</div>
3046
</DropdownMenuTrigger>
31-
<DropdownMenuContent align="end" side="right" sideOffset={8}>
47+
<DropdownMenuContent
48+
align="end"
49+
side="right"
50+
sideOffset={8}
51+
onMouseEnter={handleMouseEnter}
52+
onMouseLeave={handleMouseLeave}
53+
>
3254
<DropdownMenuItem onClick={onEdit}>
3355
<PencilIcon size={12} />
3456
Rename

0 commit comments

Comments
 (0)