import React, { useEffect, useState } from "react"; import { api } from "../api/client"; import { styles } from "../styles/styles"; import { stylesTokens } from "../styles/theme"; import { createPortal } from "react-dom"; export default function AdminPanel() { const [users, setUsers] = useState([]); const [open, setOpen] = useState(false); const [displayName, setDisplayName] = useState(""); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [role, setRole] = useState("user"); const [msg, setMsg] = useState(""); useEffect(() => { if (!open) return; const prev = document.body.style.overflow; document.body.style.overflow = "hidden"; return () => { document.body.style.overflow = prev; }; }, [open]); const loadUsers = async () => { const u = await api("/admin/users"); setUsers(u); }; useEffect(() => { loadUsers().catch(() => {}); }, []); const resetForm = () => { setDisplayName(""); setEmail(""); setPassword(""); setRole("user"); }; const createUser = async () => { setMsg(""); try { await api("/admin/users", { method: "POST", body: JSON.stringify({ display_name: displayName, email, password, role }), }); setMsg("✅ User erstellt."); await loadUsers(); resetForm(); setOpen(false); } catch (e) { setMsg("❌ Fehler: " + (e?.message || "unknown")); } }; const deleteUser = async (u) => { if (!window.confirm(`User wirklich löschen (deaktivieren)?\n\n${u.display_name || u.email}`)) return; try { await api(`/admin/users/${u.id}`, { method: "DELETE" }); await loadUsers(); } catch (e) { alert("Fehler: " + (e?.message || "unknown")); } }; const closeModal = () => { setOpen(false); setMsg(""); }; return (