From e9c21dc0303edb1b01613fc8144ad267ec950b32 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Tue, 12 Dec 2023 09:35:37 -0600 Subject: [PATCH] Add a little more safety --- src/locale/__tests__/helpers.test.ts | 12 ++++++++++++ src/locale/helpers.ts | 4 +--- src/locale/languages.ts | 6 +++--- src/state/preferences/languages.tsx | 7 ++++--- src/view/screens/LanguageSettings.tsx | 2 +- 5 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 src/locale/__tests__/helpers.test.ts diff --git a/src/locale/__tests__/helpers.test.ts b/src/locale/__tests__/helpers.test.ts new file mode 100644 index 0000000000..d4bc6c3386 --- /dev/null +++ b/src/locale/__tests__/helpers.test.ts @@ -0,0 +1,12 @@ +import {test, expect} from '@jest/globals' + +import {sanitizeAppLanguageSetting} from '#/locale/helpers' +import {AppLanguage} from '#/locale/languages' + +test('sanitizeAppLanguageSetting', () => { + expect(sanitizeAppLanguageSetting('en')).toBe(AppLanguage.en) + expect(sanitizeAppLanguageSetting('hi')).toBe(AppLanguage.hi) + expect(sanitizeAppLanguageSetting('foo')).toBe(AppLanguage.en) + expect(sanitizeAppLanguageSetting('en,fr')).toBe(AppLanguage.en) + expect(sanitizeAppLanguageSetting('fr,en')).toBe(AppLanguage.en) +}) diff --git a/src/locale/helpers.ts b/src/locale/helpers.ts index b45ebc57e5..e845233bb4 100644 --- a/src/locale/helpers.ts +++ b/src/locale/helpers.ts @@ -100,9 +100,7 @@ export function getTranslatorLink(text: string, lang: string): string { * and selects a new option, at which point we'll re-save their choice, which * should then be a valid option. */ -export function sanitizeAppLanguageSetting( - appLanguage: AppLanguage | string, -): AppLanguage { +export function sanitizeAppLanguageSetting(appLanguage: string): AppLanguage { const langs = appLanguage.split(',').filter(Boolean) for (const lang of langs) { diff --git a/src/locale/languages.ts b/src/locale/languages.ts index 40821346f9..e45fdf42ca 100644 --- a/src/locale/languages.ts +++ b/src/locale/languages.ts @@ -10,13 +10,13 @@ export enum AppLanguage { } interface AppLanguageConfig { - code2: string + code2: AppLanguage name: string } export const APP_LANGUAGES: AppLanguageConfig[] = [ - {code2: 'en', name: 'English'}, - {code2: 'hi', name: 'हिंदी'}, + {code2: AppLanguage.en, name: 'English'}, + {code2: AppLanguage.hi, name: 'हिंदी'}, ] export const LANGUAGES: Language[] = [ diff --git a/src/state/preferences/languages.tsx b/src/state/preferences/languages.tsx index 8e779cfe53..df774c05e2 100644 --- a/src/state/preferences/languages.tsx +++ b/src/state/preferences/languages.tsx @@ -1,5 +1,6 @@ import React from 'react' import * as persisted from '#/state/persisted' +import {AppLanguage} from '#/locale/languages' type SetStateCb = ( s: persisted.Schema['languagePrefs'], @@ -11,7 +12,7 @@ type ApiContext = { toggleContentLanguage: (code2: string) => void togglePostLanguage: (code2: string) => void savePostLanguageToHistory: () => void - setAppLanguage: (code2: string) => void + setAppLanguage: (code2: AppLanguage) => void } const stateContext = React.createContext( @@ -23,7 +24,7 @@ const apiContext = React.createContext({ toggleContentLanguage: (_: string) => {}, togglePostLanguage: (_: string) => {}, savePostLanguageToHistory: () => {}, - setAppLanguage: (_: string) => {}, + setAppLanguage: (_: AppLanguage) => {}, }) export function Provider({children}: React.PropsWithChildren<{}>) { @@ -106,7 +107,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { .slice(0, 6), })) }, - setAppLanguage(code2: string) { + setAppLanguage(code2: AppLanguage) { setStateWrapped(s => ({...s, appLanguage: code2})) }, }), diff --git a/src/view/screens/LanguageSettings.tsx b/src/view/screens/LanguageSettings.tsx index 3b99d80fb2..819840a461 100644 --- a/src/view/screens/LanguageSettings.tsx +++ b/src/view/screens/LanguageSettings.tsx @@ -61,7 +61,7 @@ export function LanguageSettingsScreen(_props: Props) { (value: Parameters[0]) => { if (!value) return if (langPrefs.appLanguage !== value) { - setLangPrefs.setAppLanguage(value) + setLangPrefs.setAppLanguage(sanitizeAppLanguageSetting(value)) } }, [langPrefs, setLangPrefs],