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 img12 from "../../imgs/12.png"
import img13 from "../../imgs/13.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(`https://lp.ardapektezol.com/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 [pageNumber, setPageNumber] = React.useState(1);
const [lbData, setLbData] = React.useState(null);
React.useEffect(() => {
fetch(`https://lp.ardapektezol.com/api/v1/maps/${location.pathname.split('/')[2]}/leaderboards?page=${pageNumber}`)
.then(r => r.json())
.then(d => setLbData(d))
// eslint-disable-next-line
}, [pageNumber]);
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";
document.querySelectorAll("section").forEach((e,i)=>i>=2?e.style.display="none":"")
if(navState === 0){document.querySelectorAll(".summary1").forEach((e) => {e.style.display = "grid"});}
if(navState === 1){document.querySelectorAll(".summary2").forEach((e) => {e.style.display = "block"});}
if(navState === 2){document.querySelectorAll(".summary3").forEach((e) => {e.style.display = "block"});}
}}
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)
}
}
function graph(state) {
// this is such a mess
let graph = data.summary.routes.filter(e=>e.category.id===catState)
let graph_score = []
data.summary.routes.filter(e=>e.category.id===catState).forEach(e=>graph_score.push(e.history.score_count))
let graph_dates = []
data.summary.routes.filter(e=>e.category.id===catState).forEach(e=>graph_dates.push(e.history.date.split("T")[0]))
let graph_max = graph[graph.length-1].history.score_count
let graph_numbers = []
for (let i=graph_max;i>=0;i--){
graph_numbers[i]=i
}
switch (state) {
case 1: //numbers
return graph_numbers
.reverse().map(e=>(
graph_score.includes(e) || e===0 ?
{e}
:
))
case 2: // graph
let g = 0
let h = 0
return graph_numbers.map((e,j)=>(
{
graph_score.map((e,i)=>(
<>
| =h ? "1px dashed white" : "0" }}
> |
{g===h && graph_score.includes(graph_max-j) ?
: ""}
=h ?
g-1>=h ? "1px dashed #2b2e46" : "1px solid white" : "0"
: "0"}}
> |
=h ?
g-1>=h ? "1px dashed #2b2e46" : "1px solid white" : "0"
: "0"}}
> |
>
))
}
))
case 3: // dates
return graph_dates
.reverse().map(e=>(
{e}
))
default:
break;
}
}
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];
}
function TimeAgo(date) {
const seconds = Math.floor((new Date() - date) / 1000);
let interval = Math.floor(seconds / 31536000);
if (interval > 1) {return interval + ' years ago';}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {return interval + ' months ago';}
interval = Math.floor(seconds / 86400);
if (interval > 1) {return interval + ' days ago';}
interval = Math.floor(seconds / 3600);
if (interval > 1) {return interval + ' hours ago';}
interval = Math.floor(seconds / 60);
if (interval > 1) {return interval + ' minutes ago';}
if(seconds < 10) return 'just now';
return Math.floor(seconds) + ' seconds ago';
};
function TicksToTime(ticks) {
let seconds = Math.floor(ticks/60)
let minutes = Math.floor(seconds/60)
let hours = Math.floor(minutes/60)
let milliseconds = Math.floor((ticks%60)*1000/60)
seconds = seconds % 60;
minutes = minutes % 60;
return `${hours===0?"":hours+":"}${minutes===0?"":hours>0?minutes.toString().padStart(2, '0')+":":(minutes+":")}${minutes>0?seconds.toString().padStart(2, '0'):seconds}.${milliseconds.toString().padStart(3, '0')} (${ticks})`;
}
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?
:}
{data.summary.routes.filter(e=>e.category.id===catState).length===0 ?
There are no records for this map.
:
<>
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) => (
))}
>
}
{data.summary.routes.filter(e=>e.category.id===catState).length===0 ?
There are no records for this map.
:
{graph(1)}
{graph(2)}
{graph(3)}
}
Difficulty
{data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 0 ? (
N/A):null}
{data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 1 ? (
Very easy):null}
{data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 2 ? (
Easy):null}
{data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 3 ? (
Medium):null}
{data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 4 ? (
Hard):null}
{data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 5 ? (
Very hard):null}
{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 ? (
) : (
)}
{data.summary.routes.sort((a,b)=>a.category.id - b.category.id)[selectedRun].rating === 5 ? (
) : (
)}
Completion count
{catState===1?data.summary.routes[selectedRun].completion_count:"N/A"}
{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}
{lbData===null?"":lbData.success===false?(
Map is not available for competitive boards.
):lbData.data.records.length===0?(
):(
Place
{lbData.data.map.is_coop?(
Host
Partner
):(
Runner
)}
Portals
Time
Date
{lbData.data.pagination.current_page}/{lbData.data.pagination.total_pages}
)}
>
)
}else{
return (
)
}
}