lbry-desktop/ui/component/settingLanguage/view.jsx
infinite-persistence bfcdbd575f Sort the language list
I think using the 'values' for the keys should be fine since each language name is unique. A key-clash would also help us catch mistakes like not differentiating sub-languages if support any (e.g. "English" vs. "English (British)")

Had to cast to String for lint.
2021-04-05 01:56:49 -04:00

67 lines
1.9 KiB
JavaScript

// @flow
import React, { useState } from 'react';
import { FormField } from 'component/common/form';
import Spinner from 'component/spinner';
import SUPPORTED_LANGUAGES from 'constants/supported_languages';
import { getDefaultLanguage } from 'util/default-languages';
type Props = {
language: string,
setLanguage: (string) => void,
searchInLanguage: boolean,
setSearchInLanguage: (boolean) => void,
};
function SettingLanguage(props: Props) {
const { language, setLanguage, searchInLanguage, setSearchInLanguage } = props;
const [previousLanguage, setPreviousLanguage] = useState(null);
const languages = SUPPORTED_LANGUAGES;
if (previousLanguage && language !== previousLanguage) {
setPreviousLanguage(null);
}
function onLanguageChange(e) {
const { value } = e.target;
setPreviousLanguage(language || getDefaultLanguage());
setLanguage(value);
}
return (
<React.Fragment>
<FormField
name="language_select"
type="select"
label={__('Language')}
onChange={onLanguageChange}
value={language || getDefaultLanguage()}
helper={__(
'Multi-language support is brand new and incomplete. Switching your language may have unintended consequences, like glossolalia.'
)}
>
{Object.values(languages)
.sort()
.map((language) => {
const lang = String(language);
return (
<option key={lang} value={lang}>
{lang}
</option>
);
})}
</FormField>
{previousLanguage && <Spinner type="small" />}
<FormField
name="search-in-language"
type="checkbox"
label={__('Search only in this language by default')}
checked={searchInLanguage}
onChange={() => setSearchInLanguage(!searchInLanguage)}
/>
</React.Fragment>
);
}
export default SettingLanguage;