X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhelpers%2FParticipant.js;h=1a24f8efef9ee242be68ec7e0af9a271fda6010a;hb=249e06be11d0f7778d99956c87d4f0a8ac7e69f7;hp=4b4b6ef51c5ee0cb72a73b9ddaca50e2d2321e1a;hpb=a748d5724c8acff6e3bb3fe6c20aa5968b65d58a;p=alttp.git diff --git a/resources/js/helpers/Participant.js b/resources/js/helpers/Participant.js index 4b4b6ef..1a24f8e 100644 --- a/resources/js/helpers/Participant.js +++ b/resources/js/helpers/Participant.js @@ -1,3 +1,22 @@ +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; @@ -24,8 +43,8 @@ export const compareResult = round => (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 = getUserName(a); + const b_name = getUserName(b); return a_name.localeCompare(b_name); }; @@ -35,6 +54,9 @@ export const findResult = (participant, round) => { return round.results.find(result => result.user_id === participant.user_id); }; +export const getUserName = participant => + participant.user ? User.getUserName(participant.user) : ''; + export const isRunner = participant => participant && participant.roles && participant.roles.includes('runner'); @@ -59,20 +81,36 @@ export const patchUser = (participant, 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, + getUserName, isRunner, isTournamentAdmin, isTournamentCrew, isTournamentMonitor, patchUser, + sortByFinished, sortByResult, + sortByUsername, };