import { useEffect } from 'react' import { Gauge, HardDrive, History, Images, KeyRound, LogOut, PieChart, Settings, UserCog, } from 'lucide-react' import { run, useStore } from './store' import { Anmelden } from './pages/Anmelden' import { Start } from './pages/Start' import { Galerie } from './pages/Galerie' import { Speicher } from './pages/Speicher' import { Tokens } from './pages/Tokens' import { Konto } from './pages/Konto' import { Einstellungen } from './pages/Einstellungen' import { Verlauf } from './pages/Verlauf' import { Meldungen } from './components/Meldungen' import { gehZu, usePfad } from './router' import { Avatar } from './components/Avatar' const seiten = [ { pfad: '/', name: 'Start', kind: Gauge, Inhalt: Start }, { pfad: '/galerie', name: 'Galerie', kind: Images, Inhalt: Galerie }, { pfad: '/verlauf', name: 'Verlauf', kind: History, Inhalt: Verlauf }, { pfad: '/speicher', name: 'Speicher', kind: PieChart, Inhalt: Speicher }, { pfad: '/tokens', name: 'Token', kind: KeyRound, Inhalt: Tokens }, { pfad: '/konto', name: 'Konto', kind: UserCog, Inhalt: Konto }, { pfad: '/einstellungen', name: 'Einstellungen', kind: Settings, Inhalt: Einstellungen }, ] as const export function App() { // Einzeln ausgewählt und nicht als ganzer Laden: `useStore()` ohne // Auswahlfunktion abonniert ALLES, und dann zeichnet jede Meldung das // ganze Dashboard neu — bei 60 Kacheln mit Bildern ist das spürbar. const user = useStore((s) => s.user) const checking = useStore((s) => s.checking) const checkSession = useStore((s) => s.checkSession) const logout = useStore((s) => s.logout) const pfad = usePfad() useEffect(() => { void checkSession() }, [checkSession]) // Solange nicht feststeht, ob eine Sitzung besteht, wird NICHTS gezeigt. // Sonst blitzt bei jedem Neuladen kurz das Anmeldeformular auf, obwohl man // angemeldet ist — und das sieht aus wie ein Fehler. if (checking) { return (
) } if (!user) { return ( <> ) } const aktiv = seiten.find((s) => s.pfad === pfad) ?? seiten[0] const Inhalt = aktiv.Inhalt return (
{ e.preventDefault() gehZu('/') }} className="flex items-center gap-2 font-semibold" > d4rk_media
{user.username}
) }