import { useEffect, useRef, useState } from 'react';
import { Link, useNavigate } from 'react-router-dom';
import { api, fmtDate, imgUrl, personName } from '../api.js';
import StatusBadge from '../components/StatusBadge.jsx';
export default function Projects() {
const [projects, setProjects] = useState(null);
const [error, setError] = useState(null);
const dialog = useRef(null);
useEffect(() => {
api('GET', '/api/projects').then(setProjects).catch((e) => setError(e.message));
}, []);
return (
<>
P42 Projekte
Übersicht aller laufenden und abgeschlossenen Projekte.
{error && {error}
}
{!projects && !error && Lade Projekte …
}
{projects?.length === 0 && (
Noch keine Projekte. Leg mit „+ Neues Projekt“ das erste an.
)}
{projects?.length > 0 && (
{projects.map((p) => (
{p.cover
?
})
:
}
{p.title}
{p.description &&
{p.description}
}
Von {personName(p.createdBy)}
✎ {personName(p.updatedBy)} · {fmtDate(p.updatedAt)}
))}
)}
>
);
}
function NewProjectDialog({ ref }) {
const navigate = useNavigate();
const [title, setTitle] = useState('');
const [error, setError] = useState(null);
const [busy, setBusy] = useState(false);
async function submit(e) {
e.preventDefault();
setBusy(true);
setError(null);
try {
const project = await api('POST', '/api/projects', { title });
navigate(`/projekte/${project.id}?bearbeiten`);
} catch (err) {
setError(err.message);
setBusy(false);
}
}
return (
);
}