Spaces:
Runtime error
Runtime error
File size: 2,438 Bytes
cd8bd0a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | "use client";
export interface FreeProxyRowData {
id: string;
source: string;
host: string;
port: number;
type: string;
countryCode: string | null;
qualityScore: number | null;
latencyMs: number | null;
anonymity: string | null;
inPool: boolean;
}
interface FreeProxyRowProps {
proxy: FreeProxyRowData;
selected: boolean;
onToggleSelect: (id: string) => void;
onAddToPool: (id: string) => void;
adding: boolean;
}
export default function FreeProxyRow({
proxy,
selected,
onToggleSelect,
onAddToPool,
adding,
}: FreeProxyRowProps) {
const qualityColor =
proxy.qualityScore == null
? "text-text-muted"
: proxy.qualityScore >= 80
? "text-emerald-400"
: proxy.qualityScore >= 50
? "text-yellow-400"
: "text-red-400";
return (
<tr className="border-b border-border/50 hover:bg-surface-alt/30 text-sm">
<td className="px-3 py-2">
<input
type="checkbox"
checked={selected}
onChange={() => onToggleSelect(proxy.id)}
className="rounded"
disabled={proxy.inPool}
aria-label={`Select ${proxy.host}:${proxy.port}`}
/>
</td>
<td className="px-3 py-2 text-text-muted text-xs">{proxy.source}</td>
<td className="px-3 py-2 font-mono text-xs">
{proxy.host}:{proxy.port}
</td>
<td className="px-3 py-2 uppercase text-xs">{proxy.type}</td>
<td className="px-3 py-2 text-xs">{proxy.countryCode || "—"}</td>
<td className={`px-3 py-2 text-xs font-semibold ${qualityColor}`}>
{proxy.qualityScore != null ? proxy.qualityScore : "—"}
</td>
<td className="px-3 py-2 text-xs">
{proxy.latencyMs != null ? `${proxy.latencyMs}ms` : "—"}
</td>
<td className="px-3 py-2">
{proxy.inPool ? (
<span className="px-2 py-0.5 rounded text-xs bg-emerald-500/15 text-emerald-400 border border-emerald-500/30">
in pool
</span>
) : (
<button
onClick={() => onAddToPool(proxy.id)}
disabled={adding}
aria-label={`Add ${proxy.host}:${proxy.port} to pool`}
className="px-2 py-0.5 rounded text-xs bg-primary/15 text-primary border border-primary/30 hover:bg-primary/25 disabled:opacity-50"
>
{adding ? "..." : "⊕"}
</button>
)}
</td>
</tr>
);
}
|