diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 45e91de..86383ee 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -61,6 +61,7 @@ export default function App() { const [chipOpen, setChipOpen] = useState(false); const [chipEntry, setChipEntry] = useState(null); const [userMenuOpen, setUserMenuOpen] = useState(false); + const [adminOpen, setAdminOpen] = useState(false); const [pwOpen, setPwOpen] = useState(false); const [pw1, setPw1] = useState(""); @@ -689,11 +690,15 @@ export default function App() { openPwModal={openPwModal} openDesignModal={openDesignModal} openStatsModal={openStatsModal} + openAdminPanel={() => { + setAdminOpen(true); + setUserMenuOpen(false); + }} doLogout={doLogout} onOpenNewGame={() => setNewGameOpen(true)} /> - {me.role === "admin" && } + setAdminOpen(false)} /> { - if (!open) return; + if (!dashboardOpen && !userModalOpen) return; const prev = document.body.style.overflow; document.body.style.overflow = "hidden"; @@ -23,7 +23,14 @@ export default function AdminPanel() { return () => { document.body.style.overflow = prev; }; - }, [open]); + }, [dashboardOpen, userModalOpen]); + + useEffect(() => { + if (!dashboardOpen) { + setUserModalOpen(false); + setMsg(""); + } + }, [dashboardOpen]); const loadUsers = async () => { const u = await api("/admin/users"); @@ -51,7 +58,7 @@ export default function AdminPanel() { setMsg("✅ User erstellt."); await loadUsers(); resetForm(); - setOpen(false); + setUserModalOpen(false); } catch (e) { setMsg("❌ Fehler: " + (e?.message || "unknown")); } @@ -68,17 +75,29 @@ export default function AdminPanel() { }; const closeModal = () => { - setOpen(false); + setUserModalOpen(false); setMsg(""); }; - return ( -
+ if (!dashboardOpen) return null; + + return createPortal( +
+
e.stopPropagation()} + > +
Admin Dashboard
- + +
@@ -125,7 +144,7 @@ export default function AdminPanel() { ))}
- {open && + {userModalOpen && createPortal(
e.stopPropagation()}> @@ -200,6 +219,9 @@ export default function AdminPanel() { document.body ) } -
+
+
+
, + document.body ); } diff --git a/frontend/src/components/TopBar.jsx b/frontend/src/components/TopBar.jsx index b0bfcb7..032d624 100644 --- a/frontend/src/components/TopBar.jsx +++ b/frontend/src/components/TopBar.jsx @@ -9,10 +9,13 @@ export default function TopBar({ openPwModal, openDesignModal, openStatsModal, + openAdminPanel, doLogout, onOpenNewGame, }) { const displayName = me ? ((me.display_name || "").trim() || me.email) : ""; + const isAdmin = me?.role === "admin"; + const roleLabel = isAdmin ? "Admin" : "User"; return (
@@ -31,8 +34,8 @@ export default function TopBar({ style={styles.userBtn} title="User Menü" > - 👤 - User + {isAdmin ? "🛡️" : "👤"} + {roleLabel} @@ -60,6 +63,21 @@ export default function TopBar({ Statistik + {isAdmin && ( + <> +
+ + + )} +