import React, { useContext, useCallback, useEffect, useState } from 'react'; import { Button, Overlay, Classes, H3, H6, Tabs, Tab, Icon, HTMLSelect, Text, ControlGroup, Checkbox, } from '@blueprintjs/core'; import { useTranslation } from 'react-i18next'; import { Row } from 'react-flexbox-grid'; import { createStyles, makeStyles } from '@material-ui/core/styles'; import i18n from 'i18next'; import { DARK_UI_BACKGROUND, LIGHT_UI_BACKGROUND, SettingsContext, } from '../../containers/SettingsProvider'; import CloseOverlayButton from '../CloseOverlayButton'; import { getLangFullNameToLangISOKeyMap, getLangISOKeyToLangFullNameMap, } from '../../configs/i18next.config.client'; import isProduction from '../../utils/isProduction'; import SettingRowLabelAndInput from './SettingRowLabelAndInput'; const Fade = require('react-reveal/Fade'); interface SettingsOverlayProps { isSettingsOpen: boolean; handleClose: () => void; } const useStylesWithTheme = (isDarkTheme: boolean) => makeStyles(() => createStyles({ checkboxSettings: { margin: '0' }, overlayInnerRoot: { width: '90%' }, overlayInsideFade: { height: '90vh', backgroundColor: isDarkTheme ? DARK_UI_BACKGROUND : LIGHT_UI_BACKGROUND, }, absoluteCloseButton: { position: 'absolute', left: 'calc(100% - 65px)' }, tabNavigationRowButton: { fontWeight: 700 }, iconInTablLeftButton: { marginRight: '5px' }, }) ); export default function SettingsOverlay(props: SettingsOverlayProps) { const { t } = useTranslation(); const { handleClose, isSettingsOpen } = props; const { isDarkTheme, setIsDarkThemeHook } = useContext(SettingsContext); const [languagesList, setLanguagesList] = useState([] as string[]); useEffect(() => { const tmp: string[] = []; getLangFullNameToLangISOKeyMap().forEach((_, key) => { tmp.push(key); }); setLanguagesList(tmp); }, []); const getClassesCallback = useStylesWithTheme(isDarkTheme); const handleToggleDarkTheme = useCallback(() => { if (!isDarkTheme) { document.body.classList.toggle(Classes.DARK); setIsDarkThemeHook(true); } }, [isDarkTheme, setIsDarkThemeHook]); const handleToggleLightTheme = useCallback(() => { if (isDarkTheme) { document.body.classList.toggle(Classes.DARK); setIsDarkThemeHook(false); } }, [isDarkTheme, setIsDarkThemeHook]); const onChangeLangueageHTMLSelectHandler = ( event: React.ChangeEvent ) => { if ( event.currentTarget && getLangFullNameToLangISOKeyMap().has(event.currentTarget.value) ) { i18n.changeLanguage( getLangFullNameToLangISOKeyMap().get(event.currentTarget.value) || 'English' ); } }; const getThemeChangingControlGroupInput = () => { return (