From 2bfe2caffc5be94b3a608f53e996aa8b91ff361f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 1 Jun 2026 07:28:36 +0000 Subject: [PATCH] fix: use i18n for availability badge labels and make requestedSeasons optional --- .../media-requests/media-request-types.ts | 4 ++-- .../modes/media/media-request-search-group.tsx | 18 ++++++++++-------- packages/translation/src/lang/en.json | 7 +++++++ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/packages/integrations/src/interfaces/media-requests/media-request-types.ts b/packages/integrations/src/interfaces/media-requests/media-request-types.ts index e72f692a7..d475764bf 100644 --- a/packages/integrations/src/interfaces/media-requests/media-request-types.ts +++ b/packages/integrations/src/interfaces/media-requests/media-request-types.ts @@ -12,14 +12,14 @@ interface SeriesInformation { overview: string; seasons: SerieSeason[]; posterPath: string; - requestedSeasons: number[]; + requestedSeasons?: number[]; } interface MovieInformation { id: number; overview: string; posterPath: string; - requestedSeasons: number[]; + requestedSeasons?: number[]; } export type MediaInformation = SeriesInformation | MovieInformation; diff --git a/packages/spotlight/src/modes/media/media-request-search-group.tsx b/packages/spotlight/src/modes/media/media-request-search-group.tsx index 36a83f202..3b4f42168 100644 --- a/packages/spotlight/src/modes/media/media-request-search-group.tsx +++ b/packages/spotlight/src/modes/media/media-request-search-group.tsx @@ -15,13 +15,8 @@ import { createGroup } from "../../lib/group"; import { mediaRequestSearchScopeAtom } from "../../spotlight-store"; import { useMediaRequestSearchInteraction } from "../external/search-engines-search-group"; -const availabilityLabels: Partial> = { - available: "Available", - partiallyAvailable: "Partial", - processing: "Processing", - requested: "Requested", - pending: "Requested", -}; +const availabilityLabelKeys = ["available", "partiallyAvailable", "processing", "requested", "pending"] as const; +type AvailabilityWithLabel = (typeof availabilityLabelKeys)[number]; type MediaRequestSearchResult = RouterOutputs["integration"]["searchMediaRequests"][number]; @@ -42,6 +37,8 @@ export const mediaRequestSearchGroup = createGroup({ keyPath: "key", title: (t) => t("search.mode.media.group.title"), Component(option) { + const tMedia = useScopedI18n("search.mode.media"); + if (option.kind !== "result") { return ( @@ -57,7 +54,12 @@ export const mediaRequestSearchGroup = createGroup({ } const { result } = option; - const badgeLabel = result.availability ? availabilityLabels[result.availability as MediaAvailability] : undefined; + const hasAvailabilityLabel = + result.availability && + (availabilityLabelKeys as readonly string[]).includes(result.availability); + const badgeLabel = hasAvailabilityLabel + ? tMedia(`availability.${result.availability as AvailabilityWithLabel}`) + : undefined; const badgeColor = result.availability ? mediaAvailabilityConfiguration[result.availability as MediaAvailability]?.color : undefined; diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json index db311c642..5bae7cbd7 100644 --- a/packages/translation/src/lang/en.json +++ b/packages/translation/src/lang/en.json @@ -4567,6 +4567,13 @@ "scoped": "This widget does not have an accessible media request integration." } } + }, + "availability": { + "available": "Available", + "partiallyAvailable": "Partial", + "processing": "Processing", + "requested": "Requested", + "pending": "Requested" } }, "external": {