"use client"; import { useEffect, useRef, useState } from "react"; import { Button } from "@/shared/components"; import { useTranslations } from "next-intl"; import ProxyRegistryManager from "../ProxyRegistryManager"; import VercelRelayModal from "./VercelRelayModal"; import DenoRelayModal from "./DenoRelayModal"; import CloudflareRelayModal from "./CloudflareRelayModal"; export default function ProxyPoolTab() { const t = useTranslations("settings"); const [vercelModalOpen, setVercelModalOpen] = useState(false); const [denoModalOpen, setDenoModalOpen] = useState(false); const [cloudflareModalOpen, setCloudflareModalOpen] = useState(false); const [menuOpen, setMenuOpen] = useState(false); const menuRef = useRef(null); const showVercelRelay = process.env.NEXT_PUBLIC_VERCEL_RELAY_ENABLED !== "false"; const showDenoRelay = process.env.NEXT_PUBLIC_DENO_RELAY_ENABLED !== "false"; const showCloudflareRelay = process.env.NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED !== "false"; const showAnyRelay = showVercelRelay || showDenoRelay || showCloudflareRelay; // Close the dropdown on outside click — mirrors the upstream PR-1437 // grouped-button UX so adding more relay backends does not blow up the // toolbar horizontally. useEffect(() => { if (!menuOpen) return; const onMouseDown = (e: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(e.target as Node)) { setMenuOpen(false); } }; document.addEventListener("mousedown", onMouseDown); return () => document.removeEventListener("mousedown", onMouseDown); }, [menuOpen]); const handleVercelDeployed = (_poolProxyId: string, relayUrl: string) => { alert(`${t("vercelRelaySuccess")}: ${relayUrl}`); }; const handleCloudflareDeployed = (_poolProxyId: string, relayUrl: string) => { alert(`${t("cloudflareRelaySuccess")}: ${relayUrl}`); }; return (
{showAnyRelay && (
{menuOpen && (
{showVercelRelay && ( )} {showDenoRelay && ( )} {showCloudflareRelay && ( )}
)}
)} setVercelModalOpen(false)} onDeployed={handleVercelDeployed} /> setDenoModalOpen(false)} onDeployed={handleVercelDeployed} /> setCloudflareModalOpen(false)} onDeployed={handleCloudflareDeployed} />
); }