import React, { useState, useEffect } from 'react'; import { Users, ChevronDown, Pencil } from 'lucide-react'; import AvatarPickerModal from './AvatarPickerModal'; const AdvisorStatusDropdown = ({ advisors, activeAdvisorIds = [], onToggleAdvisor, onSetActiveAdvisors, thinkingAdvisors, getAdvisorColors, isDark, }) => { const [isOpen, setIsOpen] = useState(false); const [hoveredId, setHoveredId] = useState(null); const [pickerAdvisor, setPickerAdvisor] = useState(null); useEffect(() => { const handleClickOutside = (event) => { if (isOpen && !event.target.closest('.advisor-status-dropdown')) { setIsOpen(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, [isOpen]); if (!advisors || typeof advisors !== 'object') { return null; } const advisorEntries = Object.entries(advisors); const allIds = advisorEntries.map(([id]) => id); const activeSet = new Set(activeAdvisorIds); const activeCount = allIds.filter((id) => activeSet.has(id)).length; const thinkingCount = Array.isArray(thinkingAdvisors) ? thinkingAdvisors.filter((id) => id !== 'system' && activeSet.has(id)).length : 0; const totalAdvisors = advisorEntries.length; const handleToggle = () => { setIsOpen(!isOpen); }; const handleCheckboxChange = (id, event) => { event.stopPropagation(); if (onToggleAdvisor) { onToggleAdvisor(id); } }; const selectAll = (event) => { event.stopPropagation(); if (onSetActiveAdvisors) { onSetActiveAdvisors([...allIds]); } }; const selectNone = (event) => { event.stopPropagation(); if (onSetActiveAdvisors && allIds.length > 0) { onSetActiveAdvisors([allIds[0]]); } }; return (
{pickerAdvisor && ( setPickerAdvisor(null)} /> )} {isOpen && (
Active advisors
Only checked advisors respond to your messages.
ยท
{advisorEntries.map(([id, advisor]) => { const IconComponent = advisor.icon; const colors = getAdvisorColors(id, isDark); const isThinking = Array.isArray(thinkingAdvisors) && thinkingAdvisors.includes(id); const isActive = activeSet.has(id); return (
{ if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); setPickerAdvisor({ id, name: advisor.name }); } }} onClick={() => setPickerAdvisor({ id, name: advisor.name })} onMouseEnter={() => setHoveredId(id)} onMouseLeave={() => setHoveredId(null)} > {advisor.avatarUrl ? {advisor.name} : } {hoveredId === id && (
)}
{advisor.name}
{advisor.description}
{!isActive ? (
Off
) : isThinking ? (
) : (
Ready
)}
); })}
)}
); }; export default AdvisorStatusDropdown;