X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhelpers%2FTournament.js;h=7270351512938a2f3481244d9dca91bf0c8679dd;hb=816690cc4fadff954f4407999550f7feec2884da;hp=7dbcb9b5b294386c8d4a725eeeacdcbb64b854da;hpb=a748d5724c8acff6e3bb3fe6c20aa5968b65d58a;p=alttp.git diff --git a/resources/js/helpers/Tournament.js b/resources/js/helpers/Tournament.js index 7dbcb9b..7270351 100644 --- a/resources/js/helpers/Tournament.js +++ b/resources/js/helpers/Tournament.js @@ -1,3 +1,4 @@ +import Application from './Application'; import Participant from './Participant'; import Round from './Round'; @@ -15,6 +16,13 @@ export const findParticipant = (tournament, user) => { return tournament.participants.find(p => p.user_id == user.id); }; +export const getPendingApplications = tournament => { + if (!tournament || !tournament.applications || !tournament.applications.length) return []; + return tournament.applications + .filter(Application.isPending) + .sort(Application.compareUsername); +}; + export const getRunners = tournament => { if (!tournament || !tournament.participants || !tournament.participants.length) return []; return tournament.participants @@ -22,6 +30,42 @@ export const getRunners = tournament => { .sort(Participant.compareUsername); }; +export const getLastRound = tournament => { + if (!tournament || !tournament.rounds || !tournament.rounds.length) return null; + return tournament.rounds.slice(-1)[0]; +}; + +export const canLoadMoreRounds = tournament => { + const last_round = getLastRound(tournament); + return last_round && last_round.number > 1; +}; + +export const hasScoreboard = tournament => !!(tournament && tournament.type === 'signup-async'); + +export const hasSignup = tournament => !!(tournament && tournament.type === 'signup-async'); + +export const getScoreTable = tournament => { + if (!tournament || !tournament.rounds || !tournament.rounds.length) return []; + const runners = getRunners(tournament); + if (!runners.length) return []; + const running = {}; + runners.forEach(participant => { + running[participant.id] = 0; + }); + const data = [...tournament.rounds, {}].reverse().map(round => { + const entry = { number: round.number ? `#${round.number}` : '' }; + runners.forEach(participant => { + const result = Participant.findResult(participant, round); + if (result && result.score) { + running[participant.id] += result.score; + } + entry[Participant.getUserName(participant)] = running[participant.id]; + }); + return entry; + }); + return data; +}; + export const getTournamentAdmins = tournament => { if (!tournament || !tournament.participants || !tournament.participants.length) return []; return tournament.participants @@ -59,6 +103,28 @@ export const hasTournamentMonitors = tournament => { return getTournamentMonitors(tournament).length > 0; }; +export const patchApplication = (tournament, application) => { + if (!tournament) return tournament; + if (!tournament.applications || !tournament.applications.length) { + return { + ...tournament, + applications: [application], + }; + } + if (!tournament.applications.find(a => a.user_id == application.user_id)) { + return { + ...tournament, + applications: [...tournament.applications, application], + }; + } + return { + ...tournament, + applications: tournament.applications.map( + a => a.user_id === application.user_id ? application : a, + ), + }; +}; + export const patchParticipant = (tournament, participant) => { if (!tournament) return tournament; if (!tournament.participants || !tournament.participants.length) { @@ -110,6 +176,16 @@ export const patchUser = (tournament, user) => { }; }; +export const removeApplication = (tournament, id) => { + if (!tournament || !tournament.applications || !tournament.applications.find(a => a.id == id)) { + return tournament; + } + return { + ...tournament, + applications: tournament.applications.filter(a => a.id != id), + }; +}; + export const sortParticipants = tournament => { if (!tournament || !tournament.participants || !tournament.participants.length) { return tournament; @@ -128,6 +204,8 @@ export default { getTournamentCrew, getTournamentMonitors, hasRunners, + hasScoreboard, + hasSignup, hasTournamentAdmins, hasTournamentCrew, hasTournamentMonitors,