"use client"; import { useRef, useState } from "react"; import { useRouter } from "next/navigation"; import Link from "next/link"; import { ArrowLeft, CalendarDays, CheckSquare, Download, ExternalLink, FileJson, FileText, Loader2, Pencil, Star, Trash2, } from "lucide-react"; import { ProjectDialog } from "@/components/ProjectDialog"; import { StatusSelect } from "@/components/StatusSelect"; import { Popover } from "@/components/ui/Popover"; import { repoTitle } from "@/lib/git/meta"; import { PRIORITY_META, accentOf } from "@/lib/status"; import { cn, formatDate } from "@/lib/utils"; import type { ConnectionSafe, ProjectDetail } from "@/types"; export function ProjectHeader({ project, connections, }: { project: ProjectDetail; connections: ConnectionSafe[]; }) { const router = useRouter(); const accent = accentOf(project.accent); const priority = PRIORITY_META[project.priority] ?? PRIORITY_META[2]; const [editOpen, setEditOpen] = useState(false); const [exportOpen, setExportOpen] = useState(false); const exportButtonRef = useRef(null); const [favorite, setFavorite] = useState(project.favorite); const [progress, setProgress] = useState(project.progress); const [deleting, setDeleting] = useState(false); async function patch(payload: Record) { await fetch(`/api/projects/${project.id}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload), }).catch(() => undefined); router.refresh(); } async function remove() { if ( !window.confirm( `„${project.name}“ mit allen Notizen unwiderruflich loeschen?`, ) ) { return; } setDeleting(true); const response = await fetch(`/api/projects/${project.id}`, { method: "DELETE" }); if (response.ok) { router.push("/"); router.refresh(); } else { setDeleting(false); } } return (
); }