aboutsummaryrefslogtreecommitdiff
path: root/frontend/src/pages/Rankings.tsx
blob: 377222f07e95a42efade252207866323c9625a16 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import React, { useEffect } from "react";

import RankingEntry from "../components/RankingEntry";
import { Ranking, RankingType } from "../types/Ranking";
import { API } from "../api/Api";

import "../css/Rankings.css";

const Rankings: React.FC = () => {
    const [leaderboardData, setLeaderboardData] = React.useState<Ranking>();
    const [currentLeaderboardCat, setCurrentLeaderboardCat] = React.useState<RankingCategories>();
    const [currentLeaderboard, setCurrentLeaderboard] = React.useState<RankingType[]>();
    const [load, setLoad] = React.useState<boolean>(false);

    enum RankingCategories {
        rankings_overall,
        rankings_multiplayer,
        rankings_singleplayer
    }

    const _fetch_rankings = async () => {
        const rankings = await API.get_rankings();
        setLeaderboardData(rankings);
        setLoad(true);
    }

    const _set_current_leaderboard = (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);
        }
    }

    useEffect(() => {
        _fetch_rankings();
        if (load) {
            _set_current_leaderboard(RankingCategories.rankings_singleplayer);
        }
    }, [load])

    return (
        <main>
            <section className="nav-container nav-1">
                <div>
                    <button className="nav-1-btn">
                        <span>Official (LPHUB)</span>
                    </button>
                    <button className="nav-1-btn">
                        <span>Unofficial (Steam)</span>
                    </button>
                </div>
            </section>
            <section className="nav-container nav-2">
                <div>
                    <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_singleplayer)} className="nav-2-btn">
                        <span>Singleplayer</span>
                    </button>
                    <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_multiplayer)} className="nav-2-btn">
                        <span>Cooperative</span>
                    </button>
                    <button onClick={() => _set_current_leaderboard(RankingCategories.rankings_overall)} className="nav-2-btn">
                        <span>Overall</span>
                    </button>
                </div>
            </section>

            {load ?
            <section className="rankings-leaderboard">
                <div className="ranks-container">
                    <div className="leaderboard-entry header">
                        <span>Rank</span>
                        <span>Player</span>
                        <span>Portals</span>
                    </div>

                    <div className="splitter"></div>

                    {currentLeaderboard?.map((curRankingData, i) => {
                        return <RankingEntry curRankingData={curRankingData} key={i}></RankingEntry>
                    })
                    }
                </div>
            </section>
            : null}
        </main>
    )
}

export default Rankings;