From ea69521912fa8d7f51c0460ad40937aa82e61cc1 Mon Sep 17 00:00:00 2001 From: Lachezar Lechev Date: Fri, 17 Oct 2025 12:46:46 +0300 Subject: [PATCH 1/2] fix: metaDetails redirect when route ends with / Signed-off-by: Lachezar Lechev --- src/routes/MetaDetails/MetaDetails.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/routes/MetaDetails/MetaDetails.js b/src/routes/MetaDetails/MetaDetails.js index d806ffed5..7d6f21d69 100644 --- a/src/routes/MetaDetails/MetaDetails.js +++ b/src/routes/MetaDetails/MetaDetails.js @@ -81,7 +81,11 @@ const MetaDetails = ({ urlParams, queryParams }) => { const handleEpisodeSearch = React.useCallback((season, episode) => { const searchVideoHash = encodeURIComponent(`${urlParams.id}:${season}:${episode}`); const url = window.location.hash; - const searchVideoPath = url.replace(encodeURIComponent(urlParams.videoId), searchVideoHash); + + const searchVideoPath = (urlParams.videoId === undefined || urlParams.videoId === null || urlParams.videoId === '') ? + url + (!url.endsWith('/') ? '/' : '') + searchVideoHash + : url.replace(encodeURIComponent(urlParams.videoId), searchVideoHash); + window.location = searchVideoPath; }, [urlParams, window.location]); From 2de2e89446fac251c62d3d2b9f40a7b28ec58f15 Mon Sep 17 00:00:00 2001 From: Lachezar Lechev Date: Fri, 17 Oct 2025 14:09:27 +0300 Subject: [PATCH 2/2] fix: meta details - don't set streamPath if videoId is empty string - fix season selection path inconsistencies Signed-off-by: Lachezar Lechev --- src/routes/MetaDetails/EpisodePicker/EpisodePicker.tsx | 4 ++++ src/routes/MetaDetails/useMetaDetails.js | 2 +- src/routes/MetaDetails/useSeason.js | 7 ++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/routes/MetaDetails/EpisodePicker/EpisodePicker.tsx b/src/routes/MetaDetails/EpisodePicker/EpisodePicker.tsx index 256c827a9..d00429638 100644 --- a/src/routes/MetaDetails/EpisodePicker/EpisodePicker.tsx +++ b/src/routes/MetaDetails/EpisodePicker/EpisodePicker.tsx @@ -16,6 +16,10 @@ const EpisodePicker = ({ className, onSubmit }: Props) => { const { initialSeason, initialEpisode } = useMemo(() => { const splitPath = window.location.hash.split('/'); + if (splitPath[splitPath.length - 1] === '') { + // remove the empty element + splitPath.pop(); + } const videoId = decodeURIComponent(splitPath[splitPath.length - 1]); const [, pathSeason, pathEpisode] = videoId ? videoId.split(':') : []; return { diff --git a/src/routes/MetaDetails/useMetaDetails.js b/src/routes/MetaDetails/useMetaDetails.js index c3790fddb..f86259345 100644 --- a/src/routes/MetaDetails/useMetaDetails.js +++ b/src/routes/MetaDetails/useMetaDetails.js @@ -48,7 +48,7 @@ const useMetaDetails = (urlParams) => { id: urlParams.id, extra: [] }, - streamPath: typeof urlParams.videoId === 'string' ? + streamPath: typeof urlParams.videoId === 'string' && urlParams.videoId !== '' ? { resource: 'stream', type: urlParams.type, diff --git a/src/routes/MetaDetails/useSeason.js b/src/routes/MetaDetails/useSeason.js index 9d958a5cf..ec310c656 100644 --- a/src/routes/MetaDetails/useSeason.js +++ b/src/routes/MetaDetails/useSeason.js @@ -12,7 +12,12 @@ const useSeason = (urlParams, queryParams) => { const setSeason = React.useCallback((season) => { const nextQueryParams = new URLSearchParams(queryParams); nextQueryParams.set('season', season); - window.location.replace(`#${urlParams.path}?${nextQueryParams}`); + const path = urlParams.path.endsWith('/') ? + // remove the trailing / + urlParams.path.slice(0, -1): + urlParams.path; + + window.location.replace(`#${path}?${nextQueryParams}`); }, [urlParams, queryParams]); return [season, setSeason]; };