X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhelpers%2FParticipant.js;h=d7bdd7c4a41055a8f7d067c2f44c1f02ffc1a5b2;hb=6f22614d8c68c68c88b44804802cdffeb3c6a3c7;hp=8ae225c8570e59845c55891a90ecd2033e4e85b3;hpb=ccaa2cf99468fea81efdf28aaa3fc72a278a95f6;p=alttp.git diff --git a/resources/js/helpers/Participant.js b/resources/js/helpers/Participant.js index 8ae225c..d7bdd7c 100644 --- a/resources/js/helpers/Participant.js +++ b/resources/js/helpers/Participant.js @@ -1,6 +1,50 @@ +import User from './User'; + +export const compareFinished = round => (a, b) => { + const a_result = findResult(a, round); + const b_result = findResult(b, round); + const a_finished = a_result && a_result.has_finished; + const b_finished = b_result && b_result.has_finished; + if (a_finished) { + if (b_finished) { + return compareUsername(a, b); + } + return -1; + } + if (b_finished) { + return 1; + } + return compareUsername(a, b); +}; + +export const comparePlacement = (a, b) => { + if (a.placement < b.placement) return -1; + if (b.placement < a.placement) return 1; + return compareUsername(a, b); +}; + +export const compareResult = round => (a, b) => { + const a_result = findResult(a, round); + const b_result = findResult(b, round); + const a_placement = a_result && a_result.placement ? a_result.placement : 0; + const b_placement = b_result && b_result.placement ? b_result.placement : 0; + if (a_placement) { + if (b_placement) { + if (a_placement < b_placement) return -1; + if (b_placement < a_placement) return 1; + return compareUsername(a, b); + } + return -1; + } + if (b_placement) { + return 1; + } + return compareUsername(a, b); +}; + export const compareUsername = (a, b) => { - const a_name = a && a.user && a.user.username ? a.user.username : ''; - const b_name = b && b.user && b.user.username ? b.user.username : ''; + const a_name = a && a.user ? User.getUserName(a.user) : ''; + const b_name = b && b.user ? User.getUserName(b.user) : ''; return a_name.localeCompare(b_name); }; @@ -10,7 +54,57 @@ export const findResult = (participant, round) => { return round.results.find(result => result.user_id === participant.user_id); }; +export const isRunner = participant => + participant && participant.roles && participant.roles.includes('runner'); + +export const isTournamentAdmin = participant => + participant && participant.roles && participant.roles.includes('admin'); + +export const isTournamentCrew = participant => + isTournamentAdmin(participant) || isTournamentMonitor(participant); + +export const isTournamentMonitor = participant => + participant && participant.roles && participant.roles.includes('monitor'); + +export const patchUser = (participant, user) => { + if (!participant || !user) return participant; + if (participant.user_id != user.id) return participant; + return { + ...participant, + user: { + ...participant.user, + ...user, + }, + }; +}; + +export const sortByFinished = (participants, round) => { + if (!participants || !participants.length) return participants; + if (!round || !round.results || !round.results.length) return participants; + return participants.sort(compareFinished(round)); +}; + +export const sortByResult = (participants, round) => { + if (!participants || !participants.length) return participants; + if (!round || !round.results || !round.results.length) return participants; + return participants.sort(compareResult(round)); +}; + +export const sortByUsername = (participants, round) => { + if (!participants || !participants.length) return participants; + if (!round || !round.results || !round.results.length) return participants; + return participants.sort(compareUsername); +}; + export default { + compareFinished, + compareResult, compareUsername, findResult, + isRunner, + isTournamentAdmin, + isTournamentCrew, + isTournamentMonitor, + patchUser, + sortByResult, };