zustand auf server wiederhergestellt
This commit is contained in:
@@ -4,10 +4,10 @@ import { getServers, getAllDisplaySettings } from '../api'
|
||||
import { useUser } from '../context/UserContext'
|
||||
import ServerCard from '../components/ServerCard'
|
||||
import UserManagement from '../components/UserManagement'
|
||||
import LoginModal from '../components/LoginModal'
|
||||
import ActivityLog from '../components/ActivityLog'
|
||||
import LoginModal from '../components/LoginModal'
|
||||
|
||||
export default function Dashboard({ onLogin, onLogout }) {
|
||||
export default function Dashboard({ onLogout }) {
|
||||
const navigate = useNavigate()
|
||||
const { user, token, loading: userLoading, isSuperadmin, role } = useUser()
|
||||
const [servers, setServers] = useState([])
|
||||
@@ -15,10 +15,12 @@ export default function Dashboard({ onLogin, onLogout }) {
|
||||
const [loading, setLoading] = useState(true)
|
||||
const [error, setError] = useState('')
|
||||
const [showUserMgmt, setShowUserMgmt] = useState(false)
|
||||
const [showLogin, setShowLogin] = useState(false)
|
||||
const [showActivityLog, setShowActivityLog] = useState(false)
|
||||
const [showLogin, setShowLogin] = useState(false)
|
||||
const [mobileMenuOpen, setMobileMenuOpen] = useState(false)
|
||||
|
||||
const isGuest = user?.isGuest || role === 'guest'
|
||||
|
||||
const isAuthenticated = !!token
|
||||
|
||||
const fetchServers = async () => {
|
||||
@@ -93,39 +95,53 @@ export default function Dashboard({ onLogin, onLogout }) {
|
||||
<>
|
||||
{/* Desktop Navigation */}
|
||||
<div className="hidden md:flex items-center gap-6">
|
||||
{user?.avatar && user?.discordId && (
|
||||
<img
|
||||
src={`https://cdn.discordapp.com/avatars/${user.discordId}/${user.avatar}.png?size=64`}
|
||||
alt="Avatar"
|
||||
className="w-8 h-8 rounded-full"
|
||||
/>
|
||||
)}
|
||||
<div className="text-right mr-2">
|
||||
<div className="text-sm text-white">{user?.username}</div>
|
||||
<div className="text-xs text-neutral-500">{roleLabels[role]}</div>
|
||||
</div>
|
||||
{isSuperadmin && (
|
||||
{isGuest ? (
|
||||
<>
|
||||
<span className="text-sm text-neutral-400">Gast</span>
|
||||
<button
|
||||
onClick={() => setShowUserMgmt(true)}
|
||||
className="btn btn-ghost"
|
||||
onClick={() => setShowLogin(true)}
|
||||
className="btn btn-primary"
|
||||
>
|
||||
Benutzer
|
||||
Anmelden
|
||||
</button>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
{user?.avatar && user?.discordId && (
|
||||
<img
|
||||
src={`https://cdn.discordapp.com/avatars/${user.discordId}/${user.avatar}.png?size=64`}
|
||||
alt="Avatar"
|
||||
className="w-8 h-8 rounded-full"
|
||||
/>
|
||||
)}
|
||||
<div className="text-right mr-2">
|
||||
<div className="text-sm text-white">{user?.username}</div>
|
||||
<div className="text-xs text-neutral-500">{roleLabels[role]}</div>
|
||||
</div>
|
||||
{isSuperadmin && (
|
||||
<>
|
||||
<button
|
||||
onClick={() => setShowUserMgmt(true)}
|
||||
className="btn btn-ghost"
|
||||
>
|
||||
Benutzer
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setShowActivityLog(true)}
|
||||
className="btn btn-ghost"
|
||||
>
|
||||
Logs
|
||||
</button>
|
||||
</>
|
||||
)}
|
||||
<button
|
||||
onClick={() => setShowActivityLog(true)}
|
||||
className="btn btn-ghost"
|
||||
onClick={onLogout}
|
||||
className="btn btn-outline"
|
||||
>
|
||||
Logs
|
||||
Abmelden
|
||||
</button>
|
||||
</>
|
||||
)}
|
||||
<button
|
||||
onClick={onLogout}
|
||||
className="btn btn-outline"
|
||||
>
|
||||
Abmelden
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Mobile Burger Button */}
|
||||
@@ -147,7 +163,7 @@ export default function Dashboard({ onLogin, onLogout }) {
|
||||
</>
|
||||
) : (
|
||||
<button
|
||||
onClick={() => setShowLogin(true)}
|
||||
onClick={() => navigate('/login')}
|
||||
className="btn btn-primary"
|
||||
>
|
||||
Anmelden
|
||||
@@ -161,7 +177,7 @@ export default function Dashboard({ onLogin, onLogout }) {
|
||||
<div className="md:hidden border-t border-neutral-800 py-4 mt-4 animate-slideDown">
|
||||
<div className="flex items-center justify-between mb-3 px-1">
|
||||
<div className="flex items-center gap-3">
|
||||
{user?.avatar && user?.discordId && (
|
||||
{!isGuest && user?.avatar && user?.discordId && (
|
||||
<img
|
||||
src={`https://cdn.discordapp.com/avatars/${user.discordId}/${user.avatar}.png?size=64`}
|
||||
alt="Avatar"
|
||||
@@ -169,8 +185,8 @@ export default function Dashboard({ onLogin, onLogout }) {
|
||||
/>
|
||||
)}
|
||||
<div>
|
||||
<div className="text-sm text-white">{user?.username}</div>
|
||||
<div className="text-xs text-neutral-500">{roleLabels[role]}</div>
|
||||
<div className="text-sm text-white">{isGuest ? 'Gast' : user?.username}</div>
|
||||
{!isGuest && <div className="text-xs text-neutral-500">{roleLabels[role]}</div>}
|
||||
</div>
|
||||
</div>
|
||||
<div className="text-sm text-neutral-400 text-right">
|
||||
@@ -179,28 +195,39 @@ export default function Dashboard({ onLogin, onLogout }) {
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
{isSuperadmin && (
|
||||
{isGuest ? (
|
||||
<button
|
||||
onClick={() => { setShowLogin(true); setMobileMenuOpen(false); }}
|
||||
className="btn btn-primary justify-start"
|
||||
>
|
||||
Mit Discord anmelden
|
||||
</button>
|
||||
) : (
|
||||
<>
|
||||
{isSuperadmin && (
|
||||
<>
|
||||
<button
|
||||
onClick={() => { setShowUserMgmt(true); setMobileMenuOpen(false); }}
|
||||
className="btn btn-ghost justify-start"
|
||||
>
|
||||
Benutzer
|
||||
</button>
|
||||
<button
|
||||
onClick={() => { setShowActivityLog(true); setMobileMenuOpen(false); }}
|
||||
className="btn btn-ghost justify-start"
|
||||
>
|
||||
Logs
|
||||
</button>
|
||||
</>
|
||||
)}
|
||||
<button
|
||||
onClick={() => { setShowUserMgmt(true); setMobileMenuOpen(false); }}
|
||||
className="btn btn-ghost justify-start"
|
||||
onClick={() => { onLogout(); setMobileMenuOpen(false); }}
|
||||
className="btn btn-outline justify-start"
|
||||
>
|
||||
Benutzer
|
||||
</button>
|
||||
<button
|
||||
onClick={() => { setShowActivityLog(true); setMobileMenuOpen(false); }}
|
||||
className="btn btn-ghost justify-start"
|
||||
>
|
||||
Logs
|
||||
Abmelden
|
||||
</button>
|
||||
</>
|
||||
)}
|
||||
<button
|
||||
onClick={() => { onLogout(); setMobileMenuOpen(false); }}
|
||||
className="btn btn-outline justify-start"
|
||||
>
|
||||
Abmelden
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
@@ -274,7 +301,7 @@ export default function Dashboard({ onLogin, onLogout }) {
|
||||
<ActivityLog onClose={() => setShowActivityLog(false)} />
|
||||
)}
|
||||
{showLogin && (
|
||||
<LoginModal onLogin={onLogin} onClose={() => setShowLogin(false)} />
|
||||
<LoginModal onClose={() => setShowLogin(false)} />
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user