import { BarChart3, Check, Copy, Edit, Loader2, Play, Plus, Terminal, TestTube2, Trash2, } from "lucide-react"; import { useTranslation } from "react-i18next"; import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; interface ProviderActionsProps { isCurrent: boolean; isTesting?: boolean; isProxyTakeover?: boolean; onSwitch: () => void; onEdit: () => void; onDuplicate: () => void; onTest?: () => void; onConfigureUsage: () => void; onDelete: () => void; onOpenTerminal?: () => void; // 故障转移相关 isAutoFailoverEnabled?: boolean; isInFailoverQueue?: boolean; onToggleFailover?: (enabled: boolean) => void; } export function ProviderActions({ isCurrent, isTesting, isProxyTakeover = false, onSwitch, onEdit, onDuplicate, onTest, onConfigureUsage, onDelete, onOpenTerminal, // 故障转移相关 isAutoFailoverEnabled = false, isInFailoverQueue = false, onToggleFailover, }: ProviderActionsProps) { const { t } = useTranslation(); const iconButtonClass = "h-8 w-8 p-1"; // 故障转移模式下的按钮逻辑 const isFailoverMode = isAutoFailoverEnabled && onToggleFailover; // 处理主按钮点击 const handleMainButtonClick = () => { if (isFailoverMode) { // 故障转移模式:切换队列状态 onToggleFailover(!isInFailoverQueue); } else { // 普通模式:切换供应商 onSwitch(); } }; // 主按钮的状态和样式 const getMainButtonState = () => { if (isFailoverMode) { // 故障转移模式 if (isInFailoverQueue) { return { disabled: false, variant: "secondary" as const, className: "bg-blue-100 text-blue-600 hover:bg-blue-200 dark:bg-blue-900/50 dark:text-blue-400 dark:hover:bg-blue-900/70", icon: , text: t("failover.inQueue", { defaultValue: "已加入" }), }; } return { disabled: false, variant: "default" as const, className: "bg-blue-500 hover:bg-blue-600 dark:bg-blue-600 dark:hover:bg-blue-700", icon: , text: t("failover.addQueue", { defaultValue: "加入" }), }; } // 普通模式 if (isCurrent) { return { disabled: true, variant: "secondary" as const, className: "bg-gray-200 text-muted-foreground hover:bg-gray-200 hover:text-muted-foreground dark:bg-gray-700 dark:hover:bg-gray-700", icon: , text: t("provider.inUse"), }; } return { disabled: false, variant: "default" as const, className: isProxyTakeover ? "bg-emerald-500 hover:bg-emerald-600 dark:bg-emerald-600 dark:hover:bg-emerald-700" : "", icon: , text: t("provider.enable"), }; }; const buttonState = getMainButtonState(); return (
{onTest && ( )} {onOpenTerminal && ( )}
); }