import { useEffect, useMemo, useState } from "react"; import { Link, useParams } from "../../shared/router.jsx"; import { useDataProvider, useList, useOne } from "../../shared/hooks/dataHooks.js"; import { Alert } from "../../components/ui/alert"; import { Button } from "../../components/ui/button"; import { Card, CardContent } from "../../components/ui/card"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "../../components/ui/dialog"; import { Input } from "../../components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../components/ui/select"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "../../components/ui/table"; import { ConfirmDialog, DetailList, Field, PageHeader, PageState, StatusPill, conflictMessage } from "../../shared/ui/ui.jsx"; import { useTitle } from "../../shared/hooks/hooks.js"; const createInitial = { protocol: "socks5", host: "", port: "", username: "", password: "", expected_public_ip: "", expected_region: "", }; const healthText = { unchecked: "未检测", healthy: "健康", unhealthy: "不健康", disabled: "已停用", }; const protocolOptions = ["http", "https", "socks4", "socks5"].map((value) => ({ value, label: value, })); function ExitHealthPill({ exit }) { const known = Object.hasOwn(healthText, exit.health_status); const tone = exit.health_status === "healthy" ? "success" : exit.health_status === "disabled" ? "neutral" : exit.health_status === "unchecked" ? "warning" : "danger"; return ( ); } function ExitActions({ exit, busy, onAction, onEdit, onDelete }) { const disabled = busy; return (