'use client' import React, { useState, useEffect, useCallback } from 'react' import { Portfolio, api, statusLabels } from './_components/PortfolioTypes' import { PortfolioCard } from './_components/PortfolioCard' import { CreatePortfolioModal } from './_components/CreatePortfolioModal' import { PortfolioDetailView } from './_components/PortfolioDetailView' export default function PortfolioPage() { const [portfolios, setPortfolios] = useState([]) const [loading, setLoading] = useState(true) const [showCreate, setShowCreate] = useState(false) const [selectedPortfolio, setSelectedPortfolio] = useState(null) const [filter, setFilter] = useState('all') const loadPortfolios = useCallback(async () => { setLoading(true) try { const data = await api('') const list = Array.isArray(data) ? data : (data.portfolios || []) setPortfolios(list) } catch (err) { console.error('Load portfolios error:', err) } finally { setLoading(false) } }, []) useEffect(() => { loadPortfolios() }, [loadPortfolios]) const handleDelete = async (id: string) => { if (!confirm('Portfolio wirklich loeschen?')) return try { await api(`/${id}`, { method: 'DELETE' }) setPortfolios(prev => prev.filter(p => p.id !== id)) } catch (err) { console.error('Delete error:', err) } } const filteredPortfolios = filter === 'all' ? portfolios : portfolios.filter(p => p.status === filter) if (selectedPortfolio) { return (
{ setSelectedPortfolio(null); loadPortfolios() }} onRefresh={() => { loadPortfolios().then(() => { const updated = portfolios.find(p => p.id === selectedPortfolio.id) if (updated) setSelectedPortfolio(updated) }) }} />
) } return (

KI-Portfolios

Verwaltung und Vergleich von Compliance-Portfolios

{/* Stats */}
{[ { label: 'Gesamt', value: portfolios.length, color: 'text-gray-900' }, { label: 'Aktiv', value: portfolios.filter(p => p.status === 'ACTIVE').length, color: 'text-green-600' }, { label: 'In Pruefung', value: portfolios.filter(p => p.status === 'REVIEW').length, color: 'text-yellow-600' }, { label: 'Genehmigt', value: portfolios.filter(p => p.status === 'APPROVED').length, color: 'text-purple-600' }, ].map(stat => (
{stat.value}
{stat.label}
))}
{/* Filter */}
{['all', 'DRAFT', 'ACTIVE', 'REVIEW', 'APPROVED'].map(f => ( ))}
{loading ? (
Portfolios werden geladen...
) : filteredPortfolios.length === 0 ? (

Keine Portfolios gefunden

) : (
{filteredPortfolios.map(p => ( ))}
)} {showCreate && ( setShowCreate(false)} onCreated={() => { setShowCreate(false); loadPortfolios() }} /> )}
) }