From 2179637d437999290eaa4152f6f37c71fc3d8ba3 Mon Sep 17 00:00:00 2001 From: Brandon Cohen Date: Wed, 4 Jan 2023 00:48:21 -0500 Subject: [PATCH] fix: series displayed an empty season with series list/request modal (#3147) * fix: series would show an empty season on season list or tv request modal * fix: request more would show even if all requestable seasons are already requested * fix: will check if request or season length is longer --- .../RequestModal/TvRequestModal.tsx | 9 ++- src/components/TvDetails/index.tsx | 56 ++++++++++++------- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/src/components/RequestModal/TvRequestModal.tsx b/src/components/RequestModal/TvRequestModal.tsx index bd4ca37d..4a6b25b8 100644 --- a/src/components/RequestModal/TvRequestModal.tsx +++ b/src/components/RequestModal/TvRequestModal.tsx @@ -232,7 +232,9 @@ const TvRequestModal = ({ const getAllSeasons = (): number[] => { return (data?.seasons ?? []) - .filter((season) => season.seasonNumber !== 0) + .filter( + (season) => season.seasonNumber !== 0 && season.episodeCount !== 0 + ) .map((season) => season.seasonNumber); }; @@ -555,7 +557,10 @@ const TvRequestModal = ({ {data?.seasons - .filter((season) => season.seasonNumber !== 0) + .filter( + (season) => + season.seasonNumber !== 0 && season.episodeCount !== 0 + ) .map((season) => { const seasonRequest = getSeasonRequest( season.seasonNumber diff --git a/src/components/TvDetails/index.tsx b/src/components/TvDetails/index.tsx index e6b334af..47d549bf 100644 --- a/src/components/TvDetails/index.tsx +++ b/src/components/TvDetails/index.tsx @@ -38,7 +38,7 @@ import { FilmIcon, PlayIcon, } from '@heroicons/react/24/outline'; -import { ChevronUpIcon } from '@heroicons/react/24/solid'; +import { ChevronDownIcon } from '@heroicons/react/24/solid'; import type { RTRating } from '@server/api/rottentomatoes'; import { ANIME_KEYWORD_ID } from '@server/api/themoviedb/constants'; import { IssueStatus } from '@server/constants/issue'; @@ -193,7 +193,7 @@ const TvDetails = ({ tv }: TvDetailsProps) => { } const seasonCount = data.seasons.filter( - (season) => season.seasonNumber !== 0 + (season) => season.seasonNumber !== 0 && season.episodeCount !== 0 ).length; if (seasonCount) { @@ -221,25 +221,37 @@ const TvDetails = ({ tv }: TvDetailsProps) => { ); } - const isComplete = - seasonCount <= - ( - data.mediaInfo?.seasons.filter( - (season) => - season.status === MediaStatus.AVAILABLE || - season.status === MediaStatus.PARTIALLY_AVAILABLE - ) ?? [] - ).length; + const getAllRequestedSeasons = (is4k: boolean): number[] => { + const requestedSeasons = (data?.mediaInfo?.requests ?? []) + .filter( + (request) => + request.is4k === is4k && + request.status !== MediaRequestStatus.DECLINED + ) + .reduce((requestedSeasons, request) => { + return [ + ...requestedSeasons, + ...request.seasons.map((sr) => sr.seasonNumber), + ]; + }, [] as number[]); - const is4kComplete = - seasonCount <= - ( - data.mediaInfo?.seasons.filter( + const availableSeasons = (data?.mediaInfo?.seasons ?? []) + .filter( (season) => - season.status4k === MediaStatus.AVAILABLE || - season.status4k === MediaStatus.PARTIALLY_AVAILABLE - ) ?? [] - ).length; + (season[is4k ? 'status4k' : 'status'] === MediaStatus.AVAILABLE || + season[is4k ? 'status4k' : 'status'] === + MediaStatus.PARTIALLY_AVAILABLE || + season[is4k ? 'status4k' : 'status'] === MediaStatus.PROCESSING) && + !requestedSeasons.includes(season.seasonNumber) + ) + .map((season) => season.seasonNumber); + + return [...requestedSeasons, ...availableSeasons]; + }; + + const isComplete = seasonCount <= getAllRequestedSeasons(false).length; + + const is4kComplete = seasonCount <= getAllRequestedSeasons(true).length; const streamingProviders = data?.watchProviders?.find((provider) => provider.iso_3166_1 === region) @@ -539,6 +551,10 @@ const TvDetails = ({ tv }: TvDetailsProps) => { ) && r.is4k ); + if (season.episodeCount === 0) { + return null; + } + return ( {({ open }) => ( @@ -709,7 +725,7 @@ const TvDetails = ({ tv }: TvDetailsProps) => { )} -