From a65d6d9127c3fa7f6a8ecaec5d1ffd1f47c2bc98 Mon Sep 17 00:00:00 2001
From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>
Date: Tue, 3 Sep 2024 00:08:53 +0300
Subject: refactor: port to typescript
---
frontend/src/components/pages/summary.js | 650 -------------------------------
1 file changed, 650 deletions(-)
delete 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
deleted file mode 100644
index d276408..0000000
--- a/frontend/src/components/pages/summary.js
+++ /dev/null
@@ -1,650 +0,0 @@
-import React, { useEffect } from 'react';
-import { useLocation, Link } 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(() => {
- setData(null)
- setDiscussionThread(null)
- setCreatePostState(0)
- setSelectedRun(0)
- setCatState(1)
- 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
- }, [location.pathname]);
-
- 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,location.pathname]);
-
- const [discussions,setDiscussions] = React.useState(null)
- function fetchDiscussions() {
- fetch(`https://lp.ardapektezol.com/api/v1/maps/${location.pathname.split('/')[2]}/discussions`)
- .then(r=>r.json())
- .then(d=>setDiscussions(d.data.discussions))
- }
-
- React.useEffect(()=>{
- fetchDiscussions()
- },[location.pathname])
-
-
-
-const [discussionThread,setDiscussionThread] = React.useState(null)
-function openDiscussion(x){
- fetch(`https://lp.ardapektezol.com/api/v1/maps/${location.pathname.split('/')[2]}/discussions/${x}`)
- .then(r=>r.json())
- .then(d=>setDiscussionThread(d.data.discussion))
-}
-const [discussionSearch, setDiscussionSearch] = React.useState("")
-
-
-
-
-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);
-
- const seconds = Math.floor(((new Date(new Date() - (date.getTimezoneOffset()*-60000))) - date) / 1000);
-
- let interval = Math.floor(seconds / 31536000);
- if (interval === 1) {return interval + ' year ago';}
- if (interval > 1) {return interval + ' years ago';}
-
- interval = Math.floor(seconds / 2592000);
- if (interval === 1) {return interval + ' month ago';}
- if (interval > 1) {return interval + ' months ago';}
-
- interval = Math.floor(seconds / 86400);
- if (interval === 1) {return interval + ' day ago';}
- if (interval > 1) {return interval + ' days ago';}
-
- interval = Math.floor(seconds / 3600);
- if (interval === 1) {return interval + ' hour ago';}
- if (interval > 1) {return interval + ' hours ago';}
-
- interval = Math.floor(seconds / 60);
- if (interval === 1) {return interval + ' minute ago';}
- 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})`;
-}
-
-function PostComment() {
-
- fetch(`https://lp.ardapektezol.com/api/v1/maps/${location.pathname.split('/')[2]}/discussions/${discussionThread.id}`,{
- method:"POST",
- headers:{authorization:token},
- body:JSON.stringify({"comment":document.querySelector("#discussion-send>input").value})
-})
-.then(r=>r.json())
-.then(d=>{
- document.querySelector("#discussion-send>input").value=""
- openDiscussion(discussionThread.id)
-})
-}
-
-
-const [createPostState,setCreatePostState] = React.useState(0)
-function CreatePost() {
-
- fetch(`https://lp.ardapektezol.com/api/v1/maps/${location.pathname.split('/')[2]}/discussions`,{
- method:"POST",
- headers:{authorization:token},
- body:JSON.stringify({"title":document.querySelector("#discussion-create-title").value,"content":document.querySelector("#discussion-create-content").value})
- })
- .then(r=>r.json())
- .then(d=>{
- setCreatePostState(0)
- fetchDiscussions()
- })
-}
-
-function DeletePost(post) {
-if(window.confirm(`Are you sure you want to remove post: ${post.title}?`)){
- console.log("deleted",post.id)
- fetch(`https://lp.ardapektezol.com/api/v1/maps/${location.pathname.split('/')[2]}/discussions/${post.id}`,{
- method:"DELETE",
- headers:{authorization:token},
- })
- .then(r=>r.json())
- .then(d=>{
- fetchDiscussions()
- })
-}
-}
-
-
-if(data!==null){
- console.log(data)
-
-let current_chapter = data.map.chapter_name
-let isCoop = false;
-if (data.map.game_name == "Portal 2 - Cooperative") {
- isCoop = true
-}
-
-current_chapter = data.map.chapter_name.split(" ")
-// current_chapter = current_chapter.split("-")
-current_chapter = current_chapter[1]
-
-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}
-
-
-
-
-
- {/* Leaderboards */}
-
- {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}
-
-
-
-
-
-
-
- )}
-
-
- {/* Discussions */}
-
-
- {discussionThread === null ? (
- createPostState === 0 ? (
- discussions !== null ? (
- // Main screen
- <>
-
-
setDiscussionSearch(document.querySelector("#discussion-search>input").value)} />
-
-
- {discussions.filter(f=>f.title.includes(discussionSearch)).sort((a, b) => new Date(b.updated_at) - new Date(a.updated_at))
- .map((e, i) => (
-
-
-
-
- ))}
- >
- ):(
-
- // Main screen (no posts)
- <>
-
-
setDiscussionSearch(document.querySelector("#discussion-search>input").value)} />
-
setCreatePostState(1)}>New Post
-
- no discussions
->
- )
- ):(
- // Creating post
-
-
Create post
-
setCreatePostState(0)}>X
-
-
-
-
-
- CreatePost()}>Post
-
-
-
-
- )):(
- // Post screen
-
-
- {discussionThread.title}
- setDiscussionThread(null)}>X
-
-
-
-

-
- {discussionThread.creator.user_name}
- {TimeAgo(new Date(discussionThread.created_at.replace("T"," ").replace("Z","")))}
- {discussionThread.content}
-
- {discussionThread.comments!==null?
- discussionThread.comments.sort((a, b) => new Date(a.date) - new Date(b.date))
- .map(e=>(
- <>
-

-
- {e.user.user_name}
- {TimeAgo(new Date(e.date.replace("T"," ").replace("Z","")))}
- {e.comment}
-
- >
-
- )):""}
-
-
-
-
-
e.key==="Enter"?PostComment():""}/>
-
PostComment()}>Send
-
-
-
-
-
- )}
-
-
-
-
- >
- )
-}else{
- return (
-
- )
-}
-
-
-}
-
-
--
cgit v1.2.3