Created History Page
Co-authored-by: krloer <krloer@users.noreply.github.com>
This commit is contained in:
parent
21a007c532
commit
cd6d00279e
|
@ -0,0 +1,122 @@
|
|||
import * as React from "react";
|
||||
import { BrowserRouter as Router, Link, Route, Routes } from "react-router-dom";
|
||||
import { Button, Container, Typography, Box, Stack, Card, CardContent, CardMedia, Paper, Grid, Icon } from "@mui/material";
|
||||
import AddCircleIcon from '@mui/icons-material/AddCircle';
|
||||
import KeyboardDoubleArrowDownIcon from '@mui/icons-material/KeyboardDoubleArrowDown';
|
||||
import KeyboardDoubleArrowUpIcon from '@mui/icons-material/KeyboardDoubleArrowUp';
|
||||
import Appbar from './components/AsuraBar';
|
||||
|
||||
function shorten(description, maxLength) {
|
||||
if (description.length > maxLength) {
|
||||
return description.substring(0, maxLength) + "...";
|
||||
}
|
||||
return description;
|
||||
}
|
||||
|
||||
function TournamentListItem(props) {
|
||||
const [longDescription, setLongDescription] = React.useState(false);
|
||||
const maxLength = 200;
|
||||
function toggleDescription() {
|
||||
setLongDescription(!longDescription);
|
||||
}
|
||||
function Description() {
|
||||
if (longDescription) {
|
||||
return( <Box component={Stack} direction="row">
|
||||
<Typography variant="body1" onClick={toggleDescription}>{props.tournament.description}</Typography>
|
||||
<KeyboardDoubleArrowUpIcon onClick={toggleDescription} />
|
||||
</Box> )
|
||||
} else if (props.tournament.description.length < maxLength) {
|
||||
return <Typography variant="body1" color="text.secondary" onClick={toggleDescription}>{props.tournament.description}</Typography>
|
||||
} else {
|
||||
return <Box component={Stack} direction="row">
|
||||
<Typography variant="body1" color="text.secondary" onClick={toggleDescription}>{shorten(props.tournament.description, maxLength)}</Typography>
|
||||
<KeyboardDoubleArrowDownIcon onClick={toggleDescription} />
|
||||
</Box>;
|
||||
}
|
||||
}
|
||||
return (
|
||||
<Paper elevation={8} >
|
||||
<Card>
|
||||
<CardMedia
|
||||
component="img"
|
||||
alt="tournament image"
|
||||
height="140"
|
||||
image="banner2.png"
|
||||
/>
|
||||
<CardContent align="left">
|
||||
<Typography variant="h3" component="div" align="center">{props.tournament.name} </Typography>
|
||||
|
||||
<Box component={Stack} direction="column">
|
||||
<Typography variant="body"> Start: {props.tournament.startTime.toLocaleString()} </Typography>
|
||||
<Typography variant="body"> End: {props.tournament.endTime.toLocaleString()} </Typography>
|
||||
</Box>
|
||||
|
||||
<Typography variant="h5" color="text.primary" gutterBottom> Players {props.tournament.teamCount} / {props.tournament.teamLimit} </Typography>
|
||||
<Description />
|
||||
|
||||
<Box sx={{flexGrow: 1, marginTop: "20px"}}>
|
||||
<Grid container spacing={4} justifyContent="center" wrap="wrap">
|
||||
<Grid item >
|
||||
<Link to={`/tournament/${props.tournament.id}`} >
|
||||
<Button variant="contained" color="success">
|
||||
View Tournament
|
||||
</Button>
|
||||
</Link>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Box>
|
||||
</CardContent>
|
||||
</Card>
|
||||
</Paper>
|
||||
);
|
||||
}
|
||||
|
||||
function TournamentList() {
|
||||
let [tournamentList, setTournamentList] = React.useState([]);
|
||||
|
||||
React.useEffect(() => {
|
||||
fetch(process.env.REACT_APP_API_URL + `/tournament/getTournaments`)
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
if (data.status !== "OK") {
|
||||
console.error(data);
|
||||
return;
|
||||
}
|
||||
|
||||
let tournamenthistory = []
|
||||
let today = new Date()
|
||||
let tournaments = Object.values(data.data);
|
||||
for (let i = 0; i < tournaments.length; i++) {
|
||||
tournaments[i].startTime = new Date(tournaments[i].startTime);
|
||||
tournaments[i].endTime = new Date(tournaments[i].endTime);
|
||||
if(today - tournaments[i].endTime >= 24*60*60*1000) {
|
||||
tournamenthistory.push(tournaments[i])
|
||||
}
|
||||
}
|
||||
|
||||
setTournamentList(tournamenthistory);
|
||||
})
|
||||
.catch((err) => console.log(err.message));
|
||||
}, []);
|
||||
|
||||
return <>
|
||||
<Stack spacing={3} sx={{margin: "10px auto"}}>
|
||||
{tournamentList && tournamentList.map((tournamentObject) => <TournamentListItem key={tournamentObject.id.toString()} tournament={tournamentObject} />)}
|
||||
</Stack>
|
||||
|
||||
</>;
|
||||
}
|
||||
|
||||
export default function TournamentHistory() {
|
||||
return (
|
||||
<>
|
||||
<Appbar pageTitle="Tournament History" />
|
||||
<Container sx={{minHeight: "30vh", width: "90vw", padding: "20px 20px"}} component={Container} direction="column" align="center">
|
||||
<Box component={Stack} direction="row" align="center" justifyContent="space-between" alignItems="center" sx={{flexGrow: 1}}>
|
||||
<Typography variant="h3">Past Tournaments</Typography>
|
||||
</Box>
|
||||
<TournamentList />
|
||||
</Container>
|
||||
</>
|
||||
);
|
||||
}
|
Loading…
Reference in New Issue