From c04bc9a36ebfcdf6d8e2db8a6cdeb44062b66bec Mon Sep 17 00:00:00 2001 From: Wolfboy248 Date: Tue, 19 Aug 2025 13:23:17 +0200 Subject: organised pages, started work on theme --- frontend/src/pages/Maps/Maps.tsx | 185 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 frontend/src/pages/Maps/Maps.tsx (limited to 'frontend/src/pages/Maps/Maps.tsx') diff --git a/frontend/src/pages/Maps/Maps.tsx b/frontend/src/pages/Maps/Maps.tsx new file mode 100644 index 0000000..75e3635 --- /dev/null +++ b/frontend/src/pages/Maps/Maps.tsx @@ -0,0 +1,185 @@ +import React from "react"; +import { Link, useLocation } from "react-router-dom"; +import { Helmet } from "react-helmet"; + +import { PortalIcon, FlagIcon, ChatIcon } from "../../images/Images.tsx"; +import Summary from "@components/Summary.tsx"; +import Leaderboards from "@components/Leaderboards.tsx"; +import Discussions from "@components/Discussions.tsx"; +import ModMenu from "@components/ModMenu.tsx"; +import { MapDiscussions, MapLeaderboard, MapSummary } from "@customTypes/Map.ts"; +import { API } from "@api/Api.ts"; + +interface MapProps { + token?: string; + isModerator: boolean; +} + +const Maps: React.FC = ({ token, isModerator }) => { + const [selectedRun, setSelectedRun] = React.useState(0); + + const [mapSummaryData, setMapSummaryData] = React.useState< + MapSummary | undefined + >(undefined); + const [mapLeaderboardData, setMapLeaderboardData] = React.useState< + MapLeaderboard | undefined + >(undefined); + const [mapDiscussionsData, setMapDiscussionsData] = React.useState< + MapDiscussions | undefined + >(undefined); + + const [navState, setNavState] = React.useState(0); + + const location = useLocation(); + + const mapID = location.pathname.split("/")[2]; + + const _fetch_map_summary = React.useCallback(async () => { + const mapSummary = await API.get_map_summary(mapID); + setMapSummaryData(mapSummary); + }, [mapID]); + + const _fetch_map_leaderboards = React.useCallback(async () => { + const mapLeaderboards = await API.get_map_leaderboard(mapID, "1"); + setMapLeaderboardData(mapLeaderboards); + }, [mapID]); + + const _fetch_map_discussions = React.useCallback(async () => { + const mapDiscussions = await API.get_map_discussions(mapID); + setMapDiscussionsData(mapDiscussions); + }, [mapID]); + + React.useEffect(() => { + _fetch_map_summary(); + _fetch_map_leaderboards(); + _fetch_map_discussions(); + }, [ + mapID, + _fetch_map_discussions, + _fetch_map_leaderboards, + _fetch_map_summary, + ]); + + if (!mapSummaryData) { + // loading placeholder + return ( + <> +
+
+
+ + + +
+
+ +
+ + + +
+ +
+
+ + ); + } + + return ( + <> + + LPHUB | {mapSummaryData.map.map_name} + + + {isModerator && ( + + )} + +
+ +
+
+
+
+ + + + + + +
+ + {mapSummaryData.map.map_name} + +
+
+ +
+ + + +
+ + {navState === 0 && ( + + )} + {navState === 1 && } + {navState === 2 && ( + _fetch_map_discussions()} + /> + )} +
+ + ); +}; + +export default Maps; -- cgit v1.2.3