selected season in detail page depends on query param

This commit is contained in:
svetlagasheva 2020-05-04 19:49:42 +03:00
parent 42a16d3b6a
commit 8c5c63a281
3 changed files with 23 additions and 5 deletions

View file

@ -48,6 +48,13 @@ const withLibItem = ({ libItem, streams = {} }) => {
};
};
const withSeason = ({ season, type, id }) => {
const queryParams = new URLSearchParams([['season', season]]);
return {
meta_details_videos_season: `#/metadetails/${encodeURIComponent(type)}/${encodeURIComponent(id)}?${queryParams.toString()}`
};
};
const withVideo = ({ video, metaTransportUrl, metaItem, streams = {} }) => {
const [stream, streamTransportUrl] = typeof streams[`${encodeURIComponent(metaItem.id)}/${encodeURIComponent(video.id)}`] === 'object' ?
streams[`${encodeURIComponent(metaItem.id)}/${encodeURIComponent(video.id)}`]
@ -85,6 +92,7 @@ module.exports = {
withCatalog,
withMetaItem,
withLibItem,
withSeason,
withVideo,
withStream,
serializeStream,

View file

@ -9,7 +9,7 @@ const useMetaDetails = require('./useMetaDetails');
const useMetaExtensions = require('./useMetaExtensions');
const styles = require('./styles');
const MetaDetails = ({ urlParams }) => {
const MetaDetails = ({ urlParams, queryParams }) => {
const metaDetails = useMetaDetails(urlParams);
const { tabs, selectedMetaExtension, clearSelectedMetaExtension } = useMetaExtensions(metaDetails.meta_resources);
const metaResourceRef = React.useMemo(() => {
@ -26,6 +26,7 @@ const MetaDetails = ({ urlParams }) => {
}, [metaDetails]);
const streamsResourceRef = metaDetails.selected !== null ? metaDetails.selected.streams_resource_ref : null;
const streamsResources = metaDetails.streams_resources;
const selectedSeason = queryParams.get('season');
const selectedVideo = React.useMemo(() => {
return streamsResourceRef !== null && selectedMetaResource !== null ?
selectedMetaResource.content.content.videos.reduce((result, video) => {
@ -125,6 +126,7 @@ const MetaDetails = ({ urlParams }) => {
<VideosList
className={styles['videos-list']}
metaResource={selectedMetaResource}
season={parseInt(selectedSeason, 10)}
/>
:
null

View file

@ -3,6 +3,7 @@
const React = require('react');
const PropTypes = require('prop-types');
const classnames = require('classnames');
const deepLinking = require('stremio/common/deepLinking');
const Image = require('stremio/common/Image');
const SearchBar = require('stremio/common/SearchBar');
const SeasonsBar = require('./SeasonsBar');
@ -10,7 +11,7 @@ const Video = require('./Video');
const useSelectableSeasons = require('./useSelectableSeasons');
const styles = require('./styles');
const VideosList = ({ className, metaResource }) => {
const VideosList = ({ className, metaResource, season }) => {
const videos = React.useMemo(() => {
return metaResource && metaResource.content.type === 'Ready' ?
metaResource.content.content.videos
@ -19,8 +20,14 @@ const VideosList = ({ className, metaResource }) => {
}, [metaResource]);
const [seasons, selectedSeason, videosForSeason, selectSeason] = useSelectableSeasons(videos);
const seasonOnSelect = React.useCallback((event) => {
const seasonDeepLink = deepLinking.withSeason({
season: event.value,
type: metaResource.request.path.type_name,
id: metaResource.request.path.id
});
selectSeason(event.value);
}, []);
window.location.replace(seasonDeepLink.meta_details_videos_season);
}, [metaResource]);
const [search, setSearch] = React.useState('');
const searchInputOnChange = React.useCallback((event) => {
setSearch(event.currentTarget.value);
@ -52,7 +59,7 @@ const VideosList = ({ className, metaResource }) => {
seasons.length > 1 ?
<SeasonsBar
className={styles['seasons-bar']}
season={selectedSeason}
season={season !== null && !isNaN(season) && typeof season === 'number' && seasons.includes(season) ? season : selectedSeason}
seasons={seasons}
onSelect={seasonOnSelect}
/>
@ -88,7 +95,8 @@ const VideosList = ({ className, metaResource }) => {
VideosList.propTypes = {
className: PropTypes.string,
metaResource: PropTypes.object
metaResource: PropTypes.object,
season: PropTypes.number
};
module.exports = VideosList;