Passed
Push — feature/basic-application-endp... ( 39b0fe...edc7f1 )
by Chris
04:18
created

localize.ts ➔ localizeFieldNonNull   A

Complexity

Conditions 1

Size

Total Lines 6
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
import { localizedField, localizedFieldNonNull } from "../models/app";
2
3
export type Locales = "en" | "fr";
4
type TranslatableKeysNonNull<T> = {
5
  [K in keyof T]: T[K] extends localizedFieldNonNull ? K : never;
6
}[keyof T];
7
type TranslatableKeys<T> = {
8
  [K in keyof T]: T[K] extends localizedField ? K : never;
9
}[keyof T];
10
11
export function localizeField<T>(
12
  locale: Locales,
13
  model: T,
14
  field: TranslatableKeys<T>,
15
): string | null {
16
  if (model[field] !== null) {
17
    return model[field][locale];
18
  }
19
  return null;
20
}
21
export function localizeFieldNonNull<T>(
22
  locale: Locales,
23
  model: T,
24
  field: TranslatableKeysNonNull<T>,
25
): string {
26
  return model[field][locale];
27
}
28
29
export function getLocale(locale: string): Locales {
30
  if (locale === "en" || locale === "fr") {
31
    return locale;
32
  }
33
  console.log("Warning: unknown locale. Defaulting to en.");
34
  return "en";
35
}
36