import { useEffect, useState } from 'react' import { useSearchParams } from 'react-router-dom' import { widgetsApi } from '@/api/widgets' import type { WidgetCurrentData } from '@/types' import '@/styles/widget.css' const DIFFICULTY_LABELS: Record = { easy: 'Легко', medium: 'Средне', hard: 'Сложно', } export default function CurrentWidget() { const [searchParams] = useSearchParams() const [data, setData] = useState(null) const [error, setError] = useState(null) const marathonId = searchParams.get('marathon') const token = searchParams.get('token') const theme = searchParams.get('theme') || 'dark' const transparent = searchParams.get('transparent') === 'true' useEffect(() => { if (!marathonId || !token) { setError('Missing marathon or token parameter') return } const fetchData = async () => { try { const result = await widgetsApi.getCurrent(parseInt(marathonId), token) setData(result) setError(null) } catch { setError('Failed to load data') } } fetchData() const interval = setInterval(fetchData, 30000) return () => clearInterval(interval) }, [marathonId, token]) if (error) { return (
{error}
) } if (!data) { return (
Loading...
) } if (!data.has_assignment) { return (
Ожидание спина...
) } return (
{data.game_cover_url && ( )}
{data.game_title}
{data.assignment_type === 'playthrough' ? 'Прохождение' : 'Челлендж'}
{data.challenge_title}
{data.challenge_description && (
{data.challenge_description}
)}
+{data.points} очков {data.difficulty && ( {DIFFICULTY_LABELS[data.difficulty] || data.difficulty} )}
{data.assignment_type === 'playthrough' && data.bonus_total !== null && data.bonus_total > 0 && (
Бонусы: {data.bonus_completed || 0} / {data.bonus_total}
)}
) }