]> git.localhorst.tv Git - alttp.git/blob - resources/js/helpers/Participant.js
server calculated scoring
[alttp.git] / resources / js / helpers / Participant.js
1 export const comparePlacement = (a, b) => {
2         if (a.placement < b.placement) return -1;
3         if (b.placement < a.placement) return 1;
4         return compareUsername(a, b);
5 };
6
7 export const compareResult = round => (a, b) => {
8         const a_result = findResult(a, round);
9         const b_result = findResult(b, round);
10         const a_placement = a_result && a_result.placement ? a_result.placement : 0;
11         const b_placement = b_result && b_result.placement ? b_result.placement : 0;
12         if (a_placement) {
13                 if (b_placement) {
14                         if (a_placement < b_placement) return -1;
15                         if (b_placement < a_placement) return 1;
16                         return compareUsername(a, b);
17                 }
18                 return -1;
19         }
20         if (b_placement) {
21                 return 1;
22         }
23         return compareUsername(a, b);
24 };
25
26 export const compareUsername = (a, b) => {
27         const a_name = a && a.user && a.user.username ? a.user.username : '';
28         const b_name = b && b.user && b.user.username ? b.user.username : '';
29         return a_name.localeCompare(b_name);
30 };
31
32 export const findResult = (participant, round) => {
33         if (!participant || !participant.user_id) return null;
34         if (!round || !round.results || !round.results.length) return null;
35         return round.results.find(result => result.user_id === participant.user_id);
36 };
37
38 export const isRunner = participant =>
39         participant && participant.roles && participant.roles.includes('runner');
40
41 export const isTournamentAdmin = participant =>
42         participant && participant.roles && participant.roles.includes('admin');
43
44 export const patchUser = (participant, user) => {
45         if (!participant || !user) return participant;
46         if (participant.user_id != user.id) return participant;
47         return {
48                 ...participant,
49                 user: {
50                         ...participant.user,
51                         ...user,
52                 },
53         };
54 };
55
56 export const sortByResult = (participants, round) => {
57         if (!participants || !participants.length) return participants;
58         if (!round || !round.results || !round.results.length) return participants;
59         return participants.sort(compareResult(round));
60 };
61
62 export default {
63         compareResult,
64         compareUsername,
65         findResult,
66         isRunner,
67         isTournamentAdmin,
68         patchUser,
69         sortByResult,
70 };