Filter content by your device's configured languages (#354)
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import {makeAutoObservable} from 'mobx'
|
||||
import {getLocales} from 'expo-localization'
|
||||
import {isObj, hasProp} from 'lib/type-guards'
|
||||
|
||||
const deviceLocales = getLocales()
|
||||
|
||||
export class PreferencesModel {
|
||||
_contentLanguages: string[] | undefined
|
||||
|
||||
constructor() {
|
||||
makeAutoObservable(this, {}, {autoBind: true})
|
||||
}
|
||||
|
||||
// gives an array of BCP 47 language tags without region codes
|
||||
get contentLanguages() {
|
||||
if (this._contentLanguages) {
|
||||
return this._contentLanguages
|
||||
}
|
||||
return deviceLocales.map(locale => locale.languageCode)
|
||||
}
|
||||
|
||||
serialize() {
|
||||
return {
|
||||
contentLanguages: this._contentLanguages,
|
||||
}
|
||||
}
|
||||
|
||||
hydrate(v: unknown) {
|
||||
if (isObj(v)) {
|
||||
if (
|
||||
hasProp(v, 'contentLanguages') &&
|
||||
Array.isArray(v.contentLanguages) &&
|
||||
typeof v.contentLanguages.every(item => typeof item === 'string')
|
||||
) {
|
||||
this._contentLanguages = v.contentLanguages
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user