import { useState, useEffect, useCallback } from 'react' import type { Roadmap, RoadmapItem, RoadmapStats } from '../_types' import { itemStatusLabels } from '../_constants' import { api } from '../_api' import { RoadmapDetailHeader } from './RoadmapDetailHeader' import { RoadmapItemsTable } from './RoadmapItemsTable' import { CreateItemModal } from './CreateItemModal' export function RoadmapDetailView({ roadmap, onBack, onRefresh }: { roadmap: Roadmap onBack: () => void onRefresh: () => void }) { const [items, setItems] = useState([]) const [stats, setStats] = useState(null) const [loading, setLoading] = useState(true) const [showCreateItem, setShowCreateItem] = useState(false) const [filterStatus, setFilterStatus] = useState('all') const [filterPriority, setFilterPriority] = useState('all') const loadDetails = useCallback(async () => { setLoading(true) try { const [i, s] = await Promise.all([ api(`/${roadmap.id}/items`).catch(() => []), api(`/${roadmap.id}/stats`).catch(() => null), ]) const itemList = Array.isArray(i) ? i : ((i as { items: RoadmapItem[] }).items || []) setItems(itemList) setStats(s) } finally { setLoading(false) } }, [roadmap.id]) useEffect(() => { loadDetails() }, [loadDetails]) const handleStatusChange = async (itemId: string, newStatus: string) => { try { const res = await fetch(`/api/sdk/v1/roadmap-items/${itemId}/status`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ status: newStatus }), }) if (!res.ok) throw new Error(`HTTP ${res.status}`) loadDetails() } catch (err) { console.error('Status change error:', err) } } const handleDeleteItem = async (itemId: string) => { try { const res = await fetch(`/api/sdk/v1/roadmap-items/${itemId}`, { method: 'DELETE', headers: { 'Content-Type': 'application/json' }, }) if (!res.ok) throw new Error(`HTTP ${res.status}`) setItems(prev => prev.filter(i => i.id !== itemId)) } catch (err) { console.error('Delete item error:', err) } } const filteredItems = items.filter(i => { if (filterStatus !== 'all' && i.status !== filterStatus) return false if (filterPriority !== 'all' && i.priority !== filterPriority) return false return true }) return (
setShowCreateItem(true)} />
Status:
Prioritaet:
{loading ? (
Laden...
) : ( )} {showCreateItem && ( setShowCreateItem(false)} onCreated={() => { setShowCreateItem(false); loadDetails(); onRefresh() }} /> )}
) }