'use client' import { useState, useTransition } from 'react' import { useRouter } from 'next/navigation' import { Loader2, Plus, Trash2, X } from 'lucide-react' import { toast } from 'sonner' import { Button } from '@/components/ui/button' import { Card, CardInhalt, CardKopf, CardTitel } from '@/components/ui/card' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Select } from '@/components/ui/select' import { Textarea } from '@/components/ui/textarea' import { PROJEKT_STATUS_NAME } from '@/lib/aufgabe' import { projektAendern, projektAnlegen, projektLoeschen, } from '@/server/aktionen/projekte' export type ProjektWerte = { id: string name: string beschreibung: string | null status: 'AKTIV' | 'PAUSIERT' | 'ABGESCHLOSSEN' | 'VERWORFEN' bereichId: string | null zielWert: string } const STATUS = ['AKTIV', 'PAUSIERT', 'ABGESCHLOSSEN', 'VERWORFEN'] as const type Eigenschaften = { projekt?: ProjektWerte bereiche: { id: string; name: string }[] /** Beim Anlegen: Formular erst auf Klick zeigen. */ einklappbar?: boolean onFertig?: () => void } export function ProjektFormular({ projekt, bereiche, einklappbar = false, onFertig, }: Eigenschaften) { const router = useRouter() const [laeuft, starte] = useTransition() const [felder, setFelder] = useState>({}) const [offen, setOffen] = useState(!einklappbar) const [loeschenBestaetigt, setLoeschenBestaetigt] = useState(false) function absenden(ereignis: React.FormEvent) { ereignis.preventDefault() const formular = ereignis.currentTarget const daten = new FormData(formular) starte(async () => { const antwort = projekt ? await projektAendern(projekt.id, daten) : await projektAnlegen(daten) if (antwort.ok) { setFelder({}) toast.success(antwort.meldung) if (!projekt) { formular.reset() if (einklappbar) setOffen(false) } router.refresh() onFertig?.() } else { setFelder(antwort.felder ?? {}) toast.error(antwort.fehler) } }) } function loeschen() { if (!projekt) return if (!loeschenBestaetigt) { setLoeschenBestaetigt(true) return } const daten = new FormData() daten.set('id', projekt.id) starte(async () => { const antwort = await projektLoeschen(daten) if (antwort.ok) { toast.success(antwort.meldung) router.push('/projekte') router.refresh() } else { toast.error(antwort.fehler) } }) } if (einklappbar && !offen) { return ( ) } const kennung = projekt?.id ?? 'neu' const formular = (
{felder.name &&

{felder.name}

}