/* eslint-disable react/jsx-wrap-multilines */ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/ban-ts-comment */ /* eslint-disable react-hooks/rules-of-hooks */ /* eslint-disable react/destructuring-assignment */ import React, { useContext, useCallback, useMemo, 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 { getLangNameToLangKeyMap } from '../../configs/i18next.config.client'; import config from '../../configs/app.lang.config'; import isProduction from '../../utils/isProduction'; import SettingRowLabelAndInput from './SettingRowLabelAndInput'; const Fade = require('react-reveal/Fade'); interface SettingsOverlayProps { isSettingsOpen: boolean; handleClose: () => void; } // eslint-disable-next-line @typescript-eslint/no-unused-vars 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 { isDarkTheme, setIsDarkThemeHook } = useContext(SettingsContext); // eslint-disable-next-line react-hooks/exhaustive-deps const [languagesList, setLanguagesList] = useState([] as string[]); const LANG_NAME_TO_KEY_MAP = useMemo(() => { return getLangNameToLangKeyMap(); }, []); useEffect(() => { const tmp: string[] = []; // eslint-disable-next-line no-restricted-syntax for (const [key] of Object.entries(LANG_NAME_TO_KEY_MAP)) { // @ts-ignore: fine here tmp.push(key); } setLanguagesList(tmp); }, [LANG_NAME_TO_KEY_MAP]); const getClassesCallback = useCallback(() => { return useStylesWithTheme(isDarkTheme)(); }, [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: any) => { if ( event.currentTarget && event.currentTarget.value in LANG_NAME_TO_KEY_MAP ) { // @ts-ignore: fine here i18n.changeLanguage(LANG_NAME_TO_KEY_MAP[event.currentTarget.value]); } }; const GeneralSettingsPanel: React.FC = () => ( <>

General Settings