diff options
| author | FifthWit <fifthwitbusiness@gmail.com> | 2025-01-30 10:44:30 -0600 |
|---|---|---|
| committer | FifthWit <fifthwitbusiness@gmail.com> | 2025-01-30 10:44:30 -0600 |
| commit | e40f07211f5f15dcb138e2520a76d13afd3c0cfd (patch) | |
| tree | 46bad6a17e66d55a4a65088c0b6eb8c48641615a /frontend/src/pages/Rankings.tsx | |
| parent | added prettier for more consistency (diff) | |
| download | lphub-e40f07211f5f15dcb138e2520a76d13afd3c0cfd.tar.gz lphub-e40f07211f5f15dcb138e2520a76d13afd3c0cfd.tar.bz2 lphub-e40f07211f5f15dcb138e2520a76d13afd3c0cfd.zip | |
formatted with prettier
Diffstat (limited to 'frontend/src/pages/Rankings.tsx')
| -rw-r--r-- | frontend/src/pages/Rankings.tsx | 319 |
1 files changed, 186 insertions, 133 deletions
diff --git a/frontend/src/pages/Rankings.tsx b/frontend/src/pages/Rankings.tsx index 71aa427..885638d 100644 --- a/frontend/src/pages/Rankings.tsx +++ b/frontend/src/pages/Rankings.tsx | |||
| @@ -1,147 +1,200 @@ | |||
| 1 | import React, { useEffect } from "react"; | 1 | import React, { useEffect } from 'react'; |
| 2 | import { Helmet } from "react-helmet"; | 2 | import { Helmet } from 'react-helmet'; |
| 3 | 3 | ||
| 4 | import RankingEntry from "@components/RankingEntry"; | 4 | import RankingEntry from '@components/RankingEntry'; |
| 5 | import { Ranking, SteamRanking, RankingType, SteamRankingType } from "@customTypes/Ranking"; | 5 | import { |
| 6 | import { API } from "@api/Api"; | 6 | Ranking, |
| 7 | SteamRanking, | ||
| 8 | RankingType, | ||
| 9 | SteamRankingType, | ||
| 10 | } from '@customTypes/Ranking'; | ||
| 11 | import { API } from '@api/Api'; | ||
| 7 | 12 | ||
| 8 | import "@css/Rankings.css"; | 13 | import '@css/Rankings.css'; |
| 9 | 14 | ||
| 10 | const Rankings: React.FC = () => { | 15 | const Rankings: React.FC = () => { |
| 11 | const [leaderboardData, setLeaderboardData] = React.useState<Ranking | SteamRanking>(); | 16 | const [leaderboardData, setLeaderboardData] = React.useState< |
| 12 | const [currentLeaderboard, setCurrentLeaderboard] = React.useState<RankingType[] | SteamRankingType[]>(); | 17 | Ranking | SteamRanking |
| 13 | enum LeaderboardTypes { | 18 | >(); |
| 14 | official, | 19 | const [currentLeaderboard, setCurrentLeaderboard] = React.useState< |
| 15 | unofficial | 20 | RankingType[] | SteamRankingType[] |
| 21 | >(); | ||
| 22 | enum LeaderboardTypes { | ||
| 23 | official, | ||
| 24 | unofficial, | ||
| 25 | } | ||
| 26 | const [currentRankingType, setCurrentRankingType] = | ||
| 27 | React.useState<LeaderboardTypes>(LeaderboardTypes.official); | ||
| 28 | |||
| 29 | const [leaderboardLoad, setLeaderboardLoad] = React.useState<boolean>(false); | ||
| 30 | |||
| 31 | enum RankingCategories { | ||
| 32 | rankings_overall, | ||
| 33 | rankings_multiplayer, | ||
| 34 | rankings_singleplayer, | ||
| 35 | } | ||
| 36 | const [currentLeaderboardType, setCurrentLeaderboardType] = | ||
| 37 | React.useState<RankingCategories>(RankingCategories.rankings_singleplayer); | ||
| 38 | const [load, setLoad] = React.useState<boolean>(false); | ||
| 39 | |||
| 40 | const _fetch_rankings = async () => { | ||
| 41 | setLeaderboardLoad(false); | ||
| 42 | const rankings = await API.get_official_rankings(); | ||
| 43 | setLeaderboardData(rankings); | ||
| 44 | if (currentLeaderboardType == RankingCategories.rankings_singleplayer) { | ||
| 45 | setCurrentLeaderboard(rankings.rankings_singleplayer); | ||
| 46 | } else if ( | ||
| 47 | currentLeaderboardType == RankingCategories.rankings_multiplayer | ||
| 48 | ) { | ||
| 49 | setCurrentLeaderboard(rankings.rankings_multiplayer); | ||
| 50 | } else { | ||
| 51 | setCurrentLeaderboard(rankings.rankings_overall); | ||
| 16 | } | 52 | } |
| 17 | const [currentRankingType, setCurrentRankingType] = React.useState<LeaderboardTypes>(LeaderboardTypes.official); | 53 | setLoad(true); |
| 18 | 54 | setLeaderboardLoad(true); | |
| 19 | const [leaderboardLoad, setLeaderboardLoad] = React.useState<boolean>(false); | 55 | }; |
| 20 | 56 | ||
| 21 | enum RankingCategories { | 57 | const __dev_fetch_unofficial_rankings = async () => { |
| 22 | rankings_overall, | 58 | try { |
| 23 | rankings_multiplayer, | 59 | setLeaderboardLoad(false); |
| 24 | rankings_singleplayer | 60 | const rankings = await API.get_unofficial_rankings(); |
| 25 | } | 61 | setLeaderboardData(rankings); |
| 26 | const [currentLeaderboardType, setCurrentLeaderboardType] = React.useState<RankingCategories>(RankingCategories.rankings_singleplayer); | 62 | if (currentLeaderboardType == RankingCategories.rankings_singleplayer) { |
| 27 | const [load, setLoad] = React.useState<boolean>(false); | 63 | // console.log(_sort_rankings_steam(unofficialRanking.rankings_singleplayer)) |
| 28 | 64 | setCurrentLeaderboard(rankings.rankings_singleplayer); | |
| 29 | const _fetch_rankings = async () => { | 65 | } else if ( |
| 30 | setLeaderboardLoad(false); | 66 | currentLeaderboardType == RankingCategories.rankings_multiplayer |
| 31 | const rankings = await API.get_official_rankings(); | 67 | ) { |
| 32 | setLeaderboardData(rankings); | 68 | setCurrentLeaderboard(rankings.rankings_multiplayer); |
| 33 | if (currentLeaderboardType == RankingCategories.rankings_singleplayer) { | 69 | } else { |
| 34 | setCurrentLeaderboard(rankings.rankings_singleplayer) | 70 | setCurrentLeaderboard(rankings.rankings_overall); |
| 35 | } else if (currentLeaderboardType == RankingCategories.rankings_multiplayer) { | 71 | } |
| 36 | setCurrentLeaderboard(rankings.rankings_multiplayer) | 72 | setLeaderboardLoad(true); |
| 37 | } else { | 73 | } catch (e) { |
| 38 | setCurrentLeaderboard(rankings.rankings_overall) | 74 | console.log(e); |
| 39 | } | ||
| 40 | setLoad(true); | ||
| 41 | setLeaderboardLoad(true); | ||
| 42 | } | 75 | } |
| 43 | 76 | }; | |
| 44 | const __dev_fetch_unofficial_rankings = async () => { | 77 | |
| 45 | try { | 78 | const _set_current_leaderboard = (ranking_cat: RankingCategories) => { |
| 46 | setLeaderboardLoad(false); | 79 | if (ranking_cat == RankingCategories.rankings_singleplayer) { |
| 47 | const rankings = await API.get_unofficial_rankings(); | 80 | setCurrentLeaderboard(leaderboardData!.rankings_singleplayer); |
| 48 | setLeaderboardData(rankings); | 81 | } else if (ranking_cat == RankingCategories.rankings_multiplayer) { |
| 49 | if (currentLeaderboardType == RankingCategories.rankings_singleplayer) { | 82 | setCurrentLeaderboard(leaderboardData!.rankings_multiplayer); |
| 50 | // console.log(_sort_rankings_steam(unofficialRanking.rankings_singleplayer)) | 83 | } else { |
| 51 | setCurrentLeaderboard(rankings.rankings_singleplayer) | 84 | setCurrentLeaderboard(leaderboardData!.rankings_overall); |
| 52 | } else if (currentLeaderboardType == RankingCategories.rankings_multiplayer) { | ||
| 53 | setCurrentLeaderboard(rankings.rankings_multiplayer) | ||
| 54 | } else { | ||
| 55 | setCurrentLeaderboard(rankings.rankings_overall) | ||
| 56 | } | ||
| 57 | setLeaderboardLoad(true); | ||
| 58 | } catch (e) { | ||
| 59 | console.log(e) | ||
| 60 | } | ||
| 61 | } | 85 | } |
| 62 | 86 | ||
| 63 | const _set_current_leaderboard = (ranking_cat: RankingCategories) => { | 87 | setCurrentLeaderboardType(ranking_cat); |
| 64 | if (ranking_cat == RankingCategories.rankings_singleplayer) { | 88 | }; |
| 65 | setCurrentLeaderboard(leaderboardData!.rankings_singleplayer); | ||
| 66 | } else if (ranking_cat == RankingCategories.rankings_multiplayer) { | ||
| 67 | setCurrentLeaderboard(leaderboardData!.rankings_multiplayer); | ||
| 68 | } else { | ||
| 69 | setCurrentLeaderboard(leaderboardData!.rankings_overall); | ||
| 70 | } | ||
| 71 | 89 | ||
| 72 | setCurrentLeaderboardType(ranking_cat); | 90 | const _set_leaderboard_type = (leaderboard_type: LeaderboardTypes) => { |
| 91 | if (leaderboard_type == LeaderboardTypes.official) { | ||
| 92 | _fetch_rankings(); | ||
| 93 | } else { | ||
| 73 | } | 94 | } |
| 95 | }; | ||
| 74 | 96 | ||
| 75 | const _set_leaderboard_type = (leaderboard_type: LeaderboardTypes) => { | 97 | useEffect(() => { |
| 76 | if (leaderboard_type == LeaderboardTypes.official) { | 98 | _fetch_rankings(); |
| 77 | _fetch_rankings(); | 99 | if (load) { |
| 78 | } else { | 100 | _set_current_leaderboard(RankingCategories.rankings_singleplayer); |
| 79 | |||
| 80 | } | ||
| 81 | } | 101 | } |
| 82 | 102 | }, [load]); | |
| 83 | useEffect(() => { | 103 | |
| 84 | _fetch_rankings(); | 104 | return ( |
| 85 | if (load) { | 105 | <main> |
| 86 | _set_current_leaderboard(RankingCategories.rankings_singleplayer); | 106 | <Helmet> |
| 87 | } | 107 | <title>LPHUB | Rankings</title> |
| 88 | }, [load]) | 108 | </Helmet> |
| 89 | 109 | <section className="nav-container nav-1"> | |
| 90 | return ( | 110 | <div> |
| 91 | <main> | 111 | <button |
| 92 | <Helmet> | 112 | onClick={() => { |
| 93 | <title>LPHUB | Rankings</title> | 113 | _fetch_rankings(); |
| 94 | </Helmet> | 114 | setCurrentRankingType(LeaderboardTypes.official); |
| 95 | <section className="nav-container nav-1"> | 115 | }} |
| 96 | <div> | 116 | className={`nav-1-btn ${currentRankingType == LeaderboardTypes.official ? 'selected' : ''}`} |
| 97 | <button onClick={() => { _fetch_rankings(); setCurrentRankingType(LeaderboardTypes.official) }} className={`nav-1-btn ${currentRankingType == LeaderboardTypes.official ? "selected" : ""}`}> | 117 | > |
| 98 | <span>Official (LPHUB)</span> | 118 | <span>Official (LPHUB)</span> |
| 99 | </button> | 119 | </button> |
| 100 | <button onClick={() => { __dev_fetch_unofficial_rankings(); setCurrentRankingType(LeaderboardTypes.unofficial) }} className={`nav-1-btn ${currentRankingType == LeaderboardTypes.unofficial ? "selected" : ""}`}> | 120 | <button |
| 101 | <span>Unofficial (Steam)</span> | 121 | onClick={() => { |
| 102 | </button> | 122 | __dev_fetch_unofficial_rankings(); |
| 103 | </div> | 123 | setCurrentRankingType(LeaderboardTypes.unofficial); |
| 104 | </section> | 124 | }} |
| 105 | <section className="nav-container nav-2"> | 125 | className={`nav-1-btn ${currentRankingType == LeaderboardTypes.unofficial ? 'selected' : ''}`} |
| 106 | <div> | 126 | > |
| 107 | <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_singleplayer)} className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_singleplayer ? "selected" : ""}`}> | 127 | <span>Unofficial (Steam)</span> |
| 108 | <span>Singleplayer</span> | 128 | </button> |
| 109 | </button> | 129 | </div> |
| 110 | <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_multiplayer)} className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_multiplayer ? "selected" : ""}`}> | 130 | </section> |
| 111 | <span>Cooperative</span> | 131 | <section className="nav-container nav-2"> |
| 112 | </button> | 132 | <div> |
| 113 | <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_overall)} className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_overall ? "selected" : ""}`}> | 133 | <button |
| 114 | <span>Overall</span> | 134 | onClick={() => |
| 115 | </button> | 135 | _set_current_leaderboard(RankingCategories.rankings_singleplayer) |
| 116 | </div> | 136 | } |
| 117 | </section> | 137 | className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_singleplayer ? 'selected' : ''}`} |
| 118 | 138 | > | |
| 119 | {load ? | 139 | <span>Singleplayer</span> |
| 120 | <section className="rankings-leaderboard"> | 140 | </button> |
| 121 | <div className="ranks-container"> | 141 | <button |
| 122 | <div className="leaderboard-entry header"> | 142 | onClick={() => |
| 123 | <span>Rank</span> | 143 | _set_current_leaderboard(RankingCategories.rankings_multiplayer) |
| 124 | <span>Player</span> | 144 | } |
| 125 | <span>Portals</span> | 145 | className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_multiplayer ? 'selected' : ''}`} |
| 126 | </div> | 146 | > |
| 127 | 147 | <span>Cooperative</span> | |
| 128 | <div className="splitter"></div> | 148 | </button> |
| 129 | 149 | <button | |
| 130 | {leaderboardLoad && currentLeaderboard?.map((curRankingData, i) => { | 150 | onClick={() => |
| 131 | return <RankingEntry currentLeaderboardType={currentLeaderboardType} curRankingData={curRankingData} key={i}></RankingEntry> | 151 | _set_current_leaderboard(RankingCategories.rankings_overall) |
| 132 | }) | 152 | } |
| 133 | } | 153 | className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_overall ? 'selected' : ''}`} |
| 134 | 154 | > | |
| 135 | {leaderboardLoad ? null : | 155 | <span>Overall</span> |
| 136 | <div style={{ display: "flex", justifyContent: "center", margin: "30px 0px" }}> | 156 | </button> |
| 137 | <span className="loader"></span> | 157 | </div> |
| 138 | </div> | 158 | </section> |
| 139 | } | 159 | |
| 140 | </div> | 160 | {load ? ( |
| 141 | </section> | 161 | <section className="rankings-leaderboard"> |
| 142 | : null} | 162 | <div className="ranks-container"> |
| 143 | </main> | 163 | <div className="leaderboard-entry header"> |
| 144 | ) | 164 | <span>Rank</span> |
| 145 | } | 165 | <span>Player</span> |
| 166 | <span>Portals</span> | ||
| 167 | </div> | ||
| 168 | |||
| 169 | <div className="splitter"></div> | ||
| 170 | |||
| 171 | {leaderboardLoad && | ||
| 172 | currentLeaderboard?.map((curRankingData, i) => { | ||
| 173 | return ( | ||
| 174 | <RankingEntry | ||
| 175 | currentLeaderboardType={currentLeaderboardType} | ||
| 176 | curRankingData={curRankingData} | ||
| 177 | key={i} | ||
| 178 | ></RankingEntry> | ||
| 179 | ); | ||
| 180 | })} | ||
| 181 | |||
| 182 | {leaderboardLoad ? null : ( | ||
| 183 | <div | ||
| 184 | style={{ | ||
| 185 | display: 'flex', | ||
| 186 | justifyContent: 'center', | ||
| 187 | margin: '30px 0px', | ||
| 188 | }} | ||
| 189 | > | ||
| 190 | <span className="loader"></span> | ||
| 191 | </div> | ||
| 192 | )} | ||
| 193 | </div> | ||
| 194 | </section> | ||
| 195 | ) : null} | ||
| 196 | </main> | ||
| 197 | ); | ||
| 198 | }; | ||
| 146 | 199 | ||
| 147 | export default Rankings; | 200 | export default Rankings; |