From 26cdd0d363b1e279b14f7c5c3c12bb7d5e6d87d8 Mon Sep 17 00:00:00 2001 From: Nidboj132 Date: Wed, 12 Jul 2023 17:58:04 +0200 Subject: summary --- frontend/src/components/pages/summary.js | 225 +++++++++++++++++++++++++++++++ 1 file changed, 225 insertions(+) create mode 100644 frontend/src/components/pages/summary.js (limited to 'frontend/src/components/pages/summary.js') diff --git a/frontend/src/components/pages/summary.js b/frontend/src/components/pages/summary.js new file mode 100644 index 0000000..c628dd4 --- /dev/null +++ b/frontend/src/components/pages/summary.js @@ -0,0 +1,225 @@ +import React from 'react'; +import { useLocation } from "react-router-dom"; +import ReactMarkdown from 'react-markdown' + +import "./summary.css"; + +import img4 from "../../imgs/4.png" +import img5 from "../../imgs/5.png" +import img6 from "../../imgs/6.png" +import Modview from "./summary_modview.js" + +export default function Summary(prop) { +const {token,mod} = prop +const fakedata={} //for debug + + const location = useLocation() + + //fetching data + const [data, setData] = React.useState(null); + React.useEffect(() => { + fetch(`/api/v1/maps/${location.pathname.split('/')[2]}/summary`) + .then(r => r.json()) + .then(d => { + if(Object.keys(fakedata).length!==0){setData(fakedata)} + else{setData(d.data)} + if(d.data.summary.routes.length===0){d.data.summary.routes[0]={"category": "","history": {"score_count": 0,},"rating": 0,"description": "","showcase": ""}} + }) + // eslint-disable-next-line + }, []); + + + + + +const [navState, setNavState] = React.useState(0); // eslint-disable-next-line +React.useEffect(() => {NavClick();}, [[],navState]); + +function NavClick() { + if(data!==null){ + const btn = document.querySelectorAll("#section2 button.nav-button"); + btn.forEach((e) => {e.style.backgroundColor = "#2b2e46"}); + btn[navState].style.backgroundColor = "#202232"; +}} + + +const [catState, setCatState] = React.useState(1); // eslint-disable-next-line +React.useEffect(() => {CatClick();}, [[],catState]); + +function CatClick() { + if(data!==null){ + const btn = document.querySelectorAll("#section3 #category span button"); + btn.forEach((e) => {e.style.backgroundColor = "#2b2e46"}); + btn[catState-1].style.backgroundColor = "#202232"; +}} +React.useEffect(()=>{ + if(data!==null && data.summary.routes.filter(e=>e.category.id===catState).length!==0){ + selectRun(0,catState)} // eslint-disable-next-line +},[catState,data]) + + +const [hisState, setHisState] = React.useState(0); // eslint-disable-next-line +React.useEffect(() => {HisClick();}, [[],hisState]); + +function HisClick() { + if(data!==null){ + const btn = document.querySelectorAll("#section3 #history span button"); + btn.forEach((e) => {e.style.backgroundColor = "#2b2e46"}); + btn[hisState].style.backgroundColor = "#202232"; +}} + +const [selectedRun,setSelectedRun] = React.useState(0) + +function selectRun(x,y){ + let r = document.querySelectorAll("button.record") + r.forEach(e=>e.style.backgroundColor="#2b2e46") + r[x].style.backgroundColor="#161723" + + + if(data!==null && data.summary.routes.length!==0 && data.summary.routes.length!==0){ + if(y===2){x+=data.summary.routes.filter(e=>e.category.id<2).length} + if(y===3){x+=data.summary.routes.filter(e=>e.category.id<3).length} + if(y===4){x+=data.summary.routes.filter(e=>e.category.id<4).length} + setSelectedRun(x) + } +} + +const [vid,setVid] = React.useState("") +React.useEffect(()=>{ + if(data!==null){ + let showcase = data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].showcase + showcase.length>6 ? setVid("https://www.youtube.com/embed/"+YouTubeGetID(showcase)) + : setVid("") + } // eslint-disable-next-line +},[[],selectedRun]) + +function YouTubeGetID(url){ + url = url.split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/); + return (url[2] !== undefined) ? url[2].split(/[^0-9a-z_]/i)[0] : url[0]; + } + +if(data!==null){ +return ( + <> + {token!==null?mod===true?:"":""} + +
+ +
+
+
+
+ + +
{data.map.map_name} +
+ + +
+ +
+ + + +
+ +
+
+ +

{data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].history.score_count} + {data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].history.score_count === 1 ? ` portal` : ` portals` }

+ + + + {data.map.is_coop? + :} + + + +
+ +
+
+
+ Date + Record + First completion +
+
+
+ + {data.summary.routes + .sort((a, b) => a.history.score_count - b.history.score_count) + .filter(e=>e.category.id===catState) + .map((r, index) => ( + + ))} + +
+
+ + + + +
+ +
+ +
+
+ Difficulty + {data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 0 ? (Very easy):null} + {data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 1 ? (Easy):null} + {data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 2 ? (Medium):null} + {data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 3 ? (Hard):null} + {data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 4 ? (Very hard):null} +
+ {data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 0 ? (
) : (
)} + {data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 1 ? (
) : (
)} + {data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 2 ? (
) : (
)} + {data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 3 ? (
) : (
)} + {data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 4 ? (
) : (
)} +
+
+
+ Completion count +
6275
+
+
+ +
+
+ {data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].showcase!=="" ? + + : ""} +

Route description

+ + + {data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].description} + + +
+ +
+
+ + ) +}else{ + return ( +
+ ) +} + + +} + + -- cgit v1.2.3