/** TasksPanelContent — ADR-119 extracted from usePanelContent.tsx */ import React from 'react'; import { X, Search, Loader2, ListTodo, Plus, MessageSquare, ChevronDown } from 'lucide-react'; import { cn } from '@/shared/utils/cn'; import { TasksSourceInlineSelector } from '../../../TasksSourceInlineSelector'; import { getTaskRowTitle, getTaskRowField } from '../../../AIChatPanel.utils'; import type { PanelContentDeps } from './PanelContentTypes'; export function TasksPanelContent(d: PanelContentDeps) { type ConversationWithMeta = typeof d.conversations[number] & { metadata?: { boundRow?: { row_id: number; table_id: number } } }; return (
{d.tasksSource ? ( <>
{d.tasksSource.tableIcon || '\uD83D\uDCCB'} {d.tasksSource.tableName}
d.setTasksSearch(e.target.value)} placeholder="Поиск задач..." className="w-full pl-8 pr-3 py-1.5 text-xs rounded-lg bg-[var(--bg-tertiary)] border border-[var(--border-primary)] text-[var(--text-primary)] placeholder:text-[var(--text-tertiary)] focus:outline-none focus:ring-1 focus:ring-[var(--color-primary-500)]/30" /> {d.tasksSearch && ( )}
{d.isLoadingTasks ? (
) : d.taskRows.length === 0 ? (
Нет записей
) : d.filteredTaskRows.length === 0 && d.tasksSearch.trim() ? (
Ничего не найдено по запросу "{d.tasksSearch}"
) : ( d.filteredTaskRows.map(row => { const rowChats = (d.conversations as ConversationWithMeta[]).filter(c => c.metadata?.boundRow && c.metadata.boundRow.row_id === row.id && c.metadata.boundRow.table_id === d.tasksSource?.tableId ); const chatCount = rowChats.length; const isExpanded = d.expandedTaskChats === row.id; const rowTitle = getTaskRowTitle(row, d.tasksSource); const rowDesc = getTaskRowField(row, d.tasksSource?.descriptionColumn) as string | undefined; const statusVal = getTaskRowField(row, d.tasksSource?.statusColumn); const statusName = statusVal && d.taskStatusDict.length > 0 ? d.taskStatusDict.find(s => s.id === Number(statusVal))?.name || '' : ''; return (
#{row.id}
{rowTitle} {rowDesc &&

{String(rowDesc)}

} {statusName && {statusName}}
{isExpanded && chatCount > 1 && (
{rowChats.map(chat => ( ))}
)}
); }) )}
) : (

Источник не настроен

Выберите таблицу для задач

d.updateTasksSource(config)} onCancel={() => {}} showHeader={false} />
)}
); }