134 lines
4.3 KiB
JavaScript
134 lines
4.3 KiB
JavaScript
import {getRequest} from './backendApi';
|
|
import {getState} from '../api';
|
|
|
|
export function getTournament(code, successCallback, errorCallback) {
|
|
getRequest(getState(), '/tournaments/' + code)
|
|
.then(response => {
|
|
successCallback(response.status, convertTournament(response.data));
|
|
})
|
|
.catch(errorCallback);
|
|
}
|
|
|
|
export function getGroup(groupId, successCallback, errorCallback) {
|
|
getRequest(getState(), '/groups/' + groupId)
|
|
.then(response => {
|
|
successCallback(response.status, convertGroup(response.data));
|
|
})
|
|
.catch(errorCallback);
|
|
}
|
|
|
|
export function getStage(stageId, successCallback, errorCallback) {
|
|
getRequest(getState(), '/stages/' + stageId)
|
|
.then(response => {
|
|
successCallback(response.status, convertPlayoffStage(response.data));
|
|
})
|
|
.catch(errorCallback);
|
|
}
|
|
|
|
export function getTournamentMeta(tournamentId, successCallback, errorCallback) {
|
|
getRequest(getState(), '/tournaments/' + tournamentId + '?simple=true')
|
|
.then(response => {
|
|
successCallback(response.status, response.data);
|
|
})
|
|
.catch(errorCallback);
|
|
}
|
|
|
|
export function getTournamentMatches(tournamentId, successCallback, errorCallback, matchState=null) {
|
|
let matchFilter = '';
|
|
if (matchState) {
|
|
matchFilter = '?state=' + matchState;
|
|
}
|
|
getRequest(getState(), '/tournaments/' + tournamentId + '/matches' + matchFilter)
|
|
.then(response => {
|
|
successCallback(response.status, response.data.sort((a, b) => a.position > b.position).map(match => convertMatch(match)));
|
|
})
|
|
.catch(errorCallback);
|
|
}
|
|
|
|
|
|
function convertTournament(apiTournament) {
|
|
let groupStage = null;
|
|
const playoffStages = [];
|
|
for (const apiStage of apiTournament.stages) {
|
|
if (apiStage.groups.length > 0) {
|
|
// group stage
|
|
groupStage = {groups: apiStage.groups.map(group => convertGroup(group))};
|
|
} else {
|
|
// playoff stage
|
|
playoffStages.push(convertPlayoffStage(apiStage));
|
|
}
|
|
}
|
|
return {
|
|
id: apiTournament.id,
|
|
code: apiTournament.code,
|
|
description: apiTournament.description,
|
|
name: apiTournament.name,
|
|
isPublic: apiTournament.public,
|
|
ownerUsername: apiTournament.owner_username,
|
|
groupStage: groupStage,
|
|
playoffStages: playoffStages
|
|
};
|
|
}
|
|
|
|
function convertPlayoffStage(apiStage) {
|
|
return {
|
|
id: apiStage.id, level: apiStage.level, matches: apiStage.matches.sort((a, b) => a.position > b.position).map(match => convertMatch(match, false))
|
|
};
|
|
}
|
|
|
|
function convertGroup(apiGroup) {
|
|
return {
|
|
id: apiGroup.id,
|
|
number: apiGroup.number,
|
|
scores: apiGroup.group_scores.sort((a, b) => b.group_points > a.group_points),
|
|
matches: apiGroup.matches.sort((a, b) => a.position > b.position).map(match => convertMatch(match, true))
|
|
};
|
|
}
|
|
|
|
function convertMatch(apiMatch, allowUndecided) {
|
|
const result = {
|
|
id: apiMatch.id, state: apiMatch.state, allowUndecided: allowUndecided,
|
|
winnerTeamId: apiMatch.winner === null ? null : apiMatch.winner.id
|
|
};
|
|
|
|
if (apiMatch.match_scores.length === 2) {
|
|
result.team1 = {
|
|
name: apiMatch.match_scores[0].team.name,
|
|
id: apiMatch.match_scores[0].team.id,
|
|
score: apiMatch.match_scores[0].points,
|
|
scoreId: apiMatch.match_scores[0].id
|
|
};
|
|
result.team2 = {
|
|
name: apiMatch.match_scores[1].team.name,
|
|
id: apiMatch.match_scores[1].team.id,
|
|
score: apiMatch.match_scores[1].points,
|
|
scoreId: apiMatch.match_scores[1].id
|
|
};
|
|
} else if (apiMatch.match_scores.length === 1) {
|
|
result.team1 = {
|
|
name: apiMatch.match_scores[0].team.name,
|
|
id: apiMatch.match_scores[0].team.id,
|
|
score: apiMatch.match_scores[0].points,
|
|
scoreId: apiMatch.match_scores[0].id
|
|
};
|
|
result.team2 = {
|
|
name: 'TBD',
|
|
id: null,
|
|
score: 0
|
|
};
|
|
} else {
|
|
result.team1 = {
|
|
name: 'TBD',
|
|
id: null,
|
|
score: 0
|
|
};
|
|
result.team2 = {
|
|
name: 'TBD',
|
|
id: null,
|
|
score: 0
|
|
};
|
|
}
|
|
|
|
return result;
|
|
}
|