]> git.localhorst.tv Git - alttp.git/blobdiff - resources/js/helpers/Participant.js
vertical map layout
[alttp.git] / resources / js / helpers / Participant.js
index 4b4b6ef51c5ee0cb72a73b9ddaca50e2d2321e1a..1a24f8efef9ee242be68ec7e0af9a271fda6010a 100644 (file)
@@ -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,
 };