1. (correctness) Show hero rating regression: PlexBrowse's show hero rendered a rating only when show.imdb_rating was set, so after the S6 IMDb-only change a show with no imdb:// entry showed no rating. Now falls back to the audience `rating` like PlexInfo. 2. (correctness) ratingMin column mismatch: the rating filter and the /facets rating_max now key off coalesce(imdb_rating, rating) — the SAME "best score" the badge displays — so a ratingMin picked from a shown IMDb score narrows the right column instead of the raw audience `rating`. 3. (altitude) HU search gap: new query.vector_match() matches EITHER vector in HU (or_(search_vector_hu, search_vector)) so a row with no HU twin stays findable by its English title; ranking still uses the HU vector. field_recheck unions the HU+EN per-field tsvectors in HU, staying a strict subset of the prefilter. 4. (test-coverage) Extracted the badge logic to lib/plexRating.pickRatingBadge (shared by PlexInfo + the show hero) with a unit test (imdb-preferred, audience fallback, 0-score, none). Backend tests added for the HU union search + the IMDb-preferred rating filter. 5. (efficiency) Language switch no longer double-fetches the grid: browseQ is gated on a committedLang state that lags `lang` by one render, so the genre-clear effect settles into a single fetch instead of one throwaway fetch with stale-language genres plus a second. DB-lane suite 295 passed / 2 skip; FE tsc/knip/lint clean, 217 vitest pass.
13 lines
644 B
TypeScript
13 lines
644 B
TypeScript
// The rating badge shows the IMDb score when we have one (rendered with the imdb.com link),
|
|
// otherwise the Plex audience score (no IMDb link/branding) — so a non-IMDb score is never
|
|
// mislabelled as IMDb (E5 S6). Shared by the media-info panel (PlexInfo) and the show hero
|
|
// (PlexBrowse) so both surfaces agree. Returns null when neither score exists (no badge).
|
|
export function pickRatingBadge(
|
|
imdbRating?: number | null,
|
|
audienceRating?: number | null,
|
|
): { score: number; isImdb: boolean } | null {
|
|
const score = imdbRating ?? audienceRating;
|
|
if (score == null) return null;
|
|
return { score, isImdb: imdbRating != null };
|
|
}
|