diff --git a/js/components/Match.js b/js/components/Match.js
new file mode 100644
index 0000000..eb99e63
--- /dev/null
+++ b/js/components/Match.js
@@ -0,0 +1,228 @@
+import {
+ Button,
+ Card,
+ CardBody,
+ Input,
+ InputGroup,
+ InputGroupAddon,
+ Modal,
+ ModalBody,
+ ModalFooter,
+ ModalHeader,
+ Table
+} from 'reactstrap';
+import React from 'react';
+
+
+export class Match extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ modal: false
+ };
+ this.toggleModal = this.toggleModal.bind(this);
+ }
+
+ toggleModal() {
+ const {isSignedIn, isOwner} = this.props;
+
+ if (isSignedIn && isOwner) {
+ this.setState({modal: !this.state.modal});
+ }
+ }
+
+ render() {
+ let cardClass;
+ let smallMessage;
+ let borderClass;
+ // 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';
+ borderClass = 'border-warning';
+ smallMessage = 'Spiel läuft';
+ break;
+ case 'team1_won':
+ cardClass = 'table-success';
+ borderClass = 'border-success';
+ smallMessage = 'Gewinner: ' + this.props.match.team1;
+ break;
+ case 'team2_won':
+ cardClass = 'table-success';
+ borderClass = 'border-success';
+ smallMessage = 'Gewinner: ' + this.props.match.team2;
+ break;
+ case 'single_team':
+ cardClass = 'table-success';
+ borderClass = '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';
+ borderClass = 'border-success';
+ smallMessage = 'Spiel beendet, unentschieden';
+ break;
+ }
+ return (
+
+
+
+
+
+ {smallMessage}
+
+
);
+ }
+}
+
+function MatchModal(props) {
+ let title;
+ let actionButton = '';
+ // 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';
+ actionButton = ;
+ 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';
+ actionButton = ;
+ break;
+ case 'undecided':
+ title = 'Spiel beendet';
+ break;
+ }
+ return (
+ {title}
+
+ {props.match.state === 'in_progress' ? :
+ }
+
+
+ {actionButton}
+
+
+ );
+}
+
+function MatchTable(props) {
+ let team1Class;
+ let 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;
+ }
+ if (props.match.state === 'single_team') {
+ return (
+
+
+ | {props.match.team1} |
+
+
+ | kein Gegner |
+
+
+
);
+ } else {
+ return (
+
+
+ | {props.match.scoreTeam1} |
+ {props.match.team1} |
+
+
+ | {props.match.scoreTeam2} |
+ {props.match.team2} |
+
+
+
);
+ }
+}
+
+function EditableMatchTable(props) {
+ return (
+
+
+ |
+
+ |
+ {props.match.team1} |
+
+
+ |
+
+ |
+ {props.match.team2} |
+
+
+
);
+}
+
+class ScoreInput extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {score: this.props.score};
+ this.updateScore = this.updateScore.bind(this);
+ this.increaseScore = this.increaseScore.bind(this);
+ this.decreaseScore = this.decreaseScore.bind(this);
+ }
+
+ updateScore(event) {
+ this.setState({score: event.target.value});
+ }
+
+ increaseScore() {
+ this.setState({score: Number(this.state.score) + 1});
+ }
+
+ decreaseScore() {
+ this.setState({score: Number(this.state.score) - 1});
+ }
+
+ render() {
+ return (
+
+
+
+ );
+ }
+}
diff --git a/pages/tournament.js b/pages/tournament.js
index 3380d45..8cf898c 100644
--- a/pages/tournament.js
+++ b/pages/tournament.js
@@ -1,24 +1,7 @@
import Head from 'next/head';
import React from 'react';
import {connect} from 'react-redux';
-import {
- Button,
- Card,
- CardBody,
- Col,
- Container,
- Input,
- InputGroup,
- InputGroupAddon,
- ListGroup,
- ListGroupItem,
- Modal,
- ModalBody,
- ModalFooter,
- ModalHeader,
- Row,
- Table
-} from 'reactstrap';
+import {Col, Container, ListGroup, ListGroupItem, Row} from 'reactstrap';
import {ErrorPageComponent} from '../js/components/ErrorComponents';
import {Footer} from '../js/components/Footer';
@@ -31,6 +14,7 @@ import 'bootstrap/dist/css/bootstrap.min.css';
import '../static/css/everypage.css';
import '../static/css/tournament.css';
+import {Match} from '../js/components/Match';
class PrivateTournamentPage extends React.Component {
render() {
@@ -100,219 +84,6 @@ function Stage(props) {
);
}
-class Match extends React.Component {
- constructor(props) {
- super(props);
- this.state = {
- modal: false
- };
- this.toggleModal = this.toggleModal.bind(this);
- }
-
- toggleModal() {
- const {isSignedIn, isOwner} = this.props;
-
- if (isSignedIn && isOwner) {
- this.setState({modal: !this.state.modal});
- }
- }
-
- render() {
- let cardClass;
- let smallMessage;
- let borderClass;
- // 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';
- borderClass = 'border-warning';
- smallMessage = 'Spiel läuft';
- break;
- case 'team1_won':
- cardClass = 'table-success';
- borderClass = 'border-success';
- smallMessage = 'Gewinner: ' + this.props.match.team1;
- break;
- case 'team2_won':
- cardClass = 'table-success';
- borderClass = 'border-success';
- smallMessage = 'Gewinner: ' + this.props.match.team2;
- break;
- case 'single_team':
- cardClass = 'table-success';
- borderClass = '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';
- borderClass = 'border-success';
- smallMessage = 'Spiel beendet, unentschieden';
- break;
- }
- return (
-
-
-
-
-
- {smallMessage}
-
-
);
- }
-}
-
-function MatchModal(props) {
- let title;
- let actionButton = '';
- // 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';
- actionButton = ;
- 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';
- actionButton = ;
- break;
- case 'undecided':
- title = 'Spiel beendet';
- break;
- }
- return (
- {title}
-
- {props.match.state === 'in_progress' ? :
- }
-
-
- {actionButton}
-
-
- );
-}
-
-function MatchTable(props) {
- let team1Class;
- let 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;
- }
- if (props.match.state === 'single_team') {
- return (
-
-
- | {props.match.team1} |
-
-
- | kein Gegner |
-
-
-
);
- } else {
- return (
-
-
- | {props.match.scoreTeam1} |
- {props.match.team1} |
-
-
- | {props.match.scoreTeam2} |
- {props.match.team2} |
-
-
-
);
- }
-}
-
-function EditableMatchTable(props) {
- return (
-
-
- |
-
- |
- {props.match.team1} |
-
-
- |
-
- |
- {props.match.team2} |
-
-
-
);
-}
-
-class ScoreInput extends React.Component {
- constructor(props) {
- super(props);
- this.state = {score: this.props.score};
- this.updateScore = this.updateScore.bind(this);
- this.increaseScore = this.increaseScore.bind(this);
- this.decreaseScore = this.decreaseScore.bind(this);
- }
-
- updateScore(event) {
- this.setState({score: event.target.value});
- }
-
- increaseScore() {
- this.setState({score: Number(this.state.score) + 1});
- }
-
- decreaseScore() {
- this.setState({score: Number(this.state.score) - 1});
- }
-
- render() {
- return (
-
-
-
- );
- }
-}
-
function convertTournament(apiTournament) {
let groupStage = null;
const playoffStages = [];