/** * AgentsPanel — extracted from AIChatPanel.renderAgentsPanel() * Displays a list of AI agents with search, favorites, and vector search. */ import React from 'react'; import { X, Search, Star, Loader2, Bot, Plus, MessageSquare, Brain } from 'lucide-react'; import { cn } from '@/shared/utils/cn'; import { logger } from '@/shared/utils/logger'; import type { AIAgent } from '../types'; type PanelTab = 'none' | 'contacts' | 'ai-agents' | 'tasks' | 'settings' | 'inbox'; export interface AgentsPanelProps { agentsSearch: string; setAgentsSearch: (value: string) => void; vectorSearchResults: unknown[] | null; setVectorSearchResults: (results: unknown[] | null) => void; showFavoriteAgents: boolean; setShowFavoriteAgents: (value: boolean) => void; handleVectorSearch: () => void; isVectorSearching: boolean; filteredAgents: AIAgent[]; isLoadingAgents: boolean; currentAgent: AIAgent | null; favoriteAgents: number[]; setFavoriteAgents: React.Dispatch>; handleAgentSelect: (agent: AIAgent) => void; clearMessages: () => void; setActivePanel: (panel: PanelTab) => void; currentSpace: { id: number } | null; createTablesMutation: { mutate: () => void; isPending: boolean; isError: boolean; }; } export function AgentsPanel({ agentsSearch, setAgentsSearch, vectorSearchResults, setVectorSearchResults, showFavoriteAgents, setShowFavoriteAgents, handleVectorSearch, isVectorSearching, filteredAgents, isLoadingAgents, currentAgent, favoriteAgents, setFavoriteAgents, handleAgentSelect, clearMessages, setActivePanel, currentSpace, createTablesMutation, }: AgentsPanelProps) { return (
{/* Toolbar: Search + Favorites + AI search */}
{/* Search input */}
{ setAgentsSearch(e.target.value); if (!e.target.value) setVectorSearchResults(null); }} placeholder="Поиск агентов..." className="w-full pl-7 pr-2 py-1.5 text-xs rounded-lg bg-[var(--bg-tertiary)] border border-[var(--border-secondary)] text-[var(--text-primary)] placeholder:text-[var(--text-tertiary)] focus:outline-none focus:ring-1 focus:ring-[var(--color-primary-500)]/50" /> {agentsSearch && ( )}
{/* Favorites toggle */} {/* AI search button */}
{/* Content */}
{filteredAgents.length === 0 ? ( agentsSearch ? (
Не найдено
) : isLoadingAgents ? ( /* Ticket #81428: Show spinner while agents are loading instead of "не настроены" */
Загрузка агентов...
) : (

AI агенты не настроены

Создайте AI таблицы в System Data для работы с агентами

{createTablesMutation.isError && (

Ошибка создания таблиц

)}
) ) : ( filteredAgents.map(agent => { const isFavorite = favoriteAgents.includes(agent.id); return (
{/* Agent row */}
{/* Favorite button */} {/* Clickable area for selecting agent */} {/* Action buttons - always visible with border */}
{/* New chat */}
); }) )}
); }