"use client"; import { invoke } from "@tauri-apps/api/core"; import { useCallback, useEffect, useState } from "react"; import { FiEdit2, FiPlus, FiTrash2, FiWifi } from "react-icons/fi"; import { toast } from "sonner"; import { ProxyFormDialog } from "@/components/proxy-form-dialog"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import type { StoredProxy } from "@/types"; interface ProxyManagementDialogProps { isOpen: boolean; onClose: () => void; } export function ProxyManagementDialog({ isOpen, onClose, }: ProxyManagementDialogProps) { const [storedProxies, setStoredProxies] = useState([]); const [loading, setLoading] = useState(false); const [showProxyForm, setShowProxyForm] = useState(false); const [editingProxy, setEditingProxy] = useState(null); const loadStoredProxies = useCallback(async () => { try { setLoading(true); const proxies = await invoke("get_stored_proxies"); setStoredProxies(proxies); } catch (error) { console.error("Failed to load stored proxies:", error); toast.error("Failed to load proxies"); } finally { setLoading(false); } }, []); useEffect(() => { if (isOpen) { loadStoredProxies(); } }, [isOpen, loadStoredProxies]); const handleDeleteProxy = useCallback(async (proxy: StoredProxy) => { if ( !confirm(`Are you sure you want to delete the proxy "${proxy.name}"?`) ) { return; } try { await invoke("delete_stored_proxy", { proxyId: proxy.id }); setStoredProxies((prev) => prev.filter((p) => p.id !== proxy.id)); toast.success("Proxy deleted successfully"); } catch (error) { console.error("Failed to delete proxy:", error); toast.error("Failed to delete proxy"); } }, []); const handleCreateProxy = useCallback(() => { setEditingProxy(null); setShowProxyForm(true); }, []); const handleEditProxy = useCallback((proxy: StoredProxy) => { setEditingProxy(proxy); setShowProxyForm(true); }, []); const handleProxySaved = useCallback((savedProxy: StoredProxy) => { setStoredProxies((prev) => { const existingIndex = prev.findIndex((p) => p.id === savedProxy.id); if (existingIndex >= 0) { // Update existing proxy const updated = [...prev]; updated[existingIndex] = savedProxy; return updated; } else { // Add new proxy return [...prev, savedProxy]; } }); setShowProxyForm(false); setEditingProxy(null); }, []); const handleProxyFormClose = useCallback(() => { setShowProxyForm(false); setEditingProxy(null); }, []); const trimName = useCallback((name: string) => { return name.length > 30 ? `${name.substring(0, 30)}...` : name; }, []); return ( <>
Proxy Management
{/* Header with Create Button */}

Stored Proxies

Manage your saved proxy configurations for reuse across profiles

{/* Proxy List - Scrollable */}
{loading ? (

Loading proxies...

) : storedProxies.length === 0 ? (

No proxies configured

Create your first proxy configuration to get started

) : (
{storedProxies.map((proxy) => (
{proxy.name.length > 30 ? ( {trimName(proxy.name)} {proxy.name} ) : ( {proxy.name} )}

Edit proxy

Delete proxy

))}
)}
); }