refactor(frontend): remove redundant 'Sync All' button from MCP panel
All MCP operations already auto-sync to live configs: - upsert_server() → sync_server_to_apps() - toggle_app() → sync_server_to_app() or remove_server_from_app() - delete_server() → remove_server_from_all_apps() The manual 'Sync All' button was redundant and could confuse users into thinking they need to manually sync after each change. Changes: - Remove 'Sync All' button from UnifiedMcpPanel header - Remove useSyncAllMcpServers hook - Remove handleSyncAll function and syncAllMutation state - Remove RefreshCw icon import - Remove sync-related i18n translations (en/zh) Note: Backend sync_all_mcp_servers command remains for potential future use (e.g., recovery tool), but is no longer exposed in UI.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
import React, { useMemo, useState } from "react";
|
import React, { useMemo, useState } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { Plus, Server, Check, RefreshCw } from "lucide-react";
|
import { Plus, Server, Check } from "lucide-react";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import {
|
import {
|
||||||
Dialog,
|
Dialog,
|
||||||
@@ -10,7 +10,7 @@ import {
|
|||||||
DialogTitle,
|
DialogTitle,
|
||||||
} from "@/components/ui/dialog";
|
} from "@/components/ui/dialog";
|
||||||
import { Checkbox } from "@/components/ui/checkbox";
|
import { Checkbox } from "@/components/ui/checkbox";
|
||||||
import { useAllMcpServers, useToggleMcpApp, useSyncAllMcpServers } from "@/hooks/useMcp";
|
import { useAllMcpServers, useToggleMcpApp } from "@/hooks/useMcp";
|
||||||
import type { McpServer } from "@/types";
|
import type { McpServer } from "@/types";
|
||||||
import type { AppId } from "@/lib/api/types";
|
import type { AppId } from "@/lib/api/types";
|
||||||
import McpFormModal from "./McpFormModal";
|
import McpFormModal from "./McpFormModal";
|
||||||
@@ -48,7 +48,6 @@ const UnifiedMcpPanel: React.FC<UnifiedMcpPanelProps> = ({
|
|||||||
const { data: serversMap, isLoading } = useAllMcpServers();
|
const { data: serversMap, isLoading } = useAllMcpServers();
|
||||||
const toggleAppMutation = useToggleMcpApp();
|
const toggleAppMutation = useToggleMcpApp();
|
||||||
const deleteServerMutation = useDeleteMcpServer();
|
const deleteServerMutation = useDeleteMcpServer();
|
||||||
const syncAllMutation = useSyncAllMcpServers();
|
|
||||||
|
|
||||||
// Convert serversMap to array for easier rendering
|
// Convert serversMap to array for easier rendering
|
||||||
const serverEntries = useMemo((): Array<[string, McpServer]> => {
|
const serverEntries = useMemo((): Array<[string, McpServer]> => {
|
||||||
@@ -110,17 +109,6 @@ const UnifiedMcpPanel: React.FC<UnifiedMcpPanelProps> = ({
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSyncAll = async () => {
|
|
||||||
try {
|
|
||||||
await syncAllMutation.mutateAsync();
|
|
||||||
toast.success(t("mcp.unifiedPanel.syncAllSuccess"));
|
|
||||||
} catch (error) {
|
|
||||||
toast.error(t("common.error"), {
|
|
||||||
description: String(error),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleCloseForm = () => {
|
const handleCloseForm = () => {
|
||||||
setIsFormOpen(false);
|
setIsFormOpen(false);
|
||||||
setEditingId(null);
|
setEditingId(null);
|
||||||
@@ -133,25 +121,10 @@ const UnifiedMcpPanel: React.FC<UnifiedMcpPanelProps> = ({
|
|||||||
<DialogHeader>
|
<DialogHeader>
|
||||||
<div className="flex items-center justify-between pr-8">
|
<div className="flex items-center justify-between pr-8">
|
||||||
<DialogTitle>{t("mcp.unifiedPanel.title")}</DialogTitle>
|
<DialogTitle>{t("mcp.unifiedPanel.title")}</DialogTitle>
|
||||||
<div className="flex gap-2">
|
<Button type="button" variant="mcp" onClick={handleAdd}>
|
||||||
<Button
|
<Plus size={16} />
|
||||||
type="button"
|
{t("mcp.unifiedPanel.addServer")}
|
||||||
variant="outline"
|
</Button>
|
||||||
size="sm"
|
|
||||||
onClick={handleSyncAll}
|
|
||||||
disabled={syncAllMutation.isPending}
|
|
||||||
>
|
|
||||||
<RefreshCw
|
|
||||||
size={16}
|
|
||||||
className={syncAllMutation.isPending ? "animate-spin" : ""}
|
|
||||||
/>
|
|
||||||
{t("mcp.unifiedPanel.syncAll")}
|
|
||||||
</Button>
|
|
||||||
<Button type="button" variant="mcp" onClick={handleAdd}>
|
|
||||||
<Plus size={16} />
|
|
||||||
{t("mcp.unifiedPanel.addServer")}
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
|
|
||||||
|
|||||||
@@ -59,12 +59,3 @@ export function useDeleteMcpServer() {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 同步所有启用的 MCP 服务器到各应用的 live 配置
|
|
||||||
*/
|
|
||||||
export function useSyncAllMcpServers() {
|
|
||||||
return useMutation({
|
|
||||||
mutationFn: () => mcpApi.syncAllServers(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -447,8 +447,6 @@
|
|||||||
"editServer": "Edit Server",
|
"editServer": "Edit Server",
|
||||||
"deleteServer": "Delete Server",
|
"deleteServer": "Delete Server",
|
||||||
"deleteConfirm": "Are you sure you want to delete server \"{{id}}\"? This action cannot be undone.",
|
"deleteConfirm": "Are you sure you want to delete server \"{{id}}\"? This action cannot be undone.",
|
||||||
"syncAll": "Sync All",
|
|
||||||
"syncAllSuccess": "All enabled servers have been synced to application configs",
|
|
||||||
"noServers": "No servers yet",
|
"noServers": "No servers yet",
|
||||||
"enabledApps": "Enabled Apps",
|
"enabledApps": "Enabled Apps",
|
||||||
"apps": {
|
"apps": {
|
||||||
|
|||||||
@@ -447,8 +447,6 @@
|
|||||||
"editServer": "编辑服务器",
|
"editServer": "编辑服务器",
|
||||||
"deleteServer": "删除服务器",
|
"deleteServer": "删除服务器",
|
||||||
"deleteConfirm": "确定要删除服务器 \"{{id}}\" 吗?此操作无法撤销。",
|
"deleteConfirm": "确定要删除服务器 \"{{id}}\" 吗?此操作无法撤销。",
|
||||||
"syncAll": "同步全部",
|
|
||||||
"syncAllSuccess": "已同步所有启用的服务器到各应用配置",
|
|
||||||
"noServers": "暂无服务器",
|
"noServers": "暂无服务器",
|
||||||
"enabledApps": "启用的应用",
|
"enabledApps": "启用的应用",
|
||||||
"apps": {
|
"apps": {
|
||||||
|
|||||||
Reference in New Issue
Block a user