import * as React from 'react'; import { Component, Text, View } from 'reactxp'; import { colors, links } from '../../config.json'; import { messages } from '../../shared/gettext'; import AccountExpiry from '../lib/account-expiry'; import * as AppButton from './AppButton'; import * as Cell from './Cell'; import ImageView from './ImageView'; import { Container, Layout } from './Layout'; import { CloseBarItem, NavigationBar, NavigationContainer, NavigationScrollbars, TitleBarItem, } from './NavigationBar'; import SettingsHeader, { HeaderTitle } from './SettingsHeader'; import styles from './SettingsStyles'; import { LoginState } from '../redux/account/reducers'; export interface IProps { loginState: LoginState; accountExpiry?: string; expiryLocale: string; appVersion: string; consistentVersion: boolean; upToDateVersion: boolean; isOffline: boolean; onQuit: () => void; onClose: () => void; onViewAccount: () => void; onViewSupport: () => void; onViewPreferences: () => void; onViewAdvancedSettings: () => void; onExternalLink: (url: string) => void; } export default class Settings extends Component { public render() { return ( {// TRANSLATORS: Title label in navigation bar messages.pgettext('settings-view-nav', 'Settings')} {messages.pgettext('settings-view', 'Settings')} {this.renderTopButtons()} {this.renderMiddleButtons()} {this.renderBottomButtons()} {this.renderQuitButton()} ); } private renderQuitButton() { return ( {messages.pgettext('settings-view', 'Quit app')} ); } private renderTopButtons() { const isLoggedIn = this.props.loginState === 'ok'; if (!isLoggedIn) { return null; } const expiry = this.props.accountExpiry ? new AccountExpiry(this.props.accountExpiry, this.props.expiryLocale) : null; const isOutOfTime = expiry ? expiry.hasExpired() : false; const formattedExpiry = expiry ? expiry.remainingTime().toUpperCase() : ''; const outOfTimeMessage = messages.pgettext('settings-view', 'OUT OF TIME'); return ( {messages.pgettext('settings-view', 'Account')} {isOutOfTime ? outOfTimeMessage : formattedExpiry} {messages.pgettext('settings-view', 'Preferences')} {messages.pgettext('settings-view', 'Advanced')} ); } private renderMiddleButtons() { let icon; let footer; if (!this.props.consistentVersion || !this.props.upToDateVersion) { const inconsistentVersionMessage = messages.pgettext( 'settings-view', 'Inconsistent internal version information, please restart the app.', ); const updateAvailableMessage = messages.pgettext( 'settings-view', 'Update available, download to remain safe.', ); const message = !this.props.consistentVersion ? inconsistentVersionMessage : updateAvailableMessage; icon = ( ); footer = ( {message} ); } else { footer = ; } return ( {icon} {messages.pgettext('settings-view', 'App version')} {this.props.appVersion} {footer} ); } private openDownloadLink = () => this.props.onExternalLink(links.download); private openFaqLink = () => this.props.onExternalLink(links.faq); private renderBottomButtons() { return ( {messages.pgettext('settings-view', 'Report a problem')} {messages.pgettext('settings-view', 'FAQs & Guides')} ); } }