repositories
loading repo index
repositories
loading repo index
repository
loading code, commits, and activity
Gitcat
stars
latest
clone command
git clone gitlawb://did:key:z6MkvfHn...poLu/gitcatgit clone gitlawb://did:key:z6MkvfHn.../gitcata815108csync from playground1d ago| #1 | import { useState, useEffect } from 'react'; |
| #2 | |
| #3 | const COUNTRIES = [ |
| #4 | { name: 'Indonesia', flag: '🇮🇩', base: 0 }, |
| #5 | { name: 'Thailand', flag: '🇹🇭', base: 0 }, |
| #6 | { name: 'Taiwan', flag: '🇹🇼', base: 0 }, |
| #7 | { name: 'Malaysia', flag: '🇲🇾', base: 0 }, |
| #8 | { name: 'United States', flag: '🇺🇸', base: 0 }, |
| #9 | { name: 'Japan', flag: '🇯🇵', base: 0 }, |
| #10 | { name: 'South Korea', flag: '🇰🇷', base: 0 }, |
| #11 | { name: 'Philippines', flag: '🇵🇭', base: 0 }, |
| #12 | { name: 'Brazil', flag: '🇧🇷', base: 0 }, |
| #13 | { name: 'Germany', flag: '🇩🇪', base: 0 }, |
| #14 | ]; |
| #15 | |
| #16 | export default function Leaderboard({ playerCount }: { playerCount: number }) { |
| #17 | const [counts, setCounts] = useState(() => COUNTRIES.map((c) => c.base)); |
| #18 | |
| #19 | useEffect(() => { |
| #20 | const interval = setInterval(() => { |
| #21 | setCounts((prev) => |
| #22 | prev.map((c, i) => { |
| #23 | const increment = Math.floor((COUNTRIES[i].base || 50_000_000) * 0.00001 * (0.5 + Math.random())); |
| #24 | return c + increment; |
| #25 | }), |
| #26 | ); |
| #27 | }, 700); |
| #28 | return () => clearInterval(interval); |
| #29 | }, []); |
| #30 | |
| #31 | const worldwide = counts.reduce((a, b) => a + b, 0) + playerCount; |
| #32 | const maxCount = counts[0]; |
| #33 | |
| #34 | return ( |
| #35 | <div className="leaderboard"> |
| #36 | <div className="leaderboard-worldwide"> |
| #37 | <span className="leaderboard-label">Worldwide</span> |
| #38 | <span className="leaderboard-value">{worldwide.toLocaleString()}</span> |
| #39 | </div> |
| #40 | <div className="leaderboard-list"> |
| #41 | {COUNTRIES.map((country, i) => { |
| #42 | const pct = (counts[i] / maxCount) * 100; |
| #43 | return ( |
| #44 | <div key={country.name} className="leaderboard-row"> |
| #45 | <span className="leaderboard-rank">{i + 1}</span> |
| #46 | <span className="leaderboard-flag">{country.flag}</span> |
| #47 | <span className="leaderboard-country">{country.name}</span> |
| #48 | <div className="leaderboard-bar-bg"> |
| #49 | <div className="leaderboard-bar" style={{ width: `${pct}%` }} /> |
| #50 | </div> |
| #51 | <span className="leaderboard-count"> |
| #52 | {counts[i].toLocaleString()} |
| #53 | </span> |
| #54 | </div> |
| #55 | ); |
| #56 | })} |
| #57 | </div> |
| #58 | </div> |
| #59 | ); |
| #60 | } |
| #61 |