From 63b5ba2112f056fb49a0eeb5a7a8f5f0f21f1ce8 Mon Sep 17 00:00:00 2001 From: herrrta <73949927+herrrta@users.noreply.github.com> Date: Wed, 19 Feb 2025 21:49:28 -0500 Subject: [PATCH] feat: add upcoming air dates for episodes --- .../jellyseerr/person/[personId].tsx | 11 +--- components/jellyseerr/DetailFacts.tsx | 13 +---- components/series/JellyseerrSeasons.tsx | 55 ++++++++++++++----- hooks/useJellyseerr.ts | 11 ++++ 4 files changed, 55 insertions(+), 35 deletions(-) diff --git a/app/(auth)/(tabs)/(home,libraries,search,favorites)/jellyseerr/person/[personId].tsx b/app/(auth)/(tabs)/(home,libraries,search,favorites)/jellyseerr/person/[personId].tsx index f152563a..bd0fc216 100644 --- a/app/(auth)/(tabs)/(home,libraries,search,favorites)/jellyseerr/person/[personId].tsx +++ b/app/(auth)/(tabs)/(home,libraries,search,favorites)/jellyseerr/person/[personId].tsx @@ -19,7 +19,7 @@ export default function page() { const local = useLocalSearchParams(); const { t } = useTranslation(); - const { jellyseerrApi, jellyseerrUser } = useJellyseerr(); + const { jellyseerrApi, jellyseerrUser, jellyseerrRegion: region, jellyseerrLocale: locale } = useJellyseerr(); const { personId } = local as { personId: string }; @@ -32,15 +32,6 @@ export default function page() { enabled: !!jellyseerrApi && !!personId, }); - const locale = useMemo(() => { - return jellyseerrUser?.settings?.locale || "en"; - }, [jellyseerrUser]); - - const region = useMemo( - () => jellyseerrUser?.settings?.region || "US", - [jellyseerrUser] - ); - const castedRoles: PersonCreditCast[] = useMemo( () => uniqBy(orderBy( diff --git a/components/jellyseerr/DetailFacts.tsx b/components/jellyseerr/DetailFacts.tsx index 0a3f3d03..e6ef013a 100644 --- a/components/jellyseerr/DetailFacts.tsx +++ b/components/jellyseerr/DetailFacts.tsx @@ -19,7 +19,7 @@ interface Release { type: number; } -const dateOpts: Intl.DateTimeFormatOptions = { +export const dateOpts: Intl.DateTimeFormatOptions = { year: "numeric", month: "long", day: "numeric", @@ -50,18 +50,9 @@ const Fact: React.FC<{ title: string; fact?: string | null } & ViewProps> = ({ const DetailFacts: React.FC< { details?: MovieDetails | TvDetails } & ViewProps > = ({ details, className, ...props }) => { - const { jellyseerrUser } = useJellyseerr(); + const { jellyseerrUser, jellyseerrRegion: region, jellyseerrLocale: locale } = useJellyseerr(); const { t } = useTranslation(); - const locale = useMemo(() => { - return jellyseerrUser?.settings?.locale || "en"; - }, [jellyseerrUser]); - - const region = useMemo( - () => jellyseerrUser?.settings?.region || "US", - [jellyseerrUser] - ); - const releases = useMemo( () => (details as MovieDetails)?.releases?.results.find( diff --git a/components/series/JellyseerrSeasons.tsx b/components/series/JellyseerrSeasons.tsx index 320043b2..a1a1fb7c 100644 --- a/components/series/JellyseerrSeasons.tsx +++ b/components/series/JellyseerrSeasons.tsx @@ -23,6 +23,8 @@ import { Loader } from "../Loader"; import { t } from "i18next"; import {MovieDetails} from "@/utils/jellyseerr/server/models/Movie"; import {MediaRequestBody} from "@/utils/jellyseerr/server/interfaces/api/requestInterfaces"; +import {textShadowStyle} from "@/components/jellyseerr/discover/GenericSlideCard"; +import {dateOpts} from "@/components/jellyseerr/DetailFacts"; const JellyseerrSeasonEpisodes: React.FC<{ details: TvDetails; @@ -52,26 +54,51 @@ const JellyseerrSeasonEpisodes: React.FC<{ }; const RenderItem = ({ item, index }: any) => { - const { jellyseerrApi } = useJellyseerr(); + const { jellyseerrApi, jellyseerrRegion: region, jellyseerrLocale: locale } = useJellyseerr(); const [imageError, setImageError] = useState(false); + const upcomingAirDate = useMemo(() => { + const airDate = item.airDate; + if (airDate) { + let airDateObj = new Date(airDate); + + if (new Date() < airDateObj) { + return airDateObj.toLocaleDateString( + `${locale}-${region}`, + dateOpts + ); + } + } + }, [item]); + return ( {!imageError ? ( - { - setImageError(true); - }} - /> + <> + { + setImageError(true); + }} + /> + {upcomingAirDate && ( + + + + {upcomingAirDate} + + + + )} + ) : ( { ); }; + const jellyseerrRegion = useMemo( + () => jellyseerrUser?.settings?.region || "US", + [jellyseerrUser] + ); + + const jellyseerrLocale = useMemo(() => { + return jellyseerrUser?.settings?.locale || "en"; + }, [jellyseerrUser]); + return { jellyseerrApi, jellyseerrUser, setJellyseerrUser, clearAllJellyseerData, isJellyseerrResult, + jellyseerrRegion, + jellyseerrLocale, requestMedia, }; };