import { useEffect, useState } from 'react' import './Leaderboards.css' import axios from 'axios' import { LeaderboardEntry } from '../types/LeaderboardEntry' import { app } from '@tauri-apps/api' import { platform } from '@tauri-apps/plugin-os' import { decrypt } from '../util/Encryption' import { invoke } from '@tauri-apps/api/core' export default function Leaderboards () { const [leaderboardData, setLeaderboardData] = useState([]) const [loading, setLoading] = useState(true) async function refresh () { setLoading(true) setLeaderboardData([]) try { const launcherVersion = await app.getVersion() const response = await axios.get('https://berrydash.lncvrt.xyz/database/getTopPlayers.php', { headers: { Requester: 'BerryDashLauncher', LauncherVersion: launcherVersion, ClientPlatform: platform() } }) const decrypted = await decrypt(response.data) setLeaderboardData(JSON.parse(decrypted)) } catch (e) { console.error('Error fetching leaderboard data:', e) } finally { setLoading(false) } } function downloadLeaderboard () { let content = 'Username,Score\n' leaderboardData.forEach(entry => { content += `${entry.username},${entry.value}\n` }) while (content.endsWith('\n')) { content = content.slice(0, -1) } invoke('download_leaderboard', { content }) } useEffect(() => { refresh() }, []) return (

Leaderboards

{leaderboardData.length ? ( leaderboardData.map((entry, i) => (

#{i + 1} {entry.username}

{entry.value}

)) ) : loading ? (

Loading...

) : (

No data...

)}
) }