import { useEffect, useRef, useState } from "react"; import AddVariableModal from "./AddVariableModal"; import AddFileModal from "./AddFileModal"; import AddVolumeModal from "./AddVolumeModal"; import DeleteSandboxModal from "./DeleteSandboxModal"; import AddSecretModal from "./AddSecretModal"; import { Link } from "@tanstack/react-router"; import ExposePortModal from "./ExposePortModal"; type ContextMenuProps = { sandboxId: string; uri?: string; }; function ContextMenu({ sandboxId, uri }: ContextMenuProps) { const dropdownRef = useRef(null); const [open, setOpen] = useState(false); const [ isAddEnvironmentVariableModalOpen, setIsAddEnvironmentVariableModalOpen, ] = useState(false); const [isDeleteSandboxModalOpen, setIsDeleteSandboxModalOpen] = useState(false); const [isAddFileModalOpen, setIsAddFileModalOpen] = useState(false); const [isAddSecretModalOpen, setIsAddSecretModalOpen] = useState(false); const [isAddVolumeModalOpen, setIsAddVolumeModalOpen] = useState(false); const [isExposePortModalOpen, setIsExposePortModalOpen] = useState(false); useEffect(() => { if (!open) return; function handleClickOutside(event: MouseEvent) { if ( dropdownRef.current && !dropdownRef.current.contains(event.target as Node) ) { setOpen(false); } } document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, [open]); const onOpenContextMenu = (e: React.MouseEvent) => { e.stopPropagation(); setOpen(!open); }; const onAddFile = (e: React.MouseEvent) => { e.stopPropagation(); setOpen(false); setIsAddFileModalOpen(true); }; const onAddSecret = (e: React.MouseEvent) => { e.stopPropagation(); setOpen(false); setIsAddSecretModalOpen(true); }; const onAddVariable = (e: React.MouseEvent) => { e.stopPropagation(); setOpen(false); setIsAddEnvironmentVariableModalOpen(true); }; const onAddVolume = (e: React.MouseEvent) => { e.stopPropagation(); setOpen(false); setIsAddVolumeModalOpen(true); }; const onExposePort = (e: React.MouseEvent) => { e.stopPropagation(); setOpen(false); setIsExposePortModalOpen(true); }; const onDelete = (e: React.MouseEvent) => { e.stopPropagation(); setOpen(false); setIsDeleteSandboxModalOpen(true); }; return ( <>
setIsAddEnvironmentVariableModalOpen(false)} sandboxId={sandboxId} /> setIsAddFileModalOpen(false)} sandboxId={sandboxId} /> setIsAddVolumeModalOpen(false)} sandboxId={sandboxId} /> setIsAddSecretModalOpen(false)} sandboxId={sandboxId} /> setIsExposePortModalOpen(false)} sandboxId={sandboxId} /> setIsDeleteSandboxModalOpen(false)} sandboxId={sandboxId} /> ); } export default ContextMenu;