"use client"; import { invoke } from "@tauri-apps/api/core"; import * as React from "react"; import { FiCheck } from "react-icons/fi"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import { formatRelativeTime } from "@/lib/flag-utils"; import type { ProxyCheckResult } from "@/types"; interface VpnCheckButtonProps { vpnId: string; vpnName: string; checkingVpnId: string | null; setCheckingVpnId: (id: string | null) => void; disabled?: boolean; } export function VpnCheckButton({ vpnId, vpnName, checkingVpnId, setCheckingVpnId, disabled = false, }: VpnCheckButtonProps) { const [result, setResult] = React.useState(); const handleCheck = React.useCallback(async () => { if (checkingVpnId === vpnId) return; setCheckingVpnId(vpnId); try { const checkResult = await invoke("check_vpn_validity", { vpnId, }); setResult(checkResult); if (checkResult.is_valid) { toast.success(`VPN "${vpnName}" configuration is valid`); } else { toast.error(`VPN "${vpnName}" configuration is invalid`); } } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); toast.error(`VPN check failed: ${errorMessage}`); setResult({ ip: "", timestamp: Math.floor(Date.now() / 1000), is_valid: false, }); } finally { setCheckingVpnId(null); } }, [vpnId, vpnName, checkingVpnId, setCheckingVpnId]); const isCurrentlyChecking = checkingVpnId === vpnId; return ( {isCurrentlyChecking ? (

Checking VPN config...

) : result?.is_valid ? (

Configuration valid

Checked {formatRelativeTime(result.timestamp)}

) : result && !result.is_valid ? (

Configuration invalid

Checked {formatRelativeTime(result.timestamp)}

) : (

Check VPN config validity

)}
); }