mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-27 21:00:13 +01:00
13be683701
* Add networks tab to settings, with header. * Adds network list to settings network tab. * Adds form to settings networks tab and connects it to network list. * Network tab: form adding and editing working * Settings network form properly handles input errors * Add translations for settings network form * Clean up styles of settings network tab. * Add popup-view styles and behaviour to settings network tab. * Fix save button on settings network form * Adds 'Add Network' button and addMode to settings networks tab * Lint fix for settings networks tab addition * Fix navigation in settings networks tab. * Editing an rpcurl in networks tab does not create new network, just changes rpc of old * Fix layout of settings tabs other than network * Networks dropdown 'Custom Rpc' item links to networks tab in settings. * Update settings sidebar networks subheader. * Make networks tab buttons width consistent with input widths in extension view. * Fix settings screen subheader height in popup view * Fix height of add networks button in popup view * Add optional label to chainId and symbol form labels in networks setting tab * Style fixes for networks tab headers * Add ability to customize block explorer used by custom rpc * Stylistic improvements+fixes to custom rpc form. * Hide cancel button. * Highlight and show network form of provider by default. * Standardize network subheader name to 'Networks' * Update e2e tests for new settings network form * Update unit tests for new rpcPrefs prop * Extract blockexplorer url construction into method. * Fix broken styles on non-network tabs in popup mode * Fix block explorer url links for cases when provider in state has not been updated. * Fix vertical spacing of network form * Don't allow click of save button on network form if nothing has changed * Ensure add network button is shown in popup view * Lint fix for networks tab * Fix block explorer url preference setting. * Fix e2e tests for custom blockexplorer in account details modal changes. * Update integration test states to include frequentRpcList property * Fix some capitalizations in en/messages.json * Remove some console.logs added during custom rpc form work * Fix external account link text and url for modal and dropdown. * Documentation, url validation, proptype required additions and lint fixes on network tab and form.
160 lines
4.4 KiB
JavaScript
160 lines
4.4 KiB
JavaScript
import React, { PureComponent } from 'react'
|
|
import PropTypes from 'prop-types'
|
|
import { Switch, Route, matchPath, withRouter } from 'react-router-dom'
|
|
import { ENVIRONMENT_TYPE_POPUP } from '../../../../app/scripts/lib/enums'
|
|
import { getEnvironmentType } from '../../../../app/scripts/lib/util'
|
|
import TabBar from '../../components/app/tab-bar'
|
|
import c from 'classnames'
|
|
import SettingsTab from './settings-tab'
|
|
import NetworksTab from './networks-tab'
|
|
import AdvancedTab from './advanced-tab'
|
|
import InfoTab from './info-tab'
|
|
import SecurityTab from './security-tab'
|
|
import {
|
|
DEFAULT_ROUTE,
|
|
ADVANCED_ROUTE,
|
|
SECURITY_ROUTE,
|
|
GENERAL_ROUTE,
|
|
ABOUT_US_ROUTE,
|
|
SETTINGS_ROUTE,
|
|
NETWORKS_ROUTE,
|
|
} from '../../helpers/constants/routes'
|
|
|
|
const ROUTES_TO_I18N_KEYS = {
|
|
[GENERAL_ROUTE]: 'general',
|
|
[ADVANCED_ROUTE]: 'advanced',
|
|
[SECURITY_ROUTE]: 'securityAndPrivacy',
|
|
[ABOUT_US_ROUTE]: 'about',
|
|
}
|
|
|
|
class SettingsPage extends PureComponent {
|
|
static propTypes = {
|
|
location: PropTypes.object,
|
|
history: PropTypes.object,
|
|
t: PropTypes.func,
|
|
}
|
|
|
|
static contextTypes = {
|
|
t: PropTypes.func,
|
|
}
|
|
|
|
isCurrentPath (pathname) {
|
|
return this.props.location.pathname === pathname
|
|
}
|
|
|
|
render () {
|
|
const { t } = this.context
|
|
const { history, location } = this.props
|
|
|
|
const pathnameI18nKey = ROUTES_TO_I18N_KEYS[location.pathname]
|
|
const isPopupView = getEnvironmentType(location.href) === ENVIRONMENT_TYPE_POPUP
|
|
|
|
return (
|
|
<div
|
|
className={c('main-container settings-page', {
|
|
'settings-page--selected': !this.isCurrentPath(SETTINGS_ROUTE),
|
|
})}
|
|
>
|
|
<div className="settings-page__header">
|
|
{
|
|
!this.isCurrentPath(SETTINGS_ROUTE) && !this.isCurrentPath(NETWORKS_ROUTE) && (
|
|
<div
|
|
className="settings-page__back-button"
|
|
onClick={() => history.push(SETTINGS_ROUTE)}
|
|
/>
|
|
)
|
|
}
|
|
<div className="settings-page__header__title">
|
|
{t(pathnameI18nKey && isPopupView ? pathnameI18nKey : 'settings')}
|
|
</div>
|
|
<div
|
|
className="settings-page__close-button"
|
|
onClick={() => history.push(DEFAULT_ROUTE)}
|
|
/>
|
|
</div>
|
|
<div className="settings-page__content">
|
|
<div className="settings-page__content__tabs">
|
|
{ this.renderTabs() }
|
|
</div>
|
|
<div className="settings-page__content__modules">
|
|
{ this.renderSubHeader() }
|
|
{ this.renderContent() }
|
|
</div>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
renderSubHeader () {
|
|
const { t } = this.context
|
|
const { location: { pathname } } = this.props
|
|
|
|
return (
|
|
<div className="settings-page__subheader">
|
|
{t(ROUTES_TO_I18N_KEYS[pathname] || 'general')}
|
|
</div>
|
|
)
|
|
}
|
|
|
|
renderTabs () {
|
|
const { history, location } = this.props
|
|
const { t } = this.context
|
|
|
|
return (
|
|
<TabBar
|
|
tabs={[
|
|
{ content: t('general'), description: t('generalSettingsDescription'), key: GENERAL_ROUTE },
|
|
{ content: t('advanced'), description: t('advancedSettingsDescription'), key: ADVANCED_ROUTE },
|
|
{ content: t('securityAndPrivacy'), description: t('securitySettingsDescription'), key: SECURITY_ROUTE },
|
|
{ content: t('networks'), description: t('networkSettingsDescription'), key: NETWORKS_ROUTE },
|
|
{ content: t('about'), description: t('aboutSettingsDescription'), key: ABOUT_US_ROUTE },
|
|
]}
|
|
isActive={key => {
|
|
if (key === GENERAL_ROUTE && this.isCurrentPath(SETTINGS_ROUTE)) {
|
|
return true
|
|
}
|
|
return matchPath(location.pathname, { path: key, exact: true })
|
|
}}
|
|
onSelect={key => history.push(key)}
|
|
/>
|
|
)
|
|
}
|
|
|
|
renderContent () {
|
|
return (
|
|
<Switch>
|
|
<Route
|
|
exact
|
|
path={GENERAL_ROUTE}
|
|
component={SettingsTab}
|
|
/>
|
|
<Route
|
|
exact
|
|
path={ABOUT_US_ROUTE}
|
|
component={InfoTab}
|
|
/>
|
|
<Route
|
|
exact
|
|
path={ADVANCED_ROUTE}
|
|
component={AdvancedTab}
|
|
/>
|
|
<Route
|
|
exact
|
|
path={NETWORKS_ROUTE}
|
|
component={NetworksTab}
|
|
/>
|
|
<Route
|
|
exact
|
|
path={SECURITY_ROUTE}
|
|
component={SecurityTab}
|
|
/>
|
|
<Route
|
|
component={SettingsTab}
|
|
/>
|
|
</Switch>
|
|
)
|
|
}
|
|
}
|
|
|
|
export default withRouter(SettingsPage)
|