import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import availableCurrencies from '../../../helpers/constants/available-conversions.json'; import { TYPOGRAPHY, COLORS } from '../../../helpers/constants/design-system'; import Dropdown from '../../../components/ui/dropdown'; import ToggleButton from '../../../components/ui/toggle-button'; import locales from '../../../../app/_locales/index.json'; import Jazzicon from '../../../components/ui/jazzicon'; import BlockieIdenticon from '../../../components/ui/identicon/blockieIdenticon'; import Typography from '../../../components/ui/typography'; import { getSettingsSectionNumber, handleSettingsRefs, } from '../../../helpers/utils/settings-search'; 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, selectedAddress: PropTypes.string, useTokenDetection: PropTypes.bool, tokenList: PropTypes.object, }; settingsRefs = Array( getSettingsSectionNumber(this.context.t, this.context.t('general')), ) .fill(undefined) .map(() => { return React.createRef(); }); componentDidUpdate() { const { t } = this.context; handleSettingsRefs(t, t('general'), this.settingsRefs); } componentDidMount() { const { t } = this.context; handleSettingsRefs(t, t('general'), this.settingsRefs); } 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, selectedAddress, useTokenDetection, tokenList, } = this.props; const getIconStyles = () => ({ display: 'block', borderRadius: '16px', width: '32px', height: '32px', }); return (
{t('accountIdenticon')} {t('jazzAndBlockies')}
setUseBlockie(false)} >
{t('jazzicons')}
setUseBlockie(true)} >
{t('blockies')}
); } 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()}
); } }