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

resources/assets/js/helpers/localize.ts   A

Complexity

Total Complexity 5
Complexity/F 1.67

Size

Lines of Code 36
Function Count 3

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 30
dl 0
loc 36
rs 10
c 0
b 0
f 0
mnd 2
bc 2
fnc 3
bpm 0.6666
cpm 1.6666
noi 0

3 Functions

Rating   Name   Duplication   Size   Complexity  
A localize.ts ➔ localizeFieldNonNull 0 6 1
A localize.ts ➔ localizeField 0 10 2
A localize.ts ➔ getLocale 0 7 2
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