import { useState } from 'react' import { useNavigate } from 'react-router-dom' import { X, Trash2 } from 'lucide-react' import type { Project } from '../types' import { LIST_COLOURS } from '../types' import { createProject, updateProject, deleteProject } from '../api' import { useProjects } from '../context/ProjectsContext' export default function ProjectEditor({ project, onClose }: { project: Project | null; onClose: () => void }) { const { reload } = useProjects() const navigate = useNavigate() const [name, setName] = useState(project?.name ?? '') const [description, setDescription] = useState(project?.description ?? '') const [colour, setColour] = useState(project?.colour ?? LIST_COLOURS[0]) const [busy, setBusy] = useState(false) const [error, setError] = useState(null) async function save() { if (!name.trim()) return setBusy(true); setError(null) try { if (project) { await updateProject(project.id, { name: name.trim(), description: description.trim() || null, colour }) await reload() onClose() } else { const created = await createProject({ name: name.trim(), description: description.trim() || undefined, colour }) await reload() navigate(`/project/${created.id}`) onClose() } } catch (e) { setError(e instanceof Error ? e.message : 'Save failed') setBusy(false) } } async function remove() { if (!project) return if (!confirm(`Delete "${project.name}"? Tasks inside it won't be deleted, they just lose their project.`)) return setBusy(true) try { await deleteProject(project.id) await reload() navigate('/projects') onClose() } catch (e) { setError(e instanceof Error ? e.message : 'Delete failed') setBusy(false) } } return (
e.stopPropagation()}>

{project ? 'Edit project' : 'New project'}

{error &&
{error}
}
setName(e.target.value)} onKeyDown={e => { if (e.key === 'Enter') save() }} placeholder="e.g. Refurb — Rooms 1-12" />