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'
|
2021-10-15 13:37:54 +00:00
|
|
|
import { getMetadataByKey, getPostByKey, getResourcesByKey, getPeertubeIDfromUrl, getEpisodeCode } 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 => {
|
2021-10-15 13:37:54 +00:00
|
|
|
const allSeries = seriesArray.map(({ name, organizedEvents, posts, resources, banner, summary, members }) => {
|
|
|
|
|
2021-10-11 17:14:55 +00:00
|
|
|
|
|
|
|
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,
|
2021-10-15 13:37:54 +00:00
|
|
|
peertubeId: getPeertubeIDfromUrl(getMetadataByKey(ep, 'peertube:url')),
|
|
|
|
code: getEpisodeCode(ep)
|
2021-10-11 17:14:55 +00:00
|
|
|
})) : []
|
|
|
|
|
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-15 13:37:54 +00:00
|
|
|
const orgLinks = getResourcesByKey(resources, 'ORG_LINK:')?.map(link => link.title)
|
|
|
|
|
|
|
|
console.log({ orgLinks })
|
2021-10-12 12:45:52 +00:00
|
|
|
|
|
|
|
|
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,
|
2021-10-15 13:37:54 +00:00
|
|
|
links: getResourcesByKey(resources, 'SERIES_LINK') || [],
|
|
|
|
theme: theme ? JSON.parse(theme) : defaultTheme,
|
|
|
|
hosts: members.elements.filter(({ actor }) => actor.name !== 'streamappbot')
|
2021-10-11 17:14:55 +00:00
|
|
|
}
|
|
|
|
return series
|
|
|
|
})
|
|
|
|
|
|
|
|
set({ series: allSeries })
|
|
|
|
}
|
|
|
|
}))
|