import { useState, useEffect } from "react"; import api from "../api"; import { useAuth } from "../contexts/AuthContext"; export default function HelpRequests() { const { user } = useAuth(); const [requests, setRequests] = useState([]); const [showForm, setShowForm] = useState(false); const [form, setForm] = useState({ title: "", description: "", category: "autre", urgent: false, image: "" }); const [editingId, setEditingId] = useState(null); const [uploading, setUploading] = useState(false); const load = () => { api.get("/help").then((r) => setRequests(r.data)).catch(() => {}); }; useEffect(() => { load(); }, []); const handleDelete = async (id) => { if (!confirm("Supprimer cette demande ?")) return; try { await api.delete("/help/" + id); load(); } catch (err) { alert(err.response?.data?.error || "Erreur"); } }; const handleSubmit = async (e) => { e.preventDefault(); try { if (editingId) { await api.put("/help/" + editingId, form); } else { await api.post("/help", form); } setShowForm(false); setEditingId(null); setForm({ title: "", description: "", category: "autre", urgent: false, image: "" }); setEditingId(null); load(); } catch (err) { alert(err.response?.data?.error || "Erreur"); } }; const handleEdit = (r) => { setForm({ title: r.title, description: r.description, category: r.category, urgent: r.urgent === 1, image: r.image || "" }); setEditingId(r.id); setShowForm(true); }; const handleImageUpload = async (e) => { const file = e.target.files[0]; if (!file) return; setUploading(true); const fd = new FormData(); fd.append("file", file); try { const res = await api.post("/upload", fd, { headers: { "Content-Type": "multipart/form-data" } }); setForm({ ...form, image: res.data.url }); } catch (err) { alert("Erreur upload"); } setUploading(false); }; const categoryLabels = { course: "Courses", bricolage: "Bricolage", jardinage: "Jardinage", transport: "Transport", numerique: "Numérique", autre: "Autre" }; return (
Demander ou proposer de l'aide aux habitants
Aucune demande d'aide pour le moment.
) : ({r.description}