2021-10-11 17:14:55 +00:00
|
|
|
import create from 'zustand'
|
|
|
|
import striptags from 'striptags'
|
|
|
|
import { isFuture, isPast } from 'date-fns'
|
|
|
|
import { slugify } from '../helpers/string'
|
|
|
|
import { getMetadataByKey, getPostByKey, getResourcesByKey, getPeertubeIDfromUrl } from './helpers'
|
2021-10-12 12:45:52 +00:00
|
|
|
import { colours, defaultTheme } from '../assets/theme'
|
2021-10-11 17:14:55 +00:00
|
|
|
|
|
|
|
export const [useSeriesStore] = create(set => ({
|
|
|
|
series: [],
|
|
|
|
|
|
|
|
setSeries: seriesArray => {
|
|
|
|
const allSeries = seriesArray.map(({ name, organizedEvents, posts, resources, banner, summary }) => {
|
|
|
|
|
|
|
|
const allEpisodes = organizedEvents.elements.length ? organizedEvents.elements.map(ep => ({
|
|
|
|
title: ep.title,
|
|
|
|
beginsOn: ep.beginsOn,
|
|
|
|
endsOn: ep.endsOn,
|
|
|
|
description: ep.description,
|
|
|
|
media: ep.media,
|
|
|
|
image: ep.picture ? ep.picture.url : null,
|
|
|
|
peertubeId: getPeertubeIDfromUrl(getMetadataByKey(ep, 'mz:live:peertube:url')),
|
|
|
|
})) : []
|
|
|
|
|
2021-10-12 12:45:52 +00:00
|
|
|
const trailer = getResourcesByKey(resources, 'SERIES_TRAILER')?.[0]?.resourceUrl ?? null
|
|
|
|
const theme = striptags(getPostByKey(posts, 'THEME'))
|
|
|
|
|
|
|
|
|
2021-10-11 17:14:55 +00:00
|
|
|
const series = {
|
|
|
|
title: name,
|
|
|
|
subtitle: striptags(summary),
|
|
|
|
description: getPostByKey(posts, 'SERIES_INFO'),
|
|
|
|
posts: posts.elements,
|
|
|
|
resources: resources.elements,
|
|
|
|
image: banner ? banner.url : '',
|
|
|
|
episodes: {
|
|
|
|
future: allEpisodes.filter(ep => isFuture(new Date(ep.endsOn))).sort((a, b) => new Date(a.beginsOn) - new Date(b.beginsOn)),
|
|
|
|
past: allEpisodes.filter(ep => isPast(new Date(ep.endsOn))).sort((a, b) => new Date(a.beginsOn) - new Date(b.beginsOn))
|
|
|
|
},
|
|
|
|
slug: slugify(name),
|
|
|
|
credits: getPostByKey(posts, 'SERIES_CREDITS'),
|
2021-10-12 12:45:52 +00:00
|
|
|
trailer,
|
|
|
|
links: getResourcesByKey(resources, 'LINK') || [],
|
|
|
|
theme: theme ? JSON.parse(theme) : defaultTheme
|
2021-10-11 17:14:55 +00:00
|
|
|
}
|
|
|
|
return series
|
|
|
|
})
|
|
|
|
|
|
|
|
set({ series: allSeries })
|
|
|
|
}
|
|
|
|
}))
|