import { useCallback } from 'react' import { Box } from '@mui/material' import { Inbox } from 'lucide-react' import type { AgentWorkItemFilters } from '../../provider/IAgentWorkItemProvider' import { useAgentWorkItems } from '../../hooks/useAgentWorkItems' import { useTeamAgents } from '../../hooks/useTeamAgents' import { useTeamStore } from '../../stores/teamStore' import { WorkItemCard } from './WorkItemCard' import { CardSkeleton, EmptyState, ErrorState } from '../ui' interface Props { filters: AgentWorkItemFilters emptyTitle: string emptyDescription: string } /** * Abstand zwischen zwei Vorgängen. Bewusst grosszügig: die Karten tragen kaum * noch Farbe, die Trennung übernimmt der Weissraum. */ const LIST_GAP = 2.5 export function WorkItemList({ filters, emptyTitle, emptyDescription }: Props) { const { data: items = [], isLoading, isError, refetch } = useAgentWorkItems(filters) const { data: agents = [] } = useTeamAgents() const selectedId = useTeamStore(s => s.selectedWorkItemId) const setSelectedId = useTeamStore(s => s.setSelectedWorkItemId) // Stabile Referenz, sonst greift React.memo auf WorkItemCard nicht (CLAUDE.md §10.3). const handleSelect = useCallback((id: string) => setSelectedId(id), [setSelectedId]) if (isLoading) { return ( ) } if (isError) { return refetch()} /> } if (items.length === 0) { return } title={emptyTitle} description={emptyDescription} /> } return ( {items.map((item) => ( a.id === item.agentId)} selected={item.id === selectedId} onSelect={handleSelect} /> ))} ) }