diff --git a/src/admin/AdminDashboard.tsx b/src/admin/AdminDashboard.tsx index add635f58..9d5684a8f 100644 --- a/src/admin/AdminDashboard.tsx +++ b/src/admin/AdminDashboard.tsx @@ -57,7 +57,15 @@ const AdminDashboard = () => { - {/* 🎉 Neue Galerie-Kachel */} + + + + Events verwalten +

Alle Events sehen und bearbeiten

+
+
+ + diff --git a/src/admin/EventsAdmin.tsx b/src/admin/EventsAdmin.tsx new file mode 100644 index 000000000..f3e692ed8 --- /dev/null +++ b/src/admin/EventsAdmin.tsx @@ -0,0 +1,152 @@ +import { useEffect, useState } from "react"; +import { Input } from "@/components/ui/input"; +import { Textarea } from "@/components/ui/textarea"; +import { Button } from "@/components/ui/button"; +import { Switch } from "@/components/ui/switch"; +import axios from "axios"; + +type Event = { + id?: number; + title: string; + description: string; + max_participants?: number; + fee?: number; + address?: string; + is_private: boolean; +}; + +const defaultEvent: Event = { + title: "", + description: "", + max_participants: undefined, + fee: undefined, + address: "", + is_private: false, +}; + +const EventsAdmin = () => { + const [events, setEvents] = useState([]); + const [form, setForm] = useState(defaultEvent); + const [isEditing, setIsEditing] = useState(false); + + const fetchEvents = async () => { + try { + const res = await axios.get("/api/events?showPrivate=true"); + if (Array.isArray(res.data)) { + setEvents(res.data); + } else { + console.warn("⚠️ Events-API hat kein Array geliefert:", res.data); + setEvents([]); + } + } catch (error) { + console.error("❌ Fehler beim Laden der Events:", error); + setEvents([]); + } + }; + + + useEffect(() => { + fetchEvents(); + }, []); + + const handleSubmit = async () => { + if (isEditing && form.id) { + await axios.put(`/api/events/${form.id}`, form); + } else { + await axios.post("/api/events", form); + } + setForm(defaultEvent); + setIsEditing(false); + fetchEvents(); + }; + + const handleDelete = async (id: number) => { + await axios.delete(`/api/events/${id}`); + fetchEvents(); + }; + + const handleEdit = (event: Event) => { + setForm(event); + setIsEditing(true); + }; + + return ( +
+

{isEditing ? "Event bearbeiten" : "Neues Event erstellen"}

+ +
+ setForm({ ...form, title: e.target.value })} + /> +