import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; import { Switch, Route, matchPath } from 'react-router-dom'; import classnames from 'classnames'; import TabBar from '../../components/app/tab-bar'; import { ALERTS_ROUTE, ADVANCED_ROUTE, SECURITY_ROUTE, GENERAL_ROUTE, ABOUT_US_ROUTE, SETTINGS_ROUTE, NETWORKS_ROUTE, CONTACT_LIST_ROUTE, CONTACT_ADD_ROUTE, CONTACT_EDIT_ROUTE, CONTACT_VIEW_ROUTE, EXPERIMENTAL_ROUTE, ADD_NETWORK_ROUTE, } from '../../helpers/constants/routes'; import SettingsTab from './settings-tab'; import AlertsTab from './alerts-tab'; import NetworksTab from './networks-tab'; import AdvancedTab from './advanced-tab'; import InfoTab from './info-tab'; import SecurityTab from './security-tab'; import ContactListTab from './contact-list-tab'; import ExperimentalTab from './experimental-tab'; class SettingsPage extends PureComponent { static propTypes = { addressName: PropTypes.string, backRoute: PropTypes.string, currentPath: PropTypes.string, history: PropTypes.object, isAddressEntryPage: PropTypes.bool, isPopup: PropTypes.bool, pathnameI18nKey: PropTypes.string, initialBreadCrumbRoute: PropTypes.string, breadCrumbTextKey: PropTypes.string, initialBreadCrumbKey: PropTypes.string, mostRecentOverviewPage: PropTypes.string.isRequired, addNewNetwork: PropTypes.bool, conversionDate: PropTypes.number, }; static contextTypes = { t: PropTypes.func, }; state = { lastFetchedConversionDate: null, }; componentDidMount() { this.handleConversionDate(); } componentDidUpdate() { this.handleConversionDate(); } handleConversionDate() { const { conversionDate } = this.props; if (conversionDate !== null) { this.setState({ lastFetchedConversionDate: conversionDate }); } } render() { const { history, backRoute, currentPath, mostRecentOverviewPage, addNewNetwork, } = this.props; return (
{currentPath !== SETTINGS_ROUTE && (
history.push(backRoute)} /> )} {this.renderTitle()}
{ if (addNewNetwork) { history.push(NETWORKS_ROUTE); } else { history.push(mostRecentOverviewPage); } }} />
{this.renderTabs()}
{this.renderSubHeader()} {this.renderContent()}
); } renderTitle() { const { t } = this.context; const { isPopup, pathnameI18nKey, addressName } = this.props; let titleText; if (isPopup && addressName) { titleText = t('details'); } else if (pathnameI18nKey && isPopup) { titleText = t(pathnameI18nKey); } else { titleText = t('settings'); } return
{titleText}
; } renderSubHeader() { const { t } = this.context; const { currentPath, isPopup, isAddressEntryPage, pathnameI18nKey, addressName, initialBreadCrumbRoute, breadCrumbTextKey, history, initialBreadCrumbKey, } = this.props; let subheaderText; if (isPopup && isAddressEntryPage) { subheaderText = t('settings'); } else if (initialBreadCrumbKey) { subheaderText = t(initialBreadCrumbKey); } else { subheaderText = t(pathnameI18nKey || 'contacts'); } return ( !currentPath.startsWith(NETWORKS_ROUTE) && (
initialBreadCrumbRoute && history.push(initialBreadCrumbRoute) } > {subheaderText}
{breadCrumbTextKey && (
{' > '} {t(breadCrumbTextKey)}
)} {isAddressEntryPage && (
{' > '} {addressName}
)}
) ); } renderTabs() { const { history, currentPath } = this.props; const { t } = this.context; return ( { if (key === GENERAL_ROUTE && currentPath === SETTINGS_ROUTE) { return true; } return matchPath(currentPath, { path: key, exact: true }); }} onSelect={(key) => history.push(key)} /> ); } renderContent() { return ( ( )} /> } /> ( )} /> ); } } export default SettingsPage;