import React from 'react'; import { Button } from '@/components/ui/button'; import { Link } from 'react-router-dom'; import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet'; import AppearanceToggleDropdown from '@/components/appearance-dropdown'; import { Settings, ChevronDown, User } from 'lucide-react'; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'; import { useEventData } from '../hooks/useEventData'; import { usePollStats } from '../polling/usePollStats'; export default function Header({ slug, title = '' }: { slug?: string; title?: string }) { if (!slug) { return (
{title}
); } const { event, loading: eventLoading, error: eventError } = useEventData(); const stats = usePollStats(slug); if (eventLoading) { return (
Lade Event...
); } if (eventError || !event) { return (
Event nicht gefunden
); } // Get event icon or generate initials const getEventAvatar = (event: any) => { if (event.type?.icon) { return (
{event.type.icon}
); } // Fallback to initials const getInitials = (name: string) => { const words = name.split(' '); if (words.length >= 2) { return `${words[0][0]}${words[1][0]}`.toUpperCase(); } return name.substring(0, 2).toUpperCase(); }; return (
{getInitials(event.name)}
); }; return (
{getEventAvatar(event)}
{event.name}
{stats && ( <> {stats.onlineGuests} online {stats.tasksSolved} Aufgaben gelöst )}
); } function SettingsSheet() { return ( Einstellungen
Cache
Rechtliches
  • Impressum
  • Datenschutz
  • AGB
); } function ClearCacheButton() { const [busy, setBusy] = React.useState(false); const [done, setDone] = React.useState(false); async function clearAll() { setBusy(true); setDone(false); try { // Clear CacheStorage if ('caches' in window) { const keys = await caches.keys(); await Promise.all(keys.map((k) => caches.delete(k))); } // Clear known IndexedDB dbs (best-effort) if ('indexedDB' in window) { try { await new Promise((res, rej) => { const r = indexedDB.deleteDatabase('upload-queue'); r.onsuccess=()=>res(null); r.onerror=()=>res(null); }); } catch {} } setDone(true); } finally { setBusy(false); setTimeout(() => setDone(false), 2500); } } return (
{done &&
Cache gelöscht.
}
); }