import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; import availableCurrencies from '../../../helpers/constants/available-conversions.json'; import Dropdown from '../../../components/ui/dropdown'; import ToggleButton from '../../../components/ui/toggle-button'; import locales from '../../../../app/_locales/index.json'; const sortedCurrencies = availableCurrencies.sort((a, b) => { return a.name.toLocaleLowerCase().localeCompare(b.name.toLocaleLowerCase()); }); const currencyOptions = sortedCurrencies.map(({ code, name }) => { return { name: `${code.toUpperCase()} - ${name}`, value: code, }; }); const localeOptions = locales.map((locale) => { return { name: `${locale.name}`, value: locale.code, }; }); export default class SettingsTab extends PureComponent { static contextTypes = { t: PropTypes.func, metricsEvent: PropTypes.func, }; static propTypes = { setUseBlockie: PropTypes.func, setCurrentCurrency: PropTypes.func, warning: PropTypes.string, updateCurrentLocale: PropTypes.func, currentLocale: PropTypes.string, useBlockie: PropTypes.bool, currentCurrency: PropTypes.string, nativeCurrency: PropTypes.string, useNativeCurrencyAsPrimaryCurrency: PropTypes.bool, setUseNativeCurrencyAsPrimaryCurrencyPreference: PropTypes.func, hideZeroBalanceTokens: PropTypes.bool, setHideZeroBalanceTokens: PropTypes.func, lastFetchedConversionDate: PropTypes.number, }; renderCurrentConversion() { const { t } = this.context; const { currentCurrency, setCurrentCurrency, lastFetchedConversionDate, } = this.props; return (
{t('currencyConversion')} {lastFetchedConversionDate ? t('updatedWithDate', [ new Date(lastFetchedConversionDate * 1000).toString(), ]) : t('noConversionDateAvailable')}
setCurrentCurrency(newCurrency)} />
); } renderCurrentLocale() { const { t } = this.context; const { updateCurrentLocale, currentLocale } = this.props; const currentLocaleMeta = locales.find( (locale) => locale.code === currentLocale, ); const currentLocaleName = currentLocaleMeta ? currentLocaleMeta.name : ''; return (
{t('currentLanguage')} {currentLocaleName}
updateCurrentLocale(newLocale)} />
); } renderHideZeroBalanceTokensOptIn() { const { t } = this.context; const { hideZeroBalanceTokens, setHideZeroBalanceTokens } = this.props; return (
{t('hideZeroBalanceTokens')}
setHideZeroBalanceTokens(!value)} offLabel={t('off')} onLabel={t('on')} />
); } renderBlockieOptIn() { const { t } = this.context; const { useBlockie, setUseBlockie } = this.props; return (
{this.context.t('blockiesIdenticon')}
setUseBlockie(!value)} offLabel={t('off')} onLabel={t('on')} />
); } renderUsePrimaryCurrencyOptions() { const { t } = this.context; const { nativeCurrency, setUseNativeCurrencyAsPrimaryCurrencyPreference, useNativeCurrencyAsPrimaryCurrency, } = this.props; return (
{t('primaryCurrencySetting')}
{t('primaryCurrencySettingDescription')}
setUseNativeCurrencyAsPrimaryCurrencyPreference(true) } checked={Boolean(useNativeCurrencyAsPrimaryCurrency)} />
setUseNativeCurrencyAsPrimaryCurrencyPreference(false) } checked={!useNativeCurrencyAsPrimaryCurrency} />
); } render() { const { warning } = this.props; return (
{warning ?
{warning}
: null} {this.renderCurrentConversion()} {this.renderUsePrimaryCurrencyOptions()} {this.renderCurrentLocale()} {this.renderBlockieOptIn()} {this.renderHideZeroBalanceTokensOptIn()}
); } }