"use client"; import { useEffect, useState } from "react"; import { BookmarkPlus, Check, Loader2 } from "lucide-react"; import { Modal } from "@/components/ui/Modal"; /** * Aus dem offenen Projekt eine Vorlage machen. * * Bewusst hier und nicht in einer eigenen Verwaltungsseite: Vorlagen * entstehen aus einem Projekt, das sich bewaehrt hat. Sie von Grund auf zu * tippen kann man ueber die API, taeglich braucht das niemand. */ export function SaveTemplateDialog({ open, onClose, projectId, projectName, noteCount, taskCount, }: { open: boolean; onClose: () => void; projectId: string; projectName: string; noteCount: number; taskCount: number; }) { const [name, setName] = useState(""); const [description, setDescription] = useState(""); const [withNotes, setWithNotes] = useState(true); const [withTasks, setWithTasks] = useState(true); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); const [done, setDone] = useState(false); useEffect(() => { if (!open) return; setName(projectName); setDescription(""); setWithNotes(true); setWithTasks(true); setError(null); setDone(false); }, [open, projectName]); async function submit(event: React.FormEvent) { event.preventDefault(); setSaving(true); setError(null); try { const response = await fetch("/api/templates/from-project", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ projectId, name, description, withNotes, withTasks }), }); const payload = await response.json().catch(() => ({})); if (!response.ok) throw new Error(payload.error ?? "Speichern fehlgeschlagen."); setDone(true); // Kurz stehen lassen, damit die Bestaetigung ankommt. setTimeout(onClose, 900); } catch (caught) { setError(caught instanceof Error ? caught.message : String(caught)); } finally { setSaving(false); } } return (
setName(event.target.value)} maxLength={80} required autoFocus />
setDescription(event.target.value)} placeholder="z. B. Kleine Web-App mit Docker und CI" maxLength={280} />

Repositories gehen nicht mit. Eine Vorlage, die jedes neue Projekt an dasselbe Repository hängt, wäre eine Falle.

{error ? (

{error}

) : null}
); }