]> git.localhorst.tv Git - alttp.git/blobdiff - resources/js/helpers/Participant.js
round rolled by
[alttp.git] / resources / js / helpers / Participant.js
index d79349bca8776a65ae853943df671f8ffb8f114f..7a689960ea831945428edb9aed1aa43cb3f889a4 100644 (file)
@@ -1,28 +1,40 @@
-export const compareResult = round => (a, b) => {
+export const compareFinished = round => (a, b) => {
        const a_result = findResult(a, round);
        const b_result = findResult(b, round);
-       const a_time = a_result && !a_result.forfeit ? a_result.time : 0;
-       const b_time = b_result && !b_result.forfeit ? b_result.time : 0;
-       if (a_time) {
-               if (b_time) {
-                       if (a_time < b_time) return -1;
-                       if (b_time < a_time) return 1;
-                       return 0;
+       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_time) {
+       if (b_finished) {
                return 1;
        }
-       const a_forfeit = a_result && a_result.forfeit;
-       const b_forfeit = b_result && b_result.forfeit;
-       if (a_forfeit) {
-               if (b_forfeit) {
-                       return 0;
+       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_forfeit) {
+       if (b_placement) {
                return 1;
        }
        return compareUsername(a, b);
@@ -46,6 +58,12 @@ export const isRunner = participant =>
 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;
@@ -58,18 +76,33 @@ 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,
        isRunner,
        isTournamentAdmin,
+       isTournamentCrew,
+       isTournamentMonitor,
        patchUser,
        sortByResult,
 };