"use client"; import { invoke } from "@tauri-apps/api/core"; import { emit } from "@tauri-apps/api/event"; import { useCallback, useState } from "react"; import { FiEdit2, FiPlus, FiTrash2, FiWifi } from "react-icons/fi"; import { toast } from "sonner"; import { DeleteConfirmationDialog } from "@/components/delete-confirmation-dialog"; import { ProxyFormDialog } from "@/components/proxy-form-dialog"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import { useProxyEvents } from "@/hooks/use-proxy-events"; import { trimName } from "@/lib/name-utils"; import type { StoredProxy } from "@/types"; import { RippleButton } from "./ui/ripple"; interface ProxyManagementDialogProps { isOpen: boolean; onClose: () => void; } export function ProxyManagementDialog({ isOpen, onClose, }: ProxyManagementDialogProps) { const [showProxyForm, setShowProxyForm] = useState(false); const [editingProxy, setEditingProxy] = useState(null); const [proxyToDelete, setProxyToDelete] = useState(null); const [isDeleting, setIsDeleting] = useState(false); const { storedProxies, proxyUsage, isLoading } = useProxyEvents(); const handleDeleteProxy = useCallback((proxy: StoredProxy) => { // Open in-app confirmation dialog setProxyToDelete(proxy); }, []); const handleConfirmDelete = useCallback(async () => { if (!proxyToDelete) return; setIsDeleting(true); try { await invoke("delete_stored_proxy", { proxyId: proxyToDelete.id }); toast.success("Proxy deleted successfully"); await emit("stored-proxies-changed"); } catch (error) { console.error("Failed to delete proxy:", error); toast.error("Failed to delete proxy"); } finally { setIsDeleting(false); setProxyToDelete(null); } }, [proxyToDelete]); const handleCreateProxy = useCallback(() => { setEditingProxy(null); setShowProxyForm(true); }, []); const handleEditProxy = useCallback((proxy: StoredProxy) => { setEditingProxy(proxy); setShowProxyForm(true); }, []); const handleProxyFormClose = useCallback(() => { setShowProxyForm(false); setEditingProxy(null); }, []); return ( <>
Proxy Management
{/* Header with Create Button */}

Stored Proxies

Manage your saved proxy configurations for reuse across profiles

Create Proxy
{/* Proxy List - Scrollable */}
{isLoading && (
)} {storedProxies.length === 0 && !isLoading ? (

No proxies configured

Create your first proxy configuration to get started

Create First Proxy
) : (
{storedProxies.map((proxy) => (
{proxy.name.length > 30 ? ( {trimName(proxy.name)} {proxy.name} ) : ( {proxy.name} )}
{proxyUsage[proxy.id] ?? 0}

Edit proxy

{(proxyUsage[proxy.id] ?? 0) > 0 ? (

Cannot delete: in use by{" "} {proxyUsage[proxy.id]} profile {proxyUsage[proxy.id] > 1 ? "s" : ""}

) : (

Delete proxy

)}
))}
)}
Close
setProxyToDelete(null)} onConfirm={handleConfirmDelete} title="Delete Proxy" description={`This action cannot be undone. This will permanently delete the proxy "${proxyToDelete?.name ?? ""}".`} confirmButtonText="Delete" isLoading={isDeleting} /> ); }