X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhelpers%2FEpisode.js;h=696d39a811385f9a7ab357af777ea84377b1da53;hb=249e06be11d0f7778d99956c87d4f0a8ac7e69f7;hp=675fb365c1ba5ad8b25b1f007ea8191d741b5862;hpb=5a575dc29f3af10f1d8e142ff9e1c6ccdfa3b075;p=alttp.git diff --git a/resources/js/helpers/Episode.js b/resources/js/helpers/Episode.js index 675fb36..696d39a 100644 --- a/resources/js/helpers/Episode.js +++ b/resources/js/helpers/Episode.js @@ -1,3 +1,5 @@ +import moment from 'moment'; + export const acceptsComms = episode => { if (!episode || !episode.channels) return false; return !!episode.channels.find(c => c.pivot && c.pivot.accept_comms); @@ -13,3 +15,63 @@ export const acceptsCrew = episode => { return !!episode.channels.find(c => c.pivot && (c.pivot.accept_comms || c.pivot.accept_tracker)); }; + +export const getSGLanguages = episode => { + if (!episode || !episode.channels) return []; + const sgChannels = episode.channels.filter( + c => c.stream_link && c.stream_link.startsWith('https://twitch.tv/speedgaming'), + ); + const langs = []; + sgChannels.forEach(channel => { + if (!channel.languages) return; + channel.languages.forEach(lang => { + if (!langs.includes(lang)) { + langs.push(lang); + } + }); + }); + return langs; +}; + +export const getSGSignupLink = (episode, lang, role) => + `https://speedgaming.org/${lang}/${role}/signup/${episode.ext_id.substr(3)}/`; + +export const hasPassed = episode => { + if (!episode || !episode.start) return false; + const now = moment(); + const end = moment(episode.start).add(episode.estimate, 'seconds'); + return end.isBefore(now); +}; + +export const hasSGRestream = episode => { + if (!episode || !episode.channels) return false; + return !!episode.channels.find( + c => c.stream_link && c.stream_link.startsWith('https://twitch.tv/speedgaming'), + ); +}; + +export const isActive = episode => { + if (!episode || !episode.start) return false; + const now = moment(); + const start = moment(episode.start).subtract(10, 'minutes'); + const end = moment(episode.start).add(episode.estimate, 'seconds'); + return start.isBefore(now) && end.isAfter(now); +}; + +export const isEventSelected = (filter, event) => { + return (filter.event || []).includes(event.id); +}; + +export const toggleEventFilter = (events, filter, event) => { + const eventFilter = filter.event || []; + if (eventFilter.includes(event.id)) { + return { + ...filter, + event: eventFilter.filter(id => id !== event.id && events.find(e => e.id === id)), + }; + } + return { + ...filter, + event: [...eventFilter, event.id], + }; +};