helloya20's picture
Upload 2345 files
f0743f4 verified
import { useState, useEffect, useRef } from 'react';
import { SquirclePlusIcon } from '@librechat/client';
import { useLocalize } from '~/hooks';
interface MCPIconProps {
icon?: string;
onIconChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
}
export default function MCPIcon({ icon, onIconChange }: MCPIconProps) {
const [previewUrl, setPreviewUrl] = useState('');
const fileInputRef = useRef<HTMLInputElement>(null);
const localize = useLocalize();
useEffect(() => {
if (icon) {
setPreviewUrl(icon);
} else {
setPreviewUrl('');
}
}, [icon]);
const handleClick = () => {
if (fileInputRef.current) {
fileInputRef.current.value = '';
fileInputRef.current.click();
}
};
return (
<div className="flex items-center gap-4">
<div
onClick={handleClick}
className="bg-token-surface-secondary dark:bg-token-surface-tertiary border-token-border-medium flex h-16 w-16 shrink-0 cursor-pointer items-center justify-center rounded-[1.5rem] border-2 border-dashed"
>
{previewUrl ? (
<img
src={previewUrl}
className="h-full w-full rounded-[1.5rem] object-cover"
alt="MCP Icon"
width="64"
height="64"
/>
) : (
<SquirclePlusIcon />
)}
</div>
<div className="flex flex-col gap-1">
<span className="token-text-secondary text-sm">
{localize('com_ui_icon')} {localize('com_ui_optional')}
</span>
<span className="token-text-tertiary text-xs">{localize('com_agents_mcp_icon_size')}</span>
</div>
<input
accept="image/png,.png,image/jpeg,.jpg,.jpeg,image/gif,.gif,image/webp,.webp"
multiple={false}
type="file"
style={{ display: 'none' }}
onChange={onIconChange}
ref={fileInputRef}
/>
</div>
);
}