"use client"; import { useEffect, useState } from "react"; import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; interface ProxySettings { enabled: boolean; proxy_type: string; host: string; port: number; username?: string; password?: string; } interface ProxySettingsDialogProps { isOpen: boolean; onClose: () => void; onSave: (proxySettings: ProxySettings) => void; initialSettings?: ProxySettings; browserType?: string; } export function ProxySettingsDialog({ isOpen, onClose, onSave, initialSettings, browserType, }: ProxySettingsDialogProps) { const [settings, setSettings] = useState({ enabled: initialSettings?.enabled ?? false, proxy_type: initialSettings?.proxy_type ?? "http", host: initialSettings?.host ?? "", port: initialSettings?.port ?? 8080, username: initialSettings?.username ?? "", password: initialSettings?.password ?? "", }); const [initialSettingsState, setInitialSettingsState] = useState({ enabled: false, proxy_type: "http", host: "", port: 8080, username: "", password: "", }); useEffect(() => { if (isOpen && initialSettings) { const newSettings = { enabled: initialSettings.enabled, proxy_type: initialSettings.proxy_type, host: initialSettings.host, port: initialSettings.port, username: initialSettings.username ?? "", password: initialSettings.password ?? "", }; setSettings(newSettings); setInitialSettingsState(newSettings); } else if (isOpen) { const defaultSettings = { enabled: false, proxy_type: "http", host: "", port: 80, username: "", password: "", }; setSettings(defaultSettings); setInitialSettingsState(defaultSettings); } }, [isOpen, initialSettings]); const handleSubmit = () => { onSave(settings); }; // Check if settings have changed const hasChanged = () => { return ( settings.enabled !== initialSettingsState.enabled || settings.proxy_type !== initialSettingsState.proxy_type || settings.host !== initialSettingsState.host || settings.port !== initialSettingsState.port || settings.username !== initialSettingsState.username || settings.password !== initialSettingsState.password ); }; // Helper to determine if proxy should be disabled for the selected browser const isProxyDisabled = browserType === "tor-browser"; // Update proxy enabled state when browser is tor-browser useEffect(() => { if (browserType === "tor-browser" && settings.enabled) { setSettings((prev) => ({ ...prev, enabled: false })); } }, [browserType, settings.enabled]); return ( { if (!open) { onClose(); } }} > Proxy Settings
{isProxyDisabled ? (

Tor Browser has its own built-in proxy system and doesn't support additional proxy configuration

) : ( <> { setSettings({ ...settings, enabled: checked as boolean }); }} /> )}
{settings.enabled && !isProxyDisabled && ( <>
{ setSettings({ ...settings, host: e.target.value }); }} placeholder="e.g. 127.0.0.1" />
{ setSettings({ ...settings, port: Number.parseInt(e.target.value, 10) || 0, }); }} placeholder="e.g. 8080" min="1" max="65535" />
{ setSettings({ ...settings, username: e.target.value }); }} placeholder="Proxy username" />
{ setSettings({ ...settings, password: e.target.value }); }} placeholder="Proxy password" />
)}
); }