aboutsummaryrefslogtreecommitdiff
path: root/frontend/src/pages/Rankings.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/pages/Rankings.tsx')
-rw-r--r--frontend/src/pages/Rankings.tsx248
1 files changed, 124 insertions, 124 deletions
diff --git a/frontend/src/pages/Rankings.tsx b/frontend/src/pages/Rankings.tsx
index 71aa427..12dcab4 100644
--- a/frontend/src/pages/Rankings.tsx
+++ b/frontend/src/pages/Rankings.tsx
@@ -8,140 +8,140 @@ import { API } from "@api/Api";
8import "@css/Rankings.css"; 8import "@css/Rankings.css";
9 9
10const Rankings: React.FC = () => { 10const Rankings: React.FC = () => {
11 const [leaderboardData, setLeaderboardData] = React.useState<Ranking | SteamRanking>(); 11 const [leaderboardData, setLeaderboardData] = React.useState<Ranking | SteamRanking>();
12 const [currentLeaderboard, setCurrentLeaderboard] = React.useState<RankingType[] | SteamRankingType[]>(); 12 const [currentLeaderboard, setCurrentLeaderboard] = React.useState<RankingType[] | SteamRankingType[]>();
13 enum LeaderboardTypes { 13 enum LeaderboardTypes {
14 official, 14 official,
15 unofficial 15 unofficial
16 }
17 const [currentRankingType, setCurrentRankingType] = React.useState<LeaderboardTypes>(LeaderboardTypes.official);
18
19 const [leaderboardLoad, setLeaderboardLoad] = React.useState<boolean>(false);
20
21 enum RankingCategories {
22 rankings_overall,
23 rankings_multiplayer,
24 rankings_singleplayer
25 }
26 const [currentLeaderboardType, setCurrentLeaderboardType] = React.useState<RankingCategories>(RankingCategories.rankings_singleplayer);
27 const [load, setLoad] = React.useState<boolean>(false);
28
29 const _fetch_rankings = async () => {
30 setLeaderboardLoad(false);
31 const rankings = await API.get_official_rankings();
32 setLeaderboardData(rankings);
33 if (currentLeaderboardType == RankingCategories.rankings_singleplayer) {
34 setCurrentLeaderboard(rankings.rankings_singleplayer)
35 } else if (currentLeaderboardType == RankingCategories.rankings_multiplayer) {
36 setCurrentLeaderboard(rankings.rankings_multiplayer)
37 } else {
38 setCurrentLeaderboard(rankings.rankings_overall)
16 } 39 }
17 const [currentRankingType, setCurrentRankingType] = React.useState<LeaderboardTypes>(LeaderboardTypes.official); 40 setLoad(true);
18 41 setLeaderboardLoad(true);
19 const [leaderboardLoad, setLeaderboardLoad] = React.useState<boolean>(false); 42 }
20 43
21 enum RankingCategories { 44 const __dev_fetch_unofficial_rankings = async () => {
22 rankings_overall, 45 try {
23 rankings_multiplayer, 46 setLeaderboardLoad(false);
24 rankings_singleplayer 47 const rankings = await API.get_unofficial_rankings();
48 setLeaderboardData(rankings);
49 if (currentLeaderboardType == RankingCategories.rankings_singleplayer) {
50 // console.log(_sort_rankings_steam(unofficialRanking.rankings_singleplayer))
51 setCurrentLeaderboard(rankings.rankings_singleplayer)
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)
25 } 60 }
26 const [currentLeaderboardType, setCurrentLeaderboardType] = React.useState<RankingCategories>(RankingCategories.rankings_singleplayer); 61 }
27 const [load, setLoad] = React.useState<boolean>(false); 62
28 63 const _set_current_leaderboard = (ranking_cat: RankingCategories) => {
29 const _fetch_rankings = async () => { 64 if (ranking_cat == RankingCategories.rankings_singleplayer) {
30 setLeaderboardLoad(false); 65 setCurrentLeaderboard(leaderboardData!.rankings_singleplayer);
31 const rankings = await API.get_official_rankings(); 66 } else if (ranking_cat == RankingCategories.rankings_multiplayer) {
32 setLeaderboardData(rankings); 67 setCurrentLeaderboard(leaderboardData!.rankings_multiplayer);
33 if (currentLeaderboardType == RankingCategories.rankings_singleplayer) { 68 } else {
34 setCurrentLeaderboard(rankings.rankings_singleplayer) 69 setCurrentLeaderboard(leaderboardData!.rankings_overall);
35 } else if (currentLeaderboardType == RankingCategories.rankings_multiplayer) {
36 setCurrentLeaderboard(rankings.rankings_multiplayer)
37 } else {
38 setCurrentLeaderboard(rankings.rankings_overall)
39 }
40 setLoad(true);
41 setLeaderboardLoad(true);
42 } 70 }
43 71
44 const __dev_fetch_unofficial_rankings = async () => { 72 setCurrentLeaderboardType(ranking_cat);
45 try { 73 }
46 setLeaderboardLoad(false);
47 const rankings = await API.get_unofficial_rankings();
48 setLeaderboardData(rankings);
49 if (currentLeaderboardType == RankingCategories.rankings_singleplayer) {
50 // console.log(_sort_rankings_steam(unofficialRanking.rankings_singleplayer))
51 setCurrentLeaderboard(rankings.rankings_singleplayer)
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 }
62 74
63 const _set_current_leaderboard = (ranking_cat: RankingCategories) => { 75 const _set_leaderboard_type = (leaderboard_type: LeaderboardTypes) => {
64 if (ranking_cat == RankingCategories.rankings_singleplayer) { 76 if (leaderboard_type == LeaderboardTypes.official) {
65 setCurrentLeaderboard(leaderboardData!.rankings_singleplayer); 77 _fetch_rankings();
66 } else if (ranking_cat == RankingCategories.rankings_multiplayer) { 78 } else {
67 setCurrentLeaderboard(leaderboardData!.rankings_multiplayer);
68 } else {
69 setCurrentLeaderboard(leaderboardData!.rankings_overall);
70 }
71 79
72 setCurrentLeaderboardType(ranking_cat);
73 } 80 }
81 }
74 82
75 const _set_leaderboard_type = (leaderboard_type: LeaderboardTypes) => { 83 useEffect(() => {
76 if (leaderboard_type == LeaderboardTypes.official) { 84 _fetch_rankings();
77 _fetch_rankings(); 85 if (load) {
78 } else { 86 _set_current_leaderboard(RankingCategories.rankings_singleplayer);
79
80 }
81 } 87 }
88 }, [load])
89
90 return (
91 <main>
92 <Helmet>
93 <title>LPHUB | Rankings</title>
94 </Helmet>
95 <section className="nav-container nav-1">
96 <div>
97 <button onClick={() => { _fetch_rankings(); setCurrentRankingType(LeaderboardTypes.official) }} className={`nav-1-btn ${currentRankingType == LeaderboardTypes.official ? "selected" : ""}`}>
98 <span>Official (LPHUB)</span>
99 </button>
100 <button onClick={() => { __dev_fetch_unofficial_rankings(); setCurrentRankingType(LeaderboardTypes.unofficial) }} className={`nav-1-btn ${currentRankingType == LeaderboardTypes.unofficial ? "selected" : ""}`}>
101 <span>Unofficial (Steam)</span>
102 </button>
103 </div>
104 </section>
105 <section className="nav-container nav-2">
106 <div>
107 <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_singleplayer)} className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_singleplayer ? "selected" : ""}`}>
108 <span>Singleplayer</span>
109 </button>
110 <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_multiplayer)} className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_multiplayer ? "selected" : ""}`}>
111 <span>Cooperative</span>
112 </button>
113 <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_overall)} className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_overall ? "selected" : ""}`}>
114 <span>Overall</span>
115 </button>
116 </div>
117 </section>
118
119 {load ?
120 <section className="rankings-leaderboard">
121 <div className="ranks-container">
122 <div className="leaderboard-entry header">
123 <span>Rank</span>
124 <span>Player</span>
125 <span>Portals</span>
126 </div>
127
128 <div className="splitter"></div>
129
130 {leaderboardLoad && currentLeaderboard?.map((curRankingData, i) => {
131 return <RankingEntry currentLeaderboardType={currentLeaderboardType} curRankingData={curRankingData} key={i}></RankingEntry>
132 })
133 }
82 134
83 useEffect(() => { 135 {leaderboardLoad ? null :
84 _fetch_rankings(); 136 <div style={{ display: "flex", justifyContent: "center", margin: "30px 0px" }}>
85 if (load) { 137 <span className="loader"></span>
86 _set_current_leaderboard(RankingCategories.rankings_singleplayer); 138 </div>
87 } 139 }
88 }, [load]) 140 </div>
89 141 </section>
90 return ( 142 : null}
91 <main> 143 </main>
92 <Helmet> 144 )
93 <title>LPHUB | Rankings</title>
94 </Helmet>
95 <section className="nav-container nav-1">
96 <div>
97 <button onClick={() => { _fetch_rankings(); setCurrentRankingType(LeaderboardTypes.official) }} className={`nav-1-btn ${currentRankingType == LeaderboardTypes.official ? "selected" : ""}`}>
98 <span>Official (LPHUB)</span>
99 </button>
100 <button onClick={() => { __dev_fetch_unofficial_rankings(); setCurrentRankingType(LeaderboardTypes.unofficial) }} className={`nav-1-btn ${currentRankingType == LeaderboardTypes.unofficial ? "selected" : ""}`}>
101 <span>Unofficial (Steam)</span>
102 </button>
103 </div>
104 </section>
105 <section className="nav-container nav-2">
106 <div>
107 <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_singleplayer)} className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_singleplayer ? "selected" : ""}`}>
108 <span>Singleplayer</span>
109 </button>
110 <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_multiplayer)} className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_multiplayer ? "selected" : ""}`}>
111 <span>Cooperative</span>
112 </button>
113 <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_overall)} className={`nav-2-btn ${currentLeaderboardType == RankingCategories.rankings_overall ? "selected" : ""}`}>
114 <span>Overall</span>
115 </button>
116 </div>
117 </section>
118
119 {load ?
120 <section className="rankings-leaderboard">
121 <div className="ranks-container">
122 <div className="leaderboard-entry header">
123 <span>Rank</span>
124 <span>Player</span>
125 <span>Portals</span>
126 </div>
127
128 <div className="splitter"></div>
129
130 {leaderboardLoad && currentLeaderboard?.map((curRankingData, i) => {
131 return <RankingEntry currentLeaderboardType={currentLeaderboardType} curRankingData={curRankingData} key={i}></RankingEntry>
132 })
133 }
134
135 {leaderboardLoad ? null :
136 <div style={{ display: "flex", justifyContent: "center", margin: "30px 0px" }}>
137 <span className="loader"></span>
138 </div>
139 }
140 </div>
141 </section>
142 : null}
143 </main>
144 )
145} 145}
146 146
147export default Rankings; 147export default Rankings;