import React, { Component, Fragment } from 'react'; import { withTranslation } from 'react-i18next'; import i18next from 'i18next'; import StatsConfig from './StatsConfig'; import LogsConfig from './LogsConfig'; import { FiltersConfig } from './FiltersConfig'; import { Checkbox } from '../ui/Controls/Checkbox'; import Loading from '../ui/Loading'; import PageTitle from '../ui/PageTitle'; import Card from '../ui/Card'; import { getObjectKeysSorted, captitalizeWords } from '../../helpers/helpers'; import './Settings.css'; import { SettingsData } from '../../initialState'; const ORDER_KEY = 'order'; const SETTINGS = { safebrowsing: { enabled: false, title: i18next.t('use_adguard_browsing_sec'), subtitle: i18next.t('use_adguard_browsing_sec_hint'), [ORDER_KEY]: 0, }, parental: { enabled: false, title: i18next.t('use_adguard_parental'), subtitle: i18next.t('use_adguard_parental_hint'), [ORDER_KEY]: 1, }, }; interface SettingsProps { initSettings: (...args: unknown[]) => unknown; settings: SettingsData; toggleSetting: (...args: unknown[]) => unknown; getStatsConfig: (...args: unknown[]) => unknown; setStatsConfig: (...args: unknown[]) => unknown; resetStats: (...args: unknown[]) => unknown; setFiltersConfig: (...args: unknown[]) => unknown; getFilteringStatus: (...args: unknown[]) => unknown; t: (...args: unknown[]) => string; getLogsConfig?: (...args: unknown[]) => unknown; setLogsConfig?: (...args: unknown[]) => unknown; clearLogs?: (...args: unknown[]) => unknown; stats?: { processingGetConfig?: boolean; interval?: number; customInterval?: number; enabled?: boolean; ignored?: unknown[]; processingSetConfig?: boolean; processingReset?: boolean; }; queryLogs?: { enabled?: boolean; interval?: number; customInterval?: number; anonymize_client_ip?: boolean; processingSetConfig?: boolean; processingClear?: boolean; processingGetConfig?: boolean; ignored?: unknown[]; }; filtering?: { interval?: number; enabled?: boolean; processingSetConfig?: boolean; }; } class Settings extends Component { componentDidMount() { this.props.initSettings(SETTINGS); this.props.getStatsConfig(); this.props.getLogsConfig(); this.props.getFilteringStatus(); } renderSettings = (settings: any) => getObjectKeysSorted(SETTINGS, ORDER_KEY).map((key: any) => { const setting = settings[key]; const { enabled, title, subtitle } = setting; return (
this.props.toggleSetting(key, !checked)} />
); }); renderSafeSearch = () => { const { settings: { settingsList: { safesearch }, }, } = this.props; const { enabled } = safesearch || {}; const searches = { ...(safesearch || {}) }; delete searches.enabled; return ( <>
this.props.toggleSetting('safesearch', { ...safesearch, enabled: checked }) } />
{Object.keys(searches).map((searchKey) => (
this.props.toggleSetting('safesearch', { ...safesearch, [searchKey]: checked }) } />
))}
); }; render() { const { settings, setStatsConfig, resetStats, stats, queryLogs, setLogsConfig, clearLogs, filtering, setFiltersConfig, t, } = this.props; const isDataReady = !settings.processing && !stats.processingGetConfig && !queryLogs.processingGetConfig; return ( {!isDataReady && } {isDataReady && (
{this.renderSettings(settings.settingsList)} {this.renderSafeSearch()}
)}
); } } export default withTranslation()(Settings);