import Head from 'next/head'; import React from 'react'; import {ErrorPageComponent} from '../js/components/ErrorComponents'; import {getTournamentMatches, getTournamentMeta} from '../js/redux/tournamentApi'; import { Col, Container, DropdownItem, DropdownMenu, DropdownToggle, Navbar, NavbarBrand, Row, UncontrolledDropdown, Spinner } from 'reactstrap'; import {Match} from '../js/components/Match'; import {sortMatchesByPositionAscending} from '../js/utils/sorting'; function FullscreenPage(props) { return (
); } function Matches(props) { let matches; if (props.matches == null) { matches = (
lade Matches
); } else if (props.matches.length === 0) { matches = (
keine Matches
); } else { matches = ( {props.matches.sort(sortMatchesByPositionAscending()).map( match => )} ); } return (
{matches}
); } function FilterDropdown(props) { return ( Match-Filter: {props.selected.label} {Object.keys(matchFilters).map(matchFilter => props.select(matchFilters[matchFilter])}> {matchFilters[matchFilter].label} )} ); } function FullscreenPageHeader(props) { return ( {props.title} ); } const matchFilters = { 'all': {backend: null, label: 'alle'}, 'in_progress': {backend: 'in_progress', label: 'laufend'}, 'upcoming': {backend: 'upcoming', label: 'kommend'}, 'not_started': {backend: 'not_started', label: 'bereit zum Starten'}, 'finished': {backend: 'finished', label: 'beendet'}, 'single_team': {backend: 'single_team', label: 'ohne Gegner'}, 'not_ready': {backend: 'not_ready', label: 'noch nicht festgelegt'} }; class Main extends React.Component { static async getInitialProps({query}) { return {query}; } constructor(props) { super(props); this.state = { tournamentMeta: null, matches: [], matchFilter: matchFilters.all, loadedMeta: false, loadedMatches: false }; this.onTournamentRequestSuccess = this.onTournamentRequestSuccess.bind(this); this.onTournamentRequestError = this.onTournamentRequestError.bind(this); this.onTournamentMatchesRequestSuccess = this.onTournamentMatchesRequestSuccess.bind(this); this.onTournamentMatchesRequestError = this.onTournamentMatchesRequestError.bind(this); this.updateMatches = this.updateMatches.bind(this); this.selectFilter = this.selectFilter.bind(this); } selectFilter(filter) { this.setState({matchFilter: filter, loadedMatches: false}); this.updateMatches(); } componentDidMount() { document.body.classList.add('hide-cursor'); const tournamentId = this.props.query.code; getTournamentMeta(tournamentId, this.onTournamentRequestSuccess, this.onTournamentRequestError); this.updateMatches(); const intervalId = setInterval(this.updateMatches, 10000); this.setState({intervalId: intervalId}); } componentWillUnmount() { clearInterval(this.state.intervalId); } updateMatches() { const tournamentId = this.props.query.code; getTournamentMatches(tournamentId, this.onTournamentMatchesRequestSuccess, this.onTournamentMatchesRequestError, this.state.matchFilter.backend); } onTournamentRequestSuccess(requestStatus, tournament) { this.setState({metaStatus: requestStatus, tournamentMeta: tournament, loadedMeta: true}); } onTournamentRequestError(error) { if (error.response) { this.setState({metaStatus: error.response.status, loadedMeta: true}); } else { this.setState({metaStatus: -1, loadedMeta: true}); } } onTournamentMatchesRequestSuccess(requestStatus, matches) { this.setState({matchesStatus: requestStatus, matches: matches, loadedMatches: true}); } onTournamentMatchesRequestError(error) { if (error.response) { this.setState({matchesStatus: error.response.status, loadedMatches: true}); } else { this.setState({matchesStatus: -1, loadedMatches: true}); } } render() { const {metaStatus, matchesStatus, tournamentMeta, matches} = this.state; const filter = { selected: this.state.matchFilter, select: this.selectFilter }; if (!this.state.loadedMeta) { return (
Vollbild-Ansicht: turnie.re lade Vollbild-Ansicht
); } if (!this.state.loadedMatches) { return (
{tournamentMeta.name}: turnie.re
); } if (metaStatus === 200 && matchesStatus === 200) { return (
{tournamentMeta.name}: turnie.re
); } else { return ; } } } export default Main;