X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhelpers%2FTournament.js;h=792b593091b70ba62a24414325420e8645100786;hb=d1f28ea443b090c7593791eba9631796ccaeafe1;hp=2c145a83cc5aa48bf6e3b0c4688ae9c4e5967aa4;hpb=1c3b922ba7143a548c8a7526f5e4384f336e2f1e;p=alttp.git diff --git a/resources/js/helpers/Tournament.js b/resources/js/helpers/Tournament.js index 2c145a8..792b593 100644 --- a/resources/js/helpers/Tournament.js +++ b/resources/js/helpers/Tournament.js @@ -2,8 +2,7 @@ import Participant from './Participant'; import Round from './Round'; export const calculateScores = tournament => { - if (!tournament || !tournament.participants || !tournament.participants.length) return []; - const scores = tournament.participants.map(participant => ({ participant, score: 0 })); + const scores = getRunners(tournament).map(participant => ({ participant, score: 0 })); if (!tournament.rounds || !tournament.rounds.length) return scores; tournament.rounds.forEach(round => { const filtered = Participant @@ -39,7 +38,7 @@ export const compareScore = (a, b) => { const b_score = b && b.score ? b.score : 0; if (a_score < b_score) return -1; if (b_score < a_score) return 1; - return 0; + return Participant.compareUsername(a.participant, b.participant) * -1; }; export const findParticipant = (tournament, user) => { @@ -48,6 +47,28 @@ export const findParticipant = (tournament, user) => { return tournament.participants.find(p => p.user_id == user.id); }; +export const getRunners = tournament => { + if (!tournament || !tournament.participants || !tournament.participants.length) return []; + return tournament.participants + .filter(Participant.isRunner) + .sort(Participant.compareUsername); +}; + +export const getTournamentAdmins = tournament => { + if (!tournament || !tournament.participants || !tournament.participants.length) return []; + return tournament.participants + .filter(Participant.isTournamentAdmin) + .sort(Participant.compareUsername); +}; + +export const hasRunners = tournament => { + return getRunners(tournament).length > 0; +}; + +export const hasTournamentAdmins = tournament => { + return getTournamentAdmins(tournament).length > 0; +}; + export const patchResult = (tournament, result) => { if (!tournament || !tournament.rounds) return tournament; return { @@ -64,7 +85,16 @@ export const patchRound = (tournament, round) => { if (!tournament) return tournament; return { ...tournament, - rounds: tournament.rounds.map(r => r.id === round.id ? round : r), + rounds: tournament.rounds.map(r => r.id === round.id ? { ...r, ...round } : r), + }; +}; + +export const patchUser = (tournament, user) => { + if (!tournament || !tournament.participants || !user) return tournament; + if (!tournament.participants.find(p => p.user_id == user.id)) return tournament; + return { + ...tournament, + participants: tournament.participants.map(p => Participant.patchUser(p, user)), }; }; @@ -82,6 +112,10 @@ export default { calculateScores, compareScore, findParticipant, + getRunners, + getTournamentAdmins, patchResult, + patchRound, + patchUser, sortParticipants, };