Dwinzo_dev/app/src/components/ui/FileMenu.tsx

55 lines
1.5 KiB
TypeScript
Raw Normal View History

import React, { useState, useEffect, useRef } from "react";
2025-03-25 06:17:41 +00:00
import RenameInput from "./inputs/RenameInput";
import { ArrowIcon } from "../icons/ExportCommonIcons";
import MenuBar from "./menu/menu";
import { ProjectIcon } from "../icons/HeaderIcons";
2025-03-25 06:17:41 +00:00
const FileMenu: React.FC = () => {
const [openMenu, setOpenMenu] = useState(false);
const containerRef = useRef<HTMLButtonElement>(null);
let clickTimeout: NodeJS.Timeout | null = null;
const handleClick = () => {
if (clickTimeout) return;
setOpenMenu((prev) => !prev);
clickTimeout = setTimeout(() => {
clickTimeout = null;
}, 800);
};
useEffect(() => {
const handleClickOutside = (event: MouseEvent) => {
if (
containerRef.current &&
!containerRef.current.contains(event.target as Node)
) {
setOpenMenu(false);
}
};
document.addEventListener("mousedown", handleClickOutside);
return () => document.removeEventListener("mousedown", handleClickOutside);
}, []);
2025-03-25 06:17:41 +00:00
return (
<button
className="project-dropdowm-container"
ref={containerRef}
onClick={handleClick}
>
2025-03-25 06:17:41 +00:00
<div className="project-name">
<div className="icon">
<ProjectIcon />
</div>
2025-03-25 06:17:41 +00:00
<RenameInput value="untitled" />
</div>
<div className="more-options-button">
<ArrowIcon />
{openMenu && <MenuBar setOpenMenu={setOpenMenu} />}
</div>
</button>
2025-03-25 06:17:41 +00:00
);
};
export default FileMenu;