import { useEffect, useState } from 'react'; import styles from '../styles/Dashboard.module.css'; interface MetricsData { totalPlayers: number; totalRuns: number; activePlayers24h: number; totalBossesDefeated: number; totalPrestigeLevelsGained: number; } const SUBGRAPH_URL = "https://api.studio.thegraph.com/query/75782/slay-the-moloch-base-mainnet/version/latest"; const Dashboard = () => { const [metrics, setMetrics] = useState(); useEffect(() => { const fetchMetrics = async () => { try { const response = await fetch(SUBGRAPH_URL, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ query: `{ # Get global stats globalStat(id: "1") { totalPlayers totalBossesDefeated totalPrestigeLevels totalRuns } # Get active players in last 24h players(where: { lastRaidedAt_gt: "${Math.floor(Date.now() / 1000) - 86400}" }) { id } }` }) }); const data = await response.json(); setMetrics({ totalPlayers: parseInt(data.data.globalStat.totalPlayers), totalRuns: parseInt(data.data.globalStat.totalRuns), activePlayers24h: data.data.players.length, totalBossesDefeated: parseInt(data.data.globalStat.totalBossesDefeated), totalPrestigeLevels: parseInt(data.data.globalStat.totalPrestigeLevels) }); } catch (error) { console.error("Error fetching metrics:", error); } }; fetchMetrics(); const interval = setInterval(fetchMetrics, 30000); // Refresh every 30 seconds return () => clearInterval(interval); }, []); return (

Total Players

{metrics?.totalPlayers || 0}

Total Game Runs

{metrics?.totalRuns || 0}

Active Players (24h)

{metrics?.activePlayers24h || 0}

Total Bosses Defeated

{metrics?.totalBossesDefeated || 0}

Total Prestige Levels

{metrics?.totalPrestigeLevels || 0}

); }; export default Dashboard;