Skip to main content
Glama
AgentDropdown.jsx3.37 kB
import React, { useState, useRef, useEffect } from 'react'; function AgentDropdown({ value, onChange, agents = [], disabled = false, className = '' }) { const [isOpen, setIsOpen] = useState(false); const [hoveredAgent, setHoveredAgent] = useState(null); const dropdownRef = useRef(null); // Find current agent const currentAgent = agents.find(a => a.name === value); // Close dropdown when clicking outside useEffect(() => { const handleClickOutside = (event) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target)) { setIsOpen(false); setHoveredAgent(null); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); const handleSelect = (agentName) => { onChange(agentName); setIsOpen(false); setHoveredAgent(null); }; return ( <div className="agent-dropdown-container" ref={dropdownRef}> <button className={`agent-dropdown-trigger ${className}`} onClick={(e) => { e.stopPropagation(); if (!disabled) { setIsOpen(!isOpen); } }} disabled={disabled} style={currentAgent?.color ? { backgroundColor: currentAgent.color, color: '#ffffff', borderColor: currentAgent.color } : {}} > <span className="agent-dropdown-value"> {value || 'No agent'} </span> <span className="agent-dropdown-arrow">▼</span> </button> {isOpen && ( <div className="agent-dropdown-menu"> <div className="agent-dropdown-option" onClick={() => handleSelect('')} onMouseEnter={() => setHoveredAgent(null)} > No agent </div> {agents.map((agent) => ( <div key={agent.name} className={`agent-dropdown-option ${value === agent.name ? 'selected' : ''}`} onClick={() => handleSelect(agent.name)} onMouseEnter={() => setHoveredAgent(agent)} onMouseLeave={() => setHoveredAgent(null)} style={agent.color ? { backgroundColor: agent.color, color: '#ffffff' } : {}} > {agent.name} </div> ))} </div> )} {hoveredAgent && ( <div className="agent-dropdown-tooltip"> <div className="agent-tooltip-header"> <strong>{hoveredAgent.name}</strong> {hoveredAgent.type && ( <span className="agent-type-badge">{hoveredAgent.type}</span> )} </div> {hoveredAgent.description && ( <div className="agent-tooltip-description"> {hoveredAgent.description} </div> )} {hoveredAgent.tools && hoveredAgent.tools.length > 0 && ( <div className="agent-tooltip-tools"> <strong>Tools:</strong> {hoveredAgent.tools.slice(0, 3).join(', ')} {hoveredAgent.tools.length > 3 && ` +${hoveredAgent.tools.length - 3} more`} </div> )} </div> )} </div> ); } export default AgentDropdown;

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cjo4m06/mcp-shrimp-task-manager'

If you have feedback or need assistance with the MCP directory API, please join our Discord server