mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-04-20 06:32:11 +00:00
selected season in detail page depends on query param
This commit is contained in:
parent
42a16d3b6a
commit
8c5c63a281
3 changed files with 23 additions and 5 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue