Skip to content
Snippets Groups Projects
Verified Commit 6cc5d244 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Improve regional selection

parent 7c551d96
No related branches found
No related tags found
No related merge requests found
...@@ -4,6 +4,7 @@ import {useApiClient} from "./api/ApiClientContext"; ...@@ -4,6 +4,7 @@ import {useApiClient} from "./api/ApiClientContext";
import {Title} from "./api/models/Title"; import {Title} from "./api/models/Title";
import {Locale, LocalePriority, selectLocaleVersion} from "./locale/selectLocaleData"; import {Locale, LocalePriority, selectLocaleVersion} from "./locale/selectLocaleData";
import {usePlayabilityRating} from "./mime/usePlayabilityRating"; import {usePlayabilityRating} from "./mime/usePlayabilityRating";
import {sortLexicallyAsc} from "./util/sortLexically";
import {sortNumericallyDesc} from "./util/sortNumerically"; import {sortNumericallyDesc} from "./util/sortNumerically";
export default function App() { export default function App() {
...@@ -14,7 +15,7 @@ export default function App() { ...@@ -14,7 +15,7 @@ export default function App() {
apiClient.listTitles().then(setData); apiClient.listTitles().then(setData);
}, [apiClient]); }, [apiClient]);
const locale: Locale = { const locale: Locale = {
language: "de", language: "en",
region: "DE", region: "DE",
}; };
...@@ -22,9 +23,12 @@ export default function App() { ...@@ -22,9 +23,12 @@ export default function App() {
return ( return (
<div> <div>
{data?.map((item: Title) => { {data?.sort(sortLexicallyAsc(item =>
selectLocaleVersion(locale, LocalePriority.REGION_BEFORE_LOCALE, item.titles)?.name || ""))
.map((item: Title) => {
const title = selectLocaleVersion(locale, LocalePriority.REGION_BEFORE_LOCALE, item.titles); const title = selectLocaleVersion(locale, LocalePriority.REGION_BEFORE_LOCALE, item.titles);
const description = selectLocaleVersion(locale, LocalePriority.LOCALE_BEFORE_REGION, item.descriptions); const description = selectLocaleVersion(locale, LocalePriority.LOCALE_BEFORE_REGION, item.descriptions);
const rating = selectLocaleVersion(locale, LocalePriority.REGION_ONLY, item.ratings);
const poster = item.images.find(it => it.kind === "poster"); const poster = item.images.find(it => it.kind === "poster");
const backdrop = item.images.find(it => it.kind === "backdrop"); const backdrop = item.images.find(it => it.kind === "backdrop");
const mediaList = item.media.map(it => { const mediaList = item.media.map(it => {
...@@ -38,8 +42,9 @@ export default function App() { ...@@ -38,8 +42,9 @@ export default function App() {
return ( return (
<div key={item.ids.uuid} className={classes.movie}> <div key={item.ids.uuid} className={classes.movie}>
<h1>{title?.name}</h1> <h1>{title?.name}</h1>
<strong>{description?.tagline}</strong> <p><strong>{description?.tagline}</strong></p>
<p>{description?.overview}</p> <p>{description?.overview}</p>
<p><strong>{rating?.certification}</strong></p>
{poster && ( {poster && (
<img <img
className={classes.poster} className={classes.poster}
......
export interface LocalizedData { export interface LocalizedData {
region: string | null, region: string | null,
languages: string[], languages?: string[],
kind: string, kind?: string,
} }
export interface Rating { import {LocalizedData} from "./LocalizedData";
export interface Rating extends LocalizedData {
region: string | null, region: string | null,
certification: string certification: string
} }
...@@ -2,5 +2,7 @@ import {LocalizedData} from "./LocalizedData"; ...@@ -2,5 +2,7 @@ import {LocalizedData} from "./LocalizedData";
export interface TitleDescription extends LocalizedData { export interface TitleDescription extends LocalizedData {
overview: string, overview: string,
tagline: string | null tagline: string | null,
languages: string[],
kind: string
} }
import {LocalizedData} from "./LocalizedData"; import {LocalizedData} from "./LocalizedData";
export interface TitleName extends LocalizedData { export interface TitleName extends LocalizedData {
name: string name: string,
languages: string[],
kind: string
} }
...@@ -11,24 +11,36 @@ export enum LocalePriority { ...@@ -11,24 +11,36 @@ export enum LocalePriority {
LOCALE_BEFORE_REGION LOCALE_BEFORE_REGION
} }
function filterVersions<T extends LocalizedData>(locale: Locale, method: LocalePriority, data: T[]): T | undefined { function filterVersions<T extends LocalizedData>(
locale: Locale,
method: LocalePriority,
data: T[]
): T | undefined {
switch (method) { switch (method) {
case LocalePriority.REGION_ONLY: case LocalePriority.REGION_ONLY:
return data.find((el) => { return data.find((el) => {
return (el.region === locale.region); return (el.region === locale.region);
}); });
case LocalePriority.REGION_BEFORE_LOCALE: case LocalePriority.REGION_BEFORE_LOCALE:
return data.sort((a, b) => (+b.languages.includes(locale.language)) - (+a.languages.includes(locale.language))) return data.sort((a, b) =>
.find((el) => el.region === locale.region); +(b.languages?.includes(locale.language) || false) -
+(a.languages?.includes(locale.language) || false)
).find((el) => el.region === locale.region);
case LocalePriority.LOCALE_BEFORE_REGION: case LocalePriority.LOCALE_BEFORE_REGION:
return data.sort((a, b) => (+(b.region === locale.region)) - (+(a.region === locale.region))) return data.sort((a, b) =>
.find((el) => el.languages.includes(locale.language)); +(b.region === locale.region) -
+(a.region === locale.region)
).find((el) => el.languages?.includes(locale.language));
} }
} }
export function selectLocaleVersion<T extends LocalizedData>(locale: Locale, method: LocalePriority, data: T[]): T | null { export function selectLocaleVersion<T extends LocalizedData>(
return filterVersions(locale, method, data.filter(it => it.kind === "localized")) locale: Locale,
method: LocalePriority,
data: T[]
): T | null {
return filterVersions(locale, method, data.filter(it => it?.kind === undefined || it?.kind === "localized"))
|| data.find(it => it.kind === "primary") || data.find(it => it.kind === "primary")
|| data.find(it => it.kind === "original") || data.find(it => it.kind === "original")
|| null; || null;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment