diff options
Diffstat (limited to 'frontend/src/pages/Rankings.tsx')
| -rw-r--r-- | frontend/src/pages/Rankings.tsx | 65 |
1 files changed, 57 insertions, 8 deletions
diff --git a/frontend/src/pages/Rankings.tsx b/frontend/src/pages/Rankings.tsx index 377222f..6dbf3d3 100644 --- a/frontend/src/pages/Rankings.tsx +++ b/frontend/src/pages/Rankings.tsx | |||
| @@ -1,29 +1,68 @@ | |||
| 1 | import React, { useEffect } from "react"; | 1 | import React, { useEffect } from "react"; |
| 2 | 2 | ||
| 3 | import RankingEntry from "../components/RankingEntry"; | 3 | import RankingEntry from "../components/RankingEntry"; |
| 4 | import { Ranking, RankingType } from "../types/Ranking"; | 4 | import { Ranking, SteamRanking, RankingType, SteamRankingType } from "../types/Ranking"; |
| 5 | import { API } from "../api/Api"; | 5 | import { API } from "../api/Api"; |
| 6 | 6 | ||
| 7 | import "../css/Rankings.css"; | 7 | import "../css/Rankings.css"; |
| 8 | 8 | ||
| 9 | const Rankings: React.FC = () => { | 9 | const Rankings: React.FC = () => { |
| 10 | const [leaderboardData, setLeaderboardData] = React.useState<Ranking>(); | 10 | const [leaderboardData, setLeaderboardData] = React.useState<Ranking | SteamRanking>(); |
| 11 | const [currentLeaderboardCat, setCurrentLeaderboardCat] = React.useState<RankingCategories>(); | 11 | const [currentLeaderboard, setCurrentLeaderboard] = React.useState<RankingType[] | SteamRankingType[]>(); |
| 12 | const [currentLeaderboard, setCurrentLeaderboard] = React.useState<RankingType[]>(); | 12 | enum LeaderboardTypes { |
| 13 | const [load, setLoad] = React.useState<boolean>(false); | 13 | official, |
| 14 | unofficial | ||
| 15 | } | ||
| 14 | 16 | ||
| 15 | enum RankingCategories { | 17 | enum RankingCategories { |
| 16 | rankings_overall, | 18 | rankings_overall, |
| 17 | rankings_multiplayer, | 19 | rankings_multiplayer, |
| 18 | rankings_singleplayer | 20 | rankings_singleplayer |
| 19 | } | 21 | } |
| 22 | const [currentLeaderboardType, setCurrentLeaderboardType] = React.useState<RankingCategories>(RankingCategories.rankings_singleplayer); | ||
| 23 | const [load, setLoad] = React.useState<boolean>(false); | ||
| 24 | |||
| 25 | interface ResponseSTUPID { | ||
| 26 | success: boolean; | ||
| 27 | message: string; | ||
| 28 | data: SteamRanking; | ||
| 29 | } | ||
| 20 | 30 | ||
| 21 | const _fetch_rankings = async () => { | 31 | const _fetch_rankings = async () => { |
| 22 | const rankings = await API.get_rankings(); | 32 | const rankings = await API.get_rankings(); |
| 23 | setLeaderboardData(rankings); | 33 | setLeaderboardData(rankings); |
| 34 | if (currentLeaderboardType == RankingCategories.rankings_singleplayer) { | ||
| 35 | setCurrentLeaderboard(rankings.rankings_singleplayer) | ||
| 36 | } else if (currentLeaderboardType == RankingCategories.rankings_multiplayer) { | ||
| 37 | setCurrentLeaderboard(rankings.rankings_multiplayer) | ||
| 38 | } else { | ||
| 39 | setCurrentLeaderboard(rankings.rankings_overall) | ||
| 40 | } | ||
| 24 | setLoad(true); | 41 | setLoad(true); |
| 25 | } | 42 | } |
| 26 | 43 | ||
| 44 | const __dev_fetch_unofficial_rankings = async () => { | ||
| 45 | try { | ||
| 46 | const response = await fetch("/response.json"); | ||
| 47 | const result: ResponseSTUPID = await response.json(); | ||
| 48 | |||
| 49 | if (result.success) { | ||
| 50 | const unofficialRanking: SteamRanking = result.data; | ||
| 51 | setLeaderboardData(unofficialRanking); | ||
| 52 | if (currentLeaderboardType == RankingCategories.rankings_singleplayer) { | ||
| 53 | // console.log(_sort_rankings_steam(unofficialRanking.rankings_singleplayer)) | ||
| 54 | setCurrentLeaderboard(unofficialRanking.rankings_singleplayer) | ||
| 55 | } else if (currentLeaderboardType == RankingCategories.rankings_multiplayer) { | ||
| 56 | setCurrentLeaderboard(unofficialRanking.rankings_multiplayer) | ||
| 57 | } else { | ||
| 58 | setCurrentLeaderboard(unofficialRanking.rankings_overall) | ||
| 59 | } | ||
| 60 | } | ||
| 61 | } catch (e) { | ||
| 62 | console.log(e) | ||
| 63 | } | ||
| 64 | } | ||
| 65 | |||
| 27 | const _set_current_leaderboard = (ranking_cat: RankingCategories) => { | 66 | const _set_current_leaderboard = (ranking_cat: RankingCategories) => { |
| 28 | if (ranking_cat == RankingCategories.rankings_singleplayer) { | 67 | if (ranking_cat == RankingCategories.rankings_singleplayer) { |
| 29 | setCurrentLeaderboard(leaderboardData!.rankings_singleplayer); | 68 | setCurrentLeaderboard(leaderboardData!.rankings_singleplayer); |
| @@ -32,6 +71,16 @@ const Rankings: React.FC = () => { | |||
| 32 | } else { | 71 | } else { |
| 33 | setCurrentLeaderboard(leaderboardData!.rankings_overall); | 72 | setCurrentLeaderboard(leaderboardData!.rankings_overall); |
| 34 | } | 73 | } |
| 74 | |||
| 75 | setCurrentLeaderboardType(ranking_cat); | ||
| 76 | } | ||
| 77 | |||
| 78 | const _set_leaderboard_type = (leaderboard_type: LeaderboardTypes) => { | ||
| 79 | if (leaderboard_type == LeaderboardTypes.official) { | ||
| 80 | _fetch_rankings(); | ||
| 81 | } else { | ||
| 82 | |||
| 83 | } | ||
| 35 | } | 84 | } |
| 36 | 85 | ||
| 37 | useEffect(() => { | 86 | useEffect(() => { |
| @@ -45,10 +94,10 @@ const Rankings: React.FC = () => { | |||
| 45 | <main> | 94 | <main> |
| 46 | <section className="nav-container nav-1"> | 95 | <section className="nav-container nav-1"> |
| 47 | <div> | 96 | <div> |
| 48 | <button className="nav-1-btn"> | 97 | <button onClick={() => _fetch_rankings()} className="nav-1-btn"> |
| 49 | <span>Official (LPHUB)</span> | 98 | <span>Official (LPHUB)</span> |
| 50 | </button> | 99 | </button> |
| 51 | <button className="nav-1-btn"> | 100 | <button onClick={() => __dev_fetch_unofficial_rankings()} className="nav-1-btn"> |
| 52 | <span>Unofficial (Steam)</span> | 101 | <span>Unofficial (Steam)</span> |
| 53 | </button> | 102 | </button> |
| 54 | </div> | 103 | </div> |
| @@ -79,7 +128,7 @@ const Rankings: React.FC = () => { | |||
| 79 | <div className="splitter"></div> | 128 | <div className="splitter"></div> |
| 80 | 129 | ||
| 81 | {currentLeaderboard?.map((curRankingData, i) => { | 130 | {currentLeaderboard?.map((curRankingData, i) => { |
| 82 | return <RankingEntry curRankingData={curRankingData} key={i}></RankingEntry> | 131 | return <RankingEntry currentLeaderboardType={currentLeaderboardType} curRankingData={curRankingData} key={i}></RankingEntry> |
| 83 | }) | 132 | }) |
| 84 | } | 133 | } |
| 85 | </div> | 134 | </div> |