diff --git a/pages/tournament.js b/pages/tournament.js index efe7116..610ccd6 100644 --- a/pages/tournament.js +++ b/pages/tournament.js @@ -1,23 +1,52 @@ import Head from 'next/head' import React from 'react' -import {Container, ListGroup, ListGroupItem} from 'reactstrap'; +import { + Button, + Card, + CardBody, + Col, + Container, + ListGroup, + ListGroupItem, + Modal, + ModalBody, + ModalFooter, + ModalHeader, + Row, + Table +} from 'reactstrap'; import 'bootstrap/dist/css/bootstrap.min.css'; import {BigImage, Footer, TurniereNavigation} from '../js/CommonComponents.js' import '../static/everypage.css' -import {getRequest} from "../js/api"; +import '../static/css/tournament.css' +import {getRequest} from '../js/api'; function Tournament(props) { + let matches = [ + {scoreTeam1: 1, team1: 'Eins', scoreTeam2: 2, team2: 'Zwei', state: 'in_progress'}, + {scoreTeam1: 3, team1: 'Eins', scoreTeam2: 2, team2: 'Zwei', state: 'team1_won'}, + {scoreTeam1: 1, team1: 'Eins', scoreTeam2: 3, team2: 'Zwei', state: 'team2_won'}, + {scoreTeam1: 1, team1: 'Eins', scoreTeam2: 0, team2: 'Zwei', state: 'single_team'}, + {scoreTeam1: 1, team1: 'Eins', scoreTeam2: 0, team2: 'Zwei', state: 'not_ready'}, + {scoreTeam1: 1, team1: 'Eins', scoreTeam2: 0, team2: 'Zwei', state: 'not_started'}, + {scoreTeam1: 2, team1: 'Eins', scoreTeam2: 2, team2: 'Zwei', state: 'undecided'}]; return ( - - Turnier bearbeiten -

{props.tournament.description}

- - - {props.tournament.isPublic ? 'Das Turnier ist öffentlich.' : 'Das Turnier ist privat.'} - - Turnier-Code: {props.tournament.code} - -
+
+ + Turnier bearbeiten +

{props.tournament.description}

+ + + {props.tournament.isPublic ? 'Das Turnier ist öffentlich.' : 'Das Turnier ist privat.'} + + Turnier-Code: {props.tournament.code} + +
+
+ + +
+
); } @@ -29,6 +58,173 @@ function TournamentContainer(props) { } } +function Stage(props) { + return (
+ +

{props.level}

+ + {props.matches.map((match => ( + + )))} + +
+
); +} + +class Match extends React.Component { + constructor(props) { + super(props); + this.state = { + isHovered: false, + modal: false + }; + this.handleHover = this.handleHover.bind(this); + this.toggleModal = this.toggleModal.bind(this); + } + + handleHover() { + this.setState({isHovered: !this.state.isHovered}); + } + + toggleModal() { + this.setState({modal: !this.state.modal}) + } + + render() { + let cardClass, team1Class, team2Class, smallMessage; + //possible states: single_team not_ready not_started in_progress team1_won team2_won undecided + switch (this.props.match.state) { + case 'in_progress': + cardClass = 'table-warning border-warning'; + smallMessage = 'Spiel läuft'; + break; + case 'team1_won': + team1Class = 'font-weight-bold'; + team2Class = 'lost-team'; + cardClass = 'table-success border-success'; + smallMessage = 'Gewinner: ' + this.props.match.team1; + break; + case 'team2_won': + team1Class = 'lost-team'; + team2Class = 'font-weight-bold'; + cardClass = 'table-success border-success'; + smallMessage = 'Gewinner: ' + this.props.match.team2; + break; + case 'single_team': + team2Class = 'text-muted'; + cardClass = 'table-success border-success'; + smallMessage = 'kein Gegner, Team kommt weiter'; + break; + case 'not_ready': + smallMessage = 'Spiel kann noch nicht gestartet werden'; + break; + case 'not_started': + smallMessage = 'Spiel kann gestartet werden'; + break; + case 'undecided': + cardClass = 'table-success border-success'; + smallMessage = 'Spiel beendet, unentschieden'; + break; + } + return ( +
+ + + + + + {smallMessage} + +
+ ); + } +} + +function MatchModal(props) { + let title; + //possible states: single_team not_ready not_started in_progress team1_won team2_won undecided + switch (props.match.state) { + case 'in_progress': + title = 'Spiel läuft'; + break; + case 'team1_won': + title = 'Spiel beendet'; + break; + case 'team2_won': + title = 'Spiel beendet'; + break; + case 'single_team': + title = 'kein Gegner, Team kommt weiter'; + break; + case 'not_ready': + title = 'Spiel kann noch nicht gestartet werden'; + break; + case 'not_started': + title = 'Spiel kann gestartet werden'; + break; + case 'undecided': + title = 'Spiel beendet'; + break; + } + return ( + + {title} + + + + + {props.match.state === 'not_started' ? + : ''}{' '} + + + + ); +} + +function MatchTable(props) { + let team1Class, team2Class; + //possible states: single_team not_ready not_started in_progress team1_won team2_won undecided + switch (props.match.state) { + case 'in_progress': + break; + case 'team1_won': + team1Class = 'font-weight-bold'; + team2Class = 'lost-team'; + break; + case 'team2_won': + team1Class = 'lost-team'; + team2Class = 'font-weight-bold'; + break; + case 'single_team': + team2Class = 'text-muted'; + break; + case 'not_ready': + break; + case 'not_started': + break; + case 'undecided': + break; + } + return ( + + + + {props.match.state !== 'single_team' ? + : ''} + + + + {props.match.state !== 'single_team' ? + : ''} + + + +
{props.match.scoreTeam1}{props.match.team1}
{props.match.scoreTeam2}{props.match.state === 'single_team' ? 'kein Gegner' : props.match.team2}
+ ) +} + + class Main extends React.Component { constructor(props) { super(props); diff --git a/static/css/tournament.css b/static/css/tournament.css new file mode 100644 index 0000000..91d8965 --- /dev/null +++ b/static/css/tournament.css @@ -0,0 +1,15 @@ +.stage { + width: 1em; +} + +.lost-team { + text-decoration: line-through; +} + +.stages > div:nth-child(odd) { + background-color: #f8f8f8; +} + +.minw-25 { + min-width: 25%; +} \ No newline at end of file