]> git.localhorst.tv Git - alttp.git/commitdiff
sort results by time
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Sun, 13 Mar 2022 20:41:22 +0000 (21:41 +0100)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Sun, 13 Mar 2022 20:41:22 +0000 (21:41 +0100)
resources/js/components/results/List.js
resources/js/helpers/Participant.js

index 11eb9a8f4f5eb1f07b7aaa7a13efb431de0923ec..448736a97bef7ee787ba6b7987f66ec9f370ced8 100644 (file)
@@ -2,9 +2,10 @@ import PropTypes from 'prop-types';
 import React from 'react';
 
 import Item from './Item';
+import { sortByResult } from '../../helpers/Participant';
 
 const List = ({ round, tournament }) => <div className="results d-flex">
-       {tournament.participants.map(participant =>
+       {sortByResult(tournament.participants, round).map(participant =>
                <Item
                        key={participant.id}
                        participant={participant}
index 8ae225c8570e59845c55891a90ecd2033e4e85b3..e5a135f1b14c47f09182898f0d92aa8aaf5cfa13 100644 (file)
@@ -1,3 +1,22 @@
+export const compareResult = round => (a, b) => {
+       const a_result = findResult(a, round);
+       const b_result = findResult(b, round);
+       const a_time = a_result ? a_result.time : 0;
+       const b_time = b_result ? 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;
+               }
+               return -1;
+       }
+       if (b_time) {
+               return 1;
+       }
+       return 0;
+};
+
 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 : '';
@@ -10,7 +29,15 @@ export const findResult = (participant, round) => {
        return round.results.find(result => result.user_id === participant.user_id);
 };
 
+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 default {
+       compareResult,
        compareUsername,
        findResult,
+       sortByResult,
 };