diff options
| author | Wolfboy248 <georgejvindkarlsen@gmail.com> | 2024-10-29 10:09:17 +0100 |
|---|---|---|
| committer | Wolfboy248 <georgejvindkarlsen@gmail.com> | 2024-10-29 10:09:17 +0100 |
| commit | 35946dbb2feb7f9d1cbab16fb0602ce0303562e9 (patch) | |
| tree | 3ba530c1b3f5a1742ec41dfee5b74b43353619e2 /frontend/src/pages/Rankings.tsx | |
| parent | Merge branch 'typescript' of https://github.com/pektezol/LeastPortalsHub into... (diff) | |
| download | lphub-35946dbb2feb7f9d1cbab16fb0602ce0303562e9.tar.gz lphub-35946dbb2feb7f9d1cbab16fb0602ce0303562e9.tar.bz2 lphub-35946dbb2feb7f9d1cbab16fb0602ce0303562e9.zip | |
refactor: upload run dialog, useMessage update, added loader spinner
Diffstat (limited to '')
| -rw-r--r-- | frontend/src/pages/Rankings.tsx | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/frontend/src/pages/Rankings.tsx b/frontend/src/pages/Rankings.tsx index 9280b02..1830815 100644 --- a/frontend/src/pages/Rankings.tsx +++ b/frontend/src/pages/Rankings.tsx | |||
| @@ -13,6 +13,9 @@ const Rankings: React.FC = () => { | |||
| 13 | official, | 13 | official, |
| 14 | unofficial | 14 | unofficial |
| 15 | } | 15 | } |
| 16 | const [currentRankingType, setCurrentRankingType] = React.useState<LeaderboardTypes>(LeaderboardTypes.official); | ||
| 17 | |||
| 18 | const [leaderboardLoad, setLeaderboardLoad] = React.useState<boolean>(false); | ||
| 16 | 19 | ||
| 17 | enum RankingCategories { | 20 | enum RankingCategories { |
| 18 | rankings_overall, | 21 | rankings_overall, |
| @@ -23,6 +26,7 @@ const Rankings: React.FC = () => { | |||
| 23 | const [load, setLoad] = React.useState<boolean>(false); | 26 | const [load, setLoad] = React.useState<boolean>(false); |
| 24 | 27 | ||
| 25 | const _fetch_rankings = async () => { | 28 | const _fetch_rankings = async () => { |
| 29 | setLeaderboardLoad(false); | ||
| 26 | const rankings = await API.get_official_rankings(); | 30 | const rankings = await API.get_official_rankings(); |
| 27 | setLeaderboardData(rankings); | 31 | setLeaderboardData(rankings); |
| 28 | if (currentLeaderboardType == RankingCategories.rankings_singleplayer) { | 32 | if (currentLeaderboardType == RankingCategories.rankings_singleplayer) { |
| @@ -33,10 +37,12 @@ const Rankings: React.FC = () => { | |||
| 33 | setCurrentLeaderboard(rankings.rankings_overall) | 37 | setCurrentLeaderboard(rankings.rankings_overall) |
| 34 | } | 38 | } |
| 35 | setLoad(true); | 39 | setLoad(true); |
| 40 | setLeaderboardLoad(true); | ||
| 36 | } | 41 | } |
| 37 | 42 | ||
| 38 | const __dev_fetch_unofficial_rankings = async () => { | 43 | const __dev_fetch_unofficial_rankings = async () => { |
| 39 | try { | 44 | try { |
| 45 | setLeaderboardLoad(false); | ||
| 40 | const rankings = await API.get_unofficial_rankings(); | 46 | const rankings = await API.get_unofficial_rankings(); |
| 41 | setLeaderboardData(rankings); | 47 | setLeaderboardData(rankings); |
| 42 | if (currentLeaderboardType == RankingCategories.rankings_singleplayer) { | 48 | if (currentLeaderboardType == RankingCategories.rankings_singleplayer) { |
| @@ -47,6 +53,7 @@ const Rankings: React.FC = () => { | |||
| 47 | } else { | 53 | } else { |
| 48 | setCurrentLeaderboard(rankings.rankings_overall) | 54 | setCurrentLeaderboard(rankings.rankings_overall) |
| 49 | } | 55 | } |
| 56 | setLeaderboardLoad(true); | ||
| 50 | } catch (e) { | 57 | } catch (e) { |
| 51 | console.log(e) | 58 | console.log(e) |
| 52 | } | 59 | } |
| @@ -83,23 +90,23 @@ const Rankings: React.FC = () => { | |||
| 83 | <main> | 90 | <main> |
| 84 | <section className="nav-container nav-1"> | 91 | <section className="nav-container nav-1"> |
| 85 | <div> | 92 | <div> |
| 86 | <button onClick={() => _fetch_rankings()} className="nav-1-btn"> | 93 | <button onClick={() => {_fetch_rankings(); setCurrentRankingType(LeaderboardTypes.official)}} className={`nav-1-btn ${currentRankingType == LeaderboardTypes.official ? "selected" : ""}`}> |
| 87 | <span>Official (LPHUB)</span> | 94 | <span>Official (LPHUB)</span> |
| 88 | </button> | 95 | </button> |
| 89 | <button onClick={() => __dev_fetch_unofficial_rankings()} className="nav-1-btn"> | 96 | <button onClick={() => {__dev_fetch_unofficial_rankings(); setCurrentRankingType(LeaderboardTypes.unofficial)}} className={`nav-1-btn ${currentRankingType == LeaderboardTypes.unofficial ? "selected" : ""}`}> |
| 90 | <span>Unofficial (Steam)</span> | 97 | <span>Unofficial (Steam)</span> |
| 91 | </button> | 98 | </button> |
| 92 | </div> | 99 | </div> |
| 93 | </section> | 100 | </section> |
| 94 | <section className="nav-container nav-2"> | 101 | <section className="nav-container nav-2"> |
| 95 | <div> | 102 | <div> |
| 96 | <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_singleplayer)} className="nav-2-btn"> | 103 | <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_singleplayer)} className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_singleplayer ? "selected" : ""}`}> |
| 97 | <span>Singleplayer</span> | 104 | <span>Singleplayer</span> |
| 98 | </button> | 105 | </button> |
| 99 | <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_multiplayer)} className="nav-2-btn"> | 106 | <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_multiplayer)} className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_multiplayer ? "selected" : ""}`}> |
| 100 | <span>Cooperative</span> | 107 | <span>Cooperative</span> |
| 101 | </button> | 108 | </button> |
| 102 | <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_overall)} className="nav-2-btn"> | 109 | <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_overall)} className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_overall ? "selected" : ""}`}> |
| 103 | <span>Overall</span> | 110 | <span>Overall</span> |
| 104 | </button> | 111 | </button> |
| 105 | </div> | 112 | </div> |
| @@ -116,10 +123,16 @@ const Rankings: React.FC = () => { | |||
| 116 | 123 | ||
| 117 | <div className="splitter"></div> | 124 | <div className="splitter"></div> |
| 118 | 125 | ||
| 119 | {currentLeaderboard?.map((curRankingData, i) => { | 126 | {leaderboardLoad && currentLeaderboard?.map((curRankingData, i) => { |
| 120 | return <RankingEntry currentLeaderboardType={currentLeaderboardType} curRankingData={curRankingData} key={i}></RankingEntry> | 127 | return <RankingEntry currentLeaderboardType={currentLeaderboardType} curRankingData={curRankingData} key={i}></RankingEntry> |
| 121 | }) | 128 | }) |
| 122 | } | 129 | } |
| 130 | |||
| 131 | {leaderboardLoad ? null : | ||
| 132 | <div style={{display: "flex", justifyContent: "center", margin: "30px 0px"}}> | ||
| 133 | <span className="loader"></span> | ||
| 134 | </div> | ||
| 135 | } | ||
| 123 | </div> | 136 | </div> |
| 124 | </section> | 137 | </section> |
| 125 | : null} | 138 | : null} |