export enum Announcement { RE = 'Re', CONTRA = 'Contra', RE_NO_NINETY = 'Re: No ninety', CONTRA_NO_NINETY = 'Contra: No ninety', RE_NO_SIXTY = 'Re: No sixty', CONTRA_NO_SIXTY = 'Contra: No sixty', RE_NO_THIRTY = 'Re: No thirty', CONTRA_NO_THIRTY = 'Contra: No thirty' } /** * Returns all available announcement values */ export function getAllAnnouncementValues(): Announcement[] { return [ Announcement.RE, Announcement.RE_NO_NINETY, Announcement.RE_NO_SIXTY, Announcement.RE_NO_THIRTY, Announcement.CONTRA, Announcement.CONTRA_NO_NINETY, Announcement.CONTRA_NO_SIXTY, Announcement.CONTRA_NO_THIRTY ]; } /** * Checks if the selected announcements are a valid set of announcements. * E.g.: If RE_NO_NINETY is newly selected, RE also has to be selected * @param selectedAnnouncements The list of selected announcements */ export function checkValidity(selectedAnnouncements: Announcement[]): boolean { // First check all "RE" Announcements if(selectedAnnouncements.indexOf(Announcement.RE_NO_THIRTY) !== -1) { if(selectedAnnouncements.indexOf(Announcement.RE_NO_SIXTY) === -1) { return false; } } if(selectedAnnouncements.indexOf(Announcement.RE_NO_SIXTY) !== -1) { if(selectedAnnouncements.indexOf(Announcement.RE_NO_NINETY) === -1) { return false; } } if(selectedAnnouncements.indexOf(Announcement.RE_NO_NINETY) !== -1) { if(selectedAnnouncements.indexOf(Announcement.RE) === -1) { return false; } } // Now same for "CONTRA" if(selectedAnnouncements.indexOf(Announcement.CONTRA_NO_THIRTY) !== -1) { if(selectedAnnouncements.indexOf(Announcement.CONTRA_NO_SIXTY) === -1) { return false; } } if(selectedAnnouncements.indexOf(Announcement.CONTRA_NO_SIXTY) !== -1) { if(selectedAnnouncements.indexOf(Announcement.CONTRA_NO_NINETY) === -1) { return false; } } if(selectedAnnouncements.indexOf(Announcement.CONTRA_NO_NINETY) !== -1) { if(selectedAnnouncements.indexOf(Announcement.CONTRA) === -1) { return false; } } // all fine, return true return true } /** * Returns the names of the two highest announcements from the given list, one for RE and one for CONTRA if applicable * @param selectedAnnouncements The list of announcements to check */ export function returnTwoHighestAnnouncements(selectedAnnouncements: Announcement[]): string { let finalString: string = ''; // First check "RE" announcements if(selectedAnnouncements.indexOf(Announcement.RE_NO_THIRTY) !== -1) { finalString += Announcement.RE_NO_THIRTY; } else if (selectedAnnouncements.indexOf(Announcement.RE_NO_SIXTY) !== -1) { finalString += Announcement.RE_NO_SIXTY; } else if (selectedAnnouncements.indexOf(Announcement.RE_NO_NINETY) !== -1) { finalString += Announcement.RE_NO_NINETY; } else if (selectedAnnouncements.indexOf(Announcement.RE) !== -1) { finalString += Announcement.RE; } // If there was a "RE" announcement, add a ", " so we can list the CONTRA announcement properly if(finalString !== '') { finalString += ', '; } // Now check "CONTRA" if(selectedAnnouncements.indexOf(Announcement.CONTRA_NO_THIRTY) !== -1) { finalString += Announcement.CONTRA_NO_THIRTY; } else if (selectedAnnouncements.indexOf(Announcement.CONTRA_NO_SIXTY) !== -1) { finalString += Announcement.CONTRA_NO_SIXTY; } else if (selectedAnnouncements.indexOf(Announcement.CONTRA_NO_NINETY) !== -1) { finalString += Announcement.CONTRA_NO_NINETY; } else if (selectedAnnouncements.indexOf(Announcement.CONTRA) !== -1) { finalString += Announcement.CONTRA; } else { // Remove the last two chars from the finalString (", ") finalString = finalString.substring(0, finalString.length-2); } if(finalString === '') { finalString = 'None'; } return finalString; }