import { useEffect, useState } from "react"; import { Modal } from "react-bootstrap"; import { ButterflyLeaderboardEntry, ButterflyStats, ButterflyAchievement, getButterflyLeaderboard, getButterflyAchievements, } from "../../../../types"; import { useAuth } from "../../context/auth"; import "./ButterflyLeaderboardModal.scss"; type Props = { isOpen: boolean; onClose: () => void; myStats?: ButterflyStats; }; const MEDALS = ['🥇', '🥈', '🥉']; /** Modální dialog s osobními statistikami, achievementy a týmovým žebříčkem. */ export default function ButterflyLeaderboardModal({ isOpen, onClose, myStats }: Readonly) { const auth = useAuth(); const [entries, setEntries] = useState(); const [achievements, setAchievements] = useState(); const [loading, setLoading] = useState(false); useEffect(() => { if (!isOpen) return; let cancelled = false; setLoading(true); Promise.all([ getButterflyLeaderboard({ query: { limit: 20 } }).then(r => r.data ?? []).catch(() => []), getButterflyAchievements().then(r => r.data ?? []).catch(() => []), ]).then(([lb, ach]) => { if (cancelled) return; setEntries(lb); setAchievements(ach); }).finally(() => { if (!cancelled) setLoading(false); }); return () => { cancelled = true; }; }, [isOpen]); return ( 🦋 Chytání motýlků {myStats && (
{myStats.level}. {myStats.title}
{myStats.caught}🦋 chyceno
{myStats.goldenCaught}✨ zlatých
{myStats.coins}🪙 mincí
{myStats.waspsKilled}🪰 vos zabito
{myStats.birdsScared}🦅 vyplašeno
{myStats.thievesDefeated}🦹 zlodějů
{myStats.caterpillarsDefeated}🐛 housenek
)} {achievements && achievements.length > 0 && ( <>
Odznaky
{achievements.map(a => (
{a.unlocked ? '🏅' : '🔒'} {a.title}
))}
)}
Žebříček týmu
{loading &&

Načítám žebříček…

} {!loading && entries && entries.length === 0 && (

Zatím nikdo nic nechytil. Buď první!

)} {!loading && entries && entries.length > 0 && (
    {entries.map((e, i) => (
  1. {MEDALS[i] ?? `${i + 1}.`} {e.login} {e.level}. {e.title} {e.caught} 🦋 {e.goldenCaught > 0 && ( {e.goldenCaught} ✨ )}
  2. ))}
)}
); }