setSearchQuery(e.target.value)}
className="w-full px-4 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"
/>
setSelectedPriority(e.target.value || null)}
className="px-4 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"
>
Alle Prioritaeten
Kritisch
Hoch
Mittel
Niedrig
{(selectedCategory || selectedPriority || searchQuery) && (
{
setSelectedCategory(null)
setSelectedPriority(null)
setSearchQuery('')
}}
className="px-4 py-2 text-sm text-slate-600 hover:text-slate-900"
>
Filter zuruecksetzen
)}
{/* Backlog Items */}
{filteredItems.map((item) => {
const category = categories.find((c) => c.id === item.category)
const isExpanded = expandedItems.has(item.id)
const completedSubtasks = item.subtasks?.filter((st) => st.completed).length || 0
const totalSubtasks = item.subtasks?.length || 0
return (
toggleExpand(item.id)}
>
{/* Expand Icon */}
{/* Content */}
{item.title}
{priorityLabels[item.priority].label}
{item.description}
{category?.name}
{totalSubtasks > 0 && (
{completedSubtasks}/{totalSubtasks} Teilaufgaben
)}
{/* Status */}
{
e.stopPropagation()
updateItemStatus(item.id, e.target.value as BacklogItem['status'])
}}
onClick={(e) => e.stopPropagation()}
className={`px-3 py-1.5 rounded-lg text-sm font-medium border-0 cursor-pointer ${
statusLabels[item.status].color
}`}
>
{Object.entries(statusLabels).map(([value, { label }]) => (
{label}
))}
{/* Progress Bar for subtasks */}
{totalSubtasks > 0 && (
)}
{/* Expanded Subtasks */}
{isExpanded && item.subtasks && item.subtasks.length > 0 && (
)}
)
})}
{filteredItems.length === 0 && (
Keine Aufgaben gefunden. Versuche einen anderen Filter.
)}
{/* Info Box */}