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/Maplist/Maplist.tsx | 249 +++++++++++++++++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100644 frontend/src/pages/Maplist/Maplist.tsx (limited to 'frontend/src/pages/Maplist/Maplist.tsx') diff --git a/frontend/src/pages/Maplist/Maplist.tsx b/frontend/src/pages/Maplist/Maplist.tsx new file mode 100644 index 0000000..572eb27 --- /dev/null +++ b/frontend/src/pages/Maplist/Maplist.tsx @@ -0,0 +1,249 @@ +import React, { useEffect } from "react"; +import { Link, useLocation, useNavigate, useParams } from "react-router-dom"; +import { Helmet } from "react-helmet"; + +import { API } from "@api/Api.ts"; +import { Game } from "@customTypes/Game.ts"; +import { GameChapter, GamesChapters } from "@customTypes/Chapters.ts"; + +const Maplist: React.FC = () => { + const [game, setGame] = React.useState(null); + const [catNum, setCatNum] = React.useState(0); + const [id, setId] = React.useState(0); + const [load, setLoad] = React.useState(false); + const [currentlySelected, setCurrentlySelected] = React.useState(0); + const [hasClicked, setHasClicked] = React.useState(false); + const [gameChapters, setGameChapters] = React.useState(); + const [curChapter, setCurChapter] = React.useState(); + const [numChapters, setNumChapters] = React.useState(0); + + const [dropdownActive, setDropdownActive] = React.useState("none"); + + const params = useParams<{ id: string; chapter: string }>(); + const location = useLocation(); + const navigate = useNavigate(); + + function _update_currently_selected(catNum2: number) { + setCurrentlySelected(catNum2); + navigate("/games/" + game?.id + "?cat=" + catNum2); + setHasClicked(true); + } + + const _fetch_chapters = async (chapter_id: string) => { + const chapters = await API.get_chapters(chapter_id); + setCurChapter(chapters); + }; + + const _handle_dropdown_click = () => { + if (dropdownActive === "none") { + setDropdownActive("block"); + } else { + setDropdownActive("none"); + } + }; + + // im sorry but im too lazy to fix this right now + useEffect(() => { + // gameID + const gameId = parseFloat(params.id || ""); + setId(gameId); + + // location query params + const queryParams = new URLSearchParams(location.search); + if (queryParams.get("chapter")) { + let cat = parseFloat(queryParams.get("chapter") || ""); + if (gameId === 2) { + cat += 10; + } + _fetch_chapters(cat.toString()); + } + + const _fetch_game = async () => { + const games = await API.get_games(); + const foundGame = games.find(game => game.id === gameId); + // console.log(foundGame) + if (foundGame) { + setGame(foundGame); + setLoad(false); + } + }; + + const _fetch_game_chapters = async () => { + const games_chapters = await API.get_games_chapters(gameId.toString()); + setGameChapters(games_chapters); + setNumChapters(games_chapters.chapters.length); + }; + + setLoad(true); + _fetch_game(); + _fetch_game_chapters(); + }, [location.search]); + + useEffect(() => { + const queryParams = new URLSearchParams(location.search); + if (gameChapters !== undefined && !queryParams.get("chapter")) { + _fetch_chapters(gameChapters!.chapters[0].id.toString()); + } + }, [gameChapters, location.search]); + + return ( +
+ + LPHUB | Maplist + + +
+ + + +
+ + {load ? ( +
+ ) : ( +
+

+ {game?.name} +

+ +
+
+
+

+ { + game?.category_portals.find( + obj => obj.category.id === catNum + 1 + )?.portal_count + } +

+

+ portals +

+
+ +
+ {game?.category_portals.map((cat, index) => ( + + ))} +
+
+
+ +
+
+
+ + {curChapter?.chapter.name.split(" - ")[0]} + +
+
+ + {curChapter?.chapter.name.split(" - ")[1]} + + +
+ \ +
+ {gameChapters?.chapters.map((chapter, i) => { + return ( +
{ + _fetch_chapters(chapter.id.toString()); + _handle_dropdown_click(); + }} + > + {chapter.name} +
+ ); + })} +
+
+ +
+ {curChapter?.maps.map((map, i) => { + return ( +
+ + + {map.name} + +
+
+ + {map.is_disabled + ? map.category_portals[0].portal_count + : map.category_portals.find( + obj => obj.category.id === catNum + 1 + )?.portal_count} + + + portals + +
+
+ +
+
+ {[1, 2, 3, 4, 5].map((point) => ( +
+ ))} +
+
+ +
+ ); + })} +
+
+
+ )} +
+ ); +}; + +export default Maplist; -- cgit v1.2.3