import React, { useEffect } from "react"; import { Helmet } from "react-helmet"; import RankingEntry from "@components/RankingEntry"; import { Ranking, SteamRanking, RankingType, SteamRankingType, } from "@customTypes/Ranking"; import { API } from "@api/Api"; import "@css/Rankings.css"; enum LeaderboardTypes { official, unofficial, } enum RankingCategories { rankings_overall, rankings_multiplayer, rankings_singleplayer, } const Rankings: React.FC = () => { const [leaderboardData, setLeaderboardData] = React.useState< Ranking | SteamRanking >(); const [currentLeaderboard, setCurrentLeaderboard] = React.useState< RankingType[] | SteamRankingType[] >(); const [currentRankingType, setCurrentRankingType] = React.useState(LeaderboardTypes.official); const [leaderboardLoad, setLeaderboardLoad] = React.useState(false); const [currentLeaderboardType, setCurrentLeaderboardType] = React.useState(RankingCategories.rankings_singleplayer); const [load, setLoad] = React.useState(false); const _fetch_rankings = React.useCallback(async () => { setLeaderboardLoad(false); const rankings = await API.get_official_rankings(); setLeaderboardData(rankings); if (currentLeaderboardType === RankingCategories.rankings_singleplayer) { setCurrentLeaderboard(rankings.rankings_singleplayer); } else if ( currentLeaderboardType === RankingCategories.rankings_multiplayer ) { setCurrentLeaderboard(rankings.rankings_multiplayer); } else { setCurrentLeaderboard(rankings.rankings_overall); } setLoad(true); setLeaderboardLoad(true); }, [currentLeaderboardType]); const __dev_fetch_unofficial_rankings = async () => { try { setLeaderboardLoad(false); const rankings = await API.get_unofficial_rankings(); setLeaderboardData(rankings); if (currentLeaderboardType === RankingCategories.rankings_singleplayer) { // console.log(_sort_rankings_steam(unofficialRanking.rankings_singleplayer)) setCurrentLeaderboard(rankings.rankings_singleplayer); } else if ( currentLeaderboardType === RankingCategories.rankings_multiplayer ) { setCurrentLeaderboard(rankings.rankings_multiplayer); } else { setCurrentLeaderboard(rankings.rankings_overall); } setLeaderboardLoad(true); } catch (e) { console.log(e); } }; const _set_current_leaderboard = React.useCallback( (ranking_cat: RankingCategories) => { if (ranking_cat === RankingCategories.rankings_singleplayer) { setCurrentLeaderboard(leaderboardData!.rankings_singleplayer); } else if (ranking_cat === RankingCategories.rankings_multiplayer) { setCurrentLeaderboard(leaderboardData!.rankings_multiplayer); } else { setCurrentLeaderboard(leaderboardData!.rankings_overall); } setCurrentLeaderboardType(ranking_cat); }, [leaderboardData] ); // unused func // const _set_leaderboard_type = (leaderboard_type: LeaderboardTypes) => { // if (leaderboard_type === LeaderboardTypes.official) { // _fetch_rankings(); // } else { // } // }; useEffect(() => { _fetch_rankings(); }, [_fetch_rankings]); return (
LPHUB | Rankings
{load ? (
Rank Player Portals
{leaderboardLoad && currentLeaderboard?.map((curRankingData, i) => { return ( ); })} {leaderboardLoad ? null : (
)}
) : null}
); }; export default Rankings;