'use client' import React, { useEffect, useState } from 'react' import { useRouter } from 'next/navigation' import { useSDK } from '@/lib/sdk' import type { ProjectInfo } from '@/lib/sdk/types' import { CreateProjectDialog, normalizeProject } from './CreateProjectDialog' import { ProjectActionDialog } from './ProjectActionDialog' import { ProjectCard } from './ProjectCard' export function ProjectSelector() { const router = useRouter() const { listProjects, archiveProject, restoreProject, permanentlyDeleteProject } = useSDK() const [projects, setProjects] = useState([]) const [archivedProjects, setArchivedProjects] = useState([]) const [loading, setLoading] = useState(true) const [showCreateDialog, setShowCreateDialog] = useState(false) const [actionTarget, setActionTarget] = useState(null) const [isProcessing, setIsProcessing] = useState(false) const [showArchived, setShowArchived] = useState(false) useEffect(() => { loadProjects() }, []) const loadProjects = async () => { setLoading(true) try { const result = await listProjects() const all = result.map(normalizeProject) setProjects(all.filter(p => p.status === 'active')) setArchivedProjects(all.filter(p => p.status === 'archived')) } catch (error) { console.error('Failed to load projects:', error) } finally { setLoading(false) } } const handleProjectClick = (project: ProjectInfo) => { router.push(`/sdk?project=${project.id}`) } const handleProjectCreated = (project: ProjectInfo) => { router.push(`/sdk?project=${project.id}`) } const handleArchive = async () => { if (!actionTarget) return setIsProcessing(true) try { await archiveProject(actionTarget.id) setProjects(prev => prev.filter(p => p.id !== actionTarget.id)) setArchivedProjects(prev => [...prev, { ...actionTarget, status: 'archived' as const }]) setActionTarget(null) } catch (error) { console.error('Failed to archive project:', error) } finally { setIsProcessing(false) } } const handlePermanentDelete = async () => { if (!actionTarget) return setIsProcessing(true) try { await permanentlyDeleteProject(actionTarget.id) setProjects(prev => prev.filter(p => p.id !== actionTarget.id)) setArchivedProjects(prev => prev.filter(p => p.id !== actionTarget.id)) setActionTarget(null) } catch (error) { console.error('Failed to delete project:', error) } finally { setIsProcessing(false) } } const handleRestore = async (project: ProjectInfo) => { try { await restoreProject(project.id) setArchivedProjects(prev => prev.filter(p => p.id !== project.id)) setProjects(prev => [...prev, { ...project, status: 'active' as const }]) } catch (error) { console.error('Failed to restore project:', error) } } return (
{/* Header */}

Ihre Projekte

Waehlen Sie ein Compliance-Projekt oder erstellen Sie ein neues.

{/* Loading */} {loading && (
)} {/* Empty State */} {!loading && projects.length === 0 && archivedProjects.length === 0 && (

Noch keine Projekte

Erstellen Sie Ihr erstes Compliance-Projekt, um mit der DSGVO- und AI-Act-Konformitaet zu beginnen.

)} {/* Active Projects */} {!loading && projects.length > 0 && (
{projects.map(project => ( handleProjectClick(project)} onDelete={() => setActionTarget(project)} /> ))}
)} {/* Archived Projects Section */} {!loading && archivedProjects.length > 0 && (
{showArchived && (
{archivedProjects.map(project => ( handleProjectClick(project)} onRestore={() => handleRestore(project)} onDelete={() => setActionTarget(project)} /> ))}
)}
)} {/* Create Dialog */} setShowCreateDialog(false)} onCreated={handleProjectCreated} existingProjects={projects} /> {/* Action Dialog (Archive / Delete) */} {actionTarget && ( setActionTarget(null)} isProcessing={isProcessing} /> )}
) }