X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhelpers%2FTournament.js;h=ec141d12829b9758405314e052ddeae2aba9d7d7;hb=d32516335ea2534e15256c948e9c38d3de40794b;hp=5716e684948b53c84e54262f00d99b553943d755;hpb=ccaa2cf99468fea81efdf28aaa3fc72a278a95f6;p=alttp.git diff --git a/resources/js/helpers/Tournament.js b/resources/js/helpers/Tournament.js index 5716e68..ec141d1 100644 --- a/resources/js/helpers/Tournament.js +++ b/resources/js/helpers/Tournament.js @@ -1,12 +1,64 @@ import Participant from './Participant'; import Round from './Round'; +export const compareScore = (a, b) => { + const a_score = a && a.score ? a.score : 0; + const b_score = b && b.score ? b.score : 0; + if (a_score < b_score) return -1; + if (b_score < a_score) return 1; + return Participant.compareUsername(a.participant, b.participant) * -1; +}; + export const findParticipant = (tournament, user) => { if (!tournament || !tournament.participants || !tournament.participants.length) return null; if (!user || !user.id) return null; 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 patchParticipant = (tournament, participant) => { + if (!tournament) return tournament; + if (!tournament.participants || !tournament.participants.length) { + return { + ...tournament, + participants: [participant], + }; + } + if (!tournament.participants.find(p => p.id === participant.id)) { + return { + ...tournament, + participants: [...tournament.participants, participant], + }; + } + return { + ...tournament, + participants: tournament.participants.map( + p => p.id === participant.id ? participant : p, + ), + }; +}; + export const patchResult = (tournament, result) => { if (!tournament || !tournament.rounds) return tournament; return { @@ -19,6 +71,23 @@ export const patchResult = (tournament, result) => { }; }; +export const patchRound = (tournament, round) => { + if (!tournament) return tournament; + return { + ...tournament, + 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)), + }; +}; + export const sortParticipants = tournament => { if (!tournament || !tournament.participants || !tournament.participants.length) { return tournament; @@ -30,7 +99,12 @@ export const sortParticipants = tournament => { }; export default { + compareScore, findParticipant, + getRunners, + getTournamentAdmins, patchResult, + patchRound, + patchUser, sortParticipants, };