1
0
mirror of https://github.com/pavlobu/deskreen.git synced 2025-05-17 16:00:16 -07:00
2022-05-31 19:56:10 +02:00

53 lines
1.5 KiB
TypeScript

import React, { useContext, useEffect, useState } from 'react';
import { ipcRenderer } from 'electron';
import { HTMLSelect } from '@blueprintjs/core';
import i18n from 'i18next';
import { SettingsContext } from '../../containers/SettingsProvider';
import i18n_client, {
getLangFullNameToLangISOKeyMap,
getLangISOKeyToLangFullNameMap,
} from '../../configs/i18next.config.client';
import { IpcEvents } from '../../main/IpcEvents.enum';
export default function LanguageSelector() {
const { setCurrentLanguageHook } = useContext(SettingsContext);
const [languagesList, setLanguagesList] = useState([] as string[]);
useEffect(() => {
const tmp: string[] = [];
getLangFullNameToLangISOKeyMap().forEach((_, key) => {
tmp.push(key);
});
setLanguagesList(tmp);
setCurrentLanguageHook(i18n_client.language);
}, [setCurrentLanguageHook]);
const onChangeLanguageHTMLSelectHandler = (
event: React.ChangeEvent<HTMLSelectElement>
) => {
if (
event.currentTarget &&
getLangFullNameToLangISOKeyMap().has(event.currentTarget.value)
) {
const newLang =
getLangFullNameToLangISOKeyMap().get(event.currentTarget.value) ||
'English';
i18n.changeLanguage(newLang);
ipcRenderer.invoke(IpcEvents.AppLanguageChanged, newLang);
}
};
return (
<HTMLSelect
value={getLangISOKeyToLangFullNameMap().get(i18n.language)}
options={languagesList}
onChange={onChangeLanguageHTMLSelectHandler}
style={{
borderRadius: '50px',
width: '120px',
}}
/>
);
}