]> git.localhorst.tv Git - alttp.git/blob - resources/js/helpers/Participant.js
4b4b6ef51c5ee0cb72a73b9ddaca50e2d2321e1a
[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 isTournamentCrew = participant =>
45         isTournamentAdmin(participant) || isTournamentMonitor(participant);
46
47 export const isTournamentMonitor = participant =>
48         participant && participant.roles && participant.roles.includes('monitor');
49
50 export const patchUser = (participant, user) => {
51         if (!participant || !user) return participant;
52         if (participant.user_id != user.id) return participant;
53         return {
54                 ...participant,
55                 user: {
56                         ...participant.user,
57                         ...user,
58                 },
59         };
60 };
61
62 export const sortByResult = (participants, round) => {
63         if (!participants || !participants.length) return participants;
64         if (!round || !round.results || !round.results.length) return participants;
65         return participants.sort(compareResult(round));
66 };
67
68 export default {
69         compareResult,
70         compareUsername,
71         findResult,
72         isRunner,
73         isTournamentAdmin,
74         isTournamentCrew,
75         isTournamentMonitor,
76         patchUser,
77         sortByResult,
78 };