]> git.localhorst.tv Git - alttp.git/blob - resources/js/helpers/Tournament.js
7dbcb9b5b294386c8d4a725eeeacdcbb64b854da
[alttp.git] / resources / js / helpers / Tournament.js
1 import Participant from './Participant';
2 import Round from './Round';
3
4 export const compareScore = (a, b) => {
5         const a_score = a && a.score ? a.score : 0;
6         const b_score = b && b.score ? b.score : 0;
7         if (a_score < b_score) return -1;
8         if (b_score < a_score) return 1;
9         return Participant.compareUsername(a.participant, b.participant) * -1;
10 };
11
12 export const findParticipant = (tournament, user) => {
13         if (!tournament || !tournament.participants || !tournament.participants.length) return null;
14         if (!user || !user.id) return null;
15         return tournament.participants.find(p => p.user_id == user.id);
16 };
17
18 export const getRunners = tournament => {
19         if (!tournament || !tournament.participants || !tournament.participants.length) return [];
20         return tournament.participants
21                 .filter(Participant.isRunner)
22                 .sort(Participant.compareUsername);
23 };
24
25 export const getTournamentAdmins = tournament => {
26         if (!tournament || !tournament.participants || !tournament.participants.length) return [];
27         return tournament.participants
28                 .filter(Participant.isTournamentAdmin)
29                 .sort(Participant.compareUsername);
30 };
31
32 export const getTournamentCrew = tournament => {
33         if (!tournament || !tournament.participants || !tournament.participants.length) return [];
34         return tournament.participants
35                 .filter(Participant.isTournamentCrew)
36                 .sort(Participant.compareUsername);
37 };
38
39 export const getTournamentMonitors = tournament => {
40         if (!tournament || !tournament.participants || !tournament.participants.length) return [];
41         return tournament.participants
42                 .filter(Participant.isTournamentMonitor)
43                 .sort(Participant.compareUsername);
44 };
45
46 export const hasRunners = tournament => {
47         return getRunners(tournament).length > 0;
48 };
49
50 export const hasTournamentAdmins = tournament => {
51         return getTournamentAdmins(tournament).length > 0;
52 };
53
54 export const hasTournamentCrew = tournament => {
55         return getTournamentCrew(tournament).length > 0;
56 };
57
58 export const hasTournamentMonitors = tournament => {
59         return getTournamentMonitors(tournament).length > 0;
60 };
61
62 export const patchParticipant = (tournament, participant) => {
63         if (!tournament) return tournament;
64         if (!tournament.participants || !tournament.participants.length) {
65                 return {
66                         ...tournament,
67                         participants: [participant],
68                 };
69         }
70         if (!tournament.participants.find(p => p.id === participant.id)) {
71                 return {
72                         ...tournament,
73                         participants: [...tournament.participants, participant],
74                 };
75         }
76         return {
77                 ...tournament,
78                 participants: tournament.participants.map(
79                         p => p.id === participant.id ? participant : p,
80                 ),
81         };
82 };
83
84 export const patchResult = (tournament, result) => {
85         if (!tournament || !tournament.rounds) return tournament;
86         return {
87                 ...tournament,
88                 rounds: tournament.rounds.map(round =>
89                         round.id === result.round_id
90                                 ? Round.patchResult(round, result)
91                                 : round
92                 ),
93         };
94 };
95
96 export const patchRound = (tournament, round) => {
97         if (!tournament) return tournament;
98         return {
99                 ...tournament,
100                 rounds: tournament.rounds.map(r => r.id === round.id ? { ...r, ...round } : r),
101         };
102 };
103
104 export const patchUser = (tournament, user) => {
105         if (!tournament || !tournament.participants || !user) return tournament;
106         if (!tournament.participants.find(p => p.user_id == user.id)) return tournament;
107         return {
108                 ...tournament,
109                 participants: tournament.participants.map(p => Participant.patchUser(p, user)),
110         };
111 };
112
113 export const sortParticipants = tournament => {
114         if (!tournament || !tournament.participants || !tournament.participants.length) {
115                 return tournament;
116         }
117         return {
118                 ...tournament,
119                 participants: tournament.participants.sort(Participant.compareUsername),
120         };
121 };
122
123 export default {
124         compareScore,
125         findParticipant,
126         getRunners,
127         getTournamentAdmins,
128         getTournamentCrew,
129         getTournamentMonitors,
130         hasRunners,
131         hasTournamentAdmins,
132         hasTournamentCrew,
133         hasTournamentMonitors,
134         patchResult,
135         patchRound,
136         patchUser,
137         sortParticipants,
138 };