From c8dffd3f0730721b9306ed4892a98cb17c217578 Mon Sep 17 00:00:00 2001 From: Dustin Healy <54083382+dustinhealy@users.noreply.github.com> Date: Mon, 5 Jan 2026 22:42:57 -0800 Subject: [PATCH] refactor: dry out renderIcon to renderMCPIcon reusable component --- .../src/components/MCP/MCPServerMenuItem.tsx | 33 +++------- client/src/components/MCP/StackedMCPIcons.tsx | 32 +++------- client/src/components/MCP/mcpServerUtils.ts | 2 +- client/src/components/MCP/renderMCPIcon.tsx | 60 +++++++++++++++++++ .../SidePanel/MCPBuilder/MCPServerCard.tsx | 35 +++-------- client/src/components/Tools/MCPToolItem.tsx | 37 ++++-------- 6 files changed, 98 insertions(+), 101 deletions(-) create mode 100644 client/src/components/MCP/renderMCPIcon.tsx diff --git a/client/src/components/MCP/MCPServerMenuItem.tsx b/client/src/components/MCP/MCPServerMenuItem.tsx index f3a02d7e34..c37381ed3c 100644 --- a/client/src/components/MCP/MCPServerMenuItem.tsx +++ b/client/src/components/MCP/MCPServerMenuItem.tsx @@ -1,16 +1,15 @@ import * as Ariakit from '@ariakit/react'; import { Check } from 'lucide-react'; -import { MCPIcon } from '@librechat/client'; import type { MCPServerDefinition } from '~/hooks/MCP/useMCPServerManager'; import type { MCPServerStatusIconProps } from './MCPServerStatusIcon'; import MCPServerStatusIcon from './MCPServerStatusIcon'; -import ClickHouseIcon from './ClickHouseIcon'; import { getStatusColor, getStatusTextKey, shouldShowActionButton, type ConnectionStatusMap, } from './mcpServerUtils'; +import { renderMCPIcon } from './renderMCPIcon'; import { useLocalize } from '~/hooks'; import { cn } from '~/utils'; @@ -41,28 +40,6 @@ export default function MCPServerMenuItem({ // Include status in aria-label so screen readers announce it const accessibleLabel = `${displayName}, ${statusText}`; - const renderIcon = () => { - if (server.config?.iconPath) { - return ( - {displayName} - ); - } - - if (server.serverName.toLowerCase().includes('clickhouse')) { - return ; - } - - return ( -
- -
- ); - }; - return ( {/* Server Icon with Status Dot */}
- {renderIcon()} + {renderMCPIcon({ + iconPath: server.config?.iconPath, + serverName: server.serverName, + displayName, + className: 'h-8 w-8 rounded-lg object-cover', + wrapDefault: true, + })} {/* Status dot - decorative, status is announced via aria-label on MenuItem */}