]> git.localhorst.tv Git - alttp.git/blobdiff - resources/js/helpers/Tournament.js
application admin UI
[alttp.git] / resources / js / helpers / Tournament.js
index ec141d12829b9758405314e052ddeae2aba9d7d7..60354c2b6bdeae9d927a0cd32714b74e6941d830 100644 (file)
@@ -1,3 +1,4 @@
+import Application from './Application';
 import Participant from './Participant';
 import Round from './Round';
 
@@ -15,6 +16,13 @@ export const findParticipant = (tournament, user) => {
        return tournament.participants.find(p => p.user_id == user.id);
 };
 
+export const getPendingApplications = tournament => {
+       if (!tournament || !tournament.applications || !tournament.applications.length) return [];
+       return tournament.applications
+               .filter(Application.isPending)
+               .sort(Application.compareUsername);
+};
+
 export const getRunners = tournament => {
        if (!tournament || !tournament.participants || !tournament.participants.length) return [];
        return tournament.participants
@@ -29,6 +37,20 @@ export const getTournamentAdmins = tournament => {
                .sort(Participant.compareUsername);
 };
 
+export const getTournamentCrew = tournament => {
+       if (!tournament || !tournament.participants || !tournament.participants.length) return [];
+       return tournament.participants
+               .filter(Participant.isTournamentCrew)
+               .sort(Participant.compareUsername);
+};
+
+export const getTournamentMonitors = tournament => {
+       if (!tournament || !tournament.participants || !tournament.participants.length) return [];
+       return tournament.participants
+               .filter(Participant.isTournamentMonitor)
+               .sort(Participant.compareUsername);
+};
+
 export const hasRunners = tournament => {
        return getRunners(tournament).length > 0;
 };
@@ -37,6 +59,36 @@ export const hasTournamentAdmins = tournament => {
        return getTournamentAdmins(tournament).length > 0;
 };
 
+export const hasTournamentCrew = tournament => {
+       return getTournamentCrew(tournament).length > 0;
+};
+
+export const hasTournamentMonitors = tournament => {
+       return getTournamentMonitors(tournament).length > 0;
+};
+
+export const patchApplication = (tournament, application) => {
+       if (!tournament) return tournament;
+       if (!tournament.applications || !tournament.applications.length) {
+               return {
+                       ...tournament,
+                       applications: [application],
+               };
+       }
+       if (!tournament.applications.find(a => a.user_id == application.user_id)) {
+               return {
+                       ...tournament,
+                       applications: [...tournament.applications, application],
+               };
+       }
+       return {
+               ...tournament,
+               applications: tournament.applications.map(
+                       a => a.user_id === application.user_id ? application : a,
+               ),
+       };
+};
+
 export const patchParticipant = (tournament, participant) => {
        if (!tournament) return tournament;
        if (!tournament.participants || !tournament.participants.length) {
@@ -88,6 +140,16 @@ export const patchUser = (tournament, user) => {
        };
 };
 
+export const removeApplication = (tournament, id) => {
+       if (!tournament || !tournament.applications || !tournament.applications.find(a => a.id == id)) {
+               return tournament;
+       }
+       return {
+               ...tournament,
+               applications: tournament.applications.filter(a => a.id != id),
+       };
+};
+
 export const sortParticipants = tournament => {
        if (!tournament || !tournament.participants || !tournament.participants.length) {
                return tournament;
@@ -103,6 +165,12 @@ export default {
        findParticipant,
        getRunners,
        getTournamentAdmins,
+       getTournamentCrew,
+       getTournamentMonitors,
+       hasRunners,
+       hasTournamentAdmins,
+       hasTournamentCrew,
+       hasTournamentMonitors,
        patchResult,
        patchRound,
        patchUser,