import React, { useContext } from 'react'; import { useTranslation } from 'react-i18next'; import { type UseAppStoreType, AppContext } from '../../contexts/AppContext'; import { Grid, Paper, Switch, useTheme, FormControlLabel, List, ListItem, ListItemIcon, Slider, Typography, ToggleButtonGroup, ToggleButton, } from '@mui/material'; import SelectLanguage from './SelectLanguage'; import { Translate, Palette, LightMode, DarkMode, SettingsOverscan, Link, QrCode, SettingsInputAntenna, } from '@mui/icons-material'; import { systemClient } from '../../services/System'; import { TorIcon } from '../Icons'; import { apiClient } from '../../services/api'; import { websocketClient } from '../../services/Websocket'; interface SettingsFormProps { dense?: boolean; } const SettingsForm = ({ dense = false }: SettingsFormProps): React.JSX.Element => { const { settings, setSettings, client } = useContext(AppContext); const theme = useTheme(); const { t } = useTranslation(); const fontSizes = [ { label: 'XS', value: { basic: 12, pro: 10 } }, { label: 'S', value: { basic: 13, pro: 11 } }, { label: 'M', value: { basic: 14, pro: 12 } }, { label: 'L', value: { basic: 15, pro: 13 } }, { label: 'XL', value: { basic: 16, pro: 14 } }, ]; return ( { setSettings({ ...settings, language }); systemClient.setItem('settings_language', language); }} /> } icon={ } onChange={(e) => { const mode = e.target.checked ? 'dark' : 'light'; setSettings({ ...settings, mode }); systemClient.setItem('settings_mode', mode); }} /> } /> {settings.mode === 'dark' ? ( <> } icon={ } onChange={(e) => { const lightQRs = !e.target.checked; setSettings({ ...settings, lightQRs }); systemClient.setItem('settings_light_qr', String(lightQRs)); }} /> } /> ) : ( <> )} { const fontSize = e.target.value; setSettings({ ...settings, fontSize }); systemClient.setItem( `settings_fontsize_${settings.frontend}`, fontSize.toString(), ); }} valueLabelDisplay='off' marks={fontSizes.map(({ label, value }) => ({ label: {t(label)}, value: settings.frontend === 'basic' ? value.basic : value.pro, }))} track={false} /> { setSettings({ ...settings, connection }); systemClient.setItem('settings_connection', connection); }} > {t('API')} {t('nostr')} { setSettings({ ...settings, network }); systemClient.setItem('settings_network', network); }} > {t('Mainnet')} {t('Testnet')} {client === 'mobile' && ( { setSettings({ ...settings, useProxy }); systemClient.setItem('settings_use_proxy', String(useProxy)); apiClient.useProxy = useProxy; websocketClient.useProxy = useProxy; }} > {t('Build-in')} {t('Disabled')} )} ); }; export default SettingsForm;