Skip to content

Commit

Permalink
feat(series): support series features
Browse files Browse the repository at this point in the history
- support sorting
  • Loading branch information
AntonLantukh committed Apr 20, 2023
1 parent cffb723 commit e9189eb
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ const MediaSeriesEpisode: ScreenComponent<PlaylistItem> = ({ data }) => {
const isLoading = seriesIdLoading || isPlaylistLoading;

const [seasonFilter, setSeasonFilter] = useState<string>(episodeItem?.seasonNumber || '1');
const filters = getFiltersFromSeries(seriesPlaylist);
const filters = getFiltersFromSeries(seriesPlaylist, series);
const filteredPlaylist = useMemo(() => filterSeries(seriesPlaylist, seasonFilter), [seriesPlaylist, seasonFilter]);

// Watch history
Expand Down
35 changes: 27 additions & 8 deletions src/utils/series.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
import type { Playlist, PlaylistItem } from '#types/playlist';
import type { Season, Series } from '#types/series';

export const getFiltersFromSeries = (playlist: Playlist): string[] =>
playlist.playlist
/**
* Get an array of options for a season filter
*/
export const getFiltersFromSeries = (playlist: Playlist, series: Series | undefined): string[] => {
// For new series flow we should keep sorting set for series seasons, the order in the array of seasons can be different
if (series && 'seasons' in series) {
return (series?.seasons || []).map((el) => String(el.season_number));
}

// Old series doesn't have sorting supported and needs to be sorted manually
return playlist.playlist
.reduce((filters: string[], item) => (item.seasonNumber && filters.includes(item.seasonNumber) ? filters : filters.concat(item.seasonNumber || '')), [])
.slice()
.sort();
};

export const filterSeries = (playlist: Playlist, filter: string) => {
if (!filter) return playlist;
Expand Down Expand Up @@ -60,15 +70,24 @@ export const enrichMediaItems = (series: Series | undefined, mediaItems: { [key:
if (series) {
if ('seasons' in series) {
return series.seasons.flatMap((season: Season) =>
season.episodes.map((episode) => ({
...mediaItems[episode.media_id],
seasonNumber: String(season.season_number),
episodeNumber: String(episode.episode_number),
})),
season.episodes.map((episode) => {
const item = mediaItems[episode.media_id];

item.seasonNumber = String(season.season_number);
item.episodeNumber = String(episode.episode_number);

return item;
}),
);
}

return series.episodes.map((episode) => ({ ...mediaItems[episode.media_id], seasonNumber: '1', episodeNumber: String(episode.episode_number) }));
return series.episodes.map((episode) => {
const item = mediaItems[episode.media_id];
item.seasonNumber = '0';
item.episodeNumber = String(episode.episode_number);

return item;
});
}

return [];
Expand Down

0 comments on commit e9189eb

Please sign in to comment.