import React from 'react'; import { Actions, IdentityStore, localized, localizedReactFragment, IIdentity, } from 'mailspring-exports'; import { OpenIdentityPageButton, BillingModal, RetinaImg } from 'mailspring-component-kit'; import { shell } from 'electron'; class RefreshButton extends React.Component<{}, { refreshing: boolean }> { constructor(props) { super(props); this.state = { refreshing: false }; } _mounted: boolean = false; componentDidMount() { this._mounted = true; } componentWillUnmount() { this._mounted = false; } _onClick = () => { this.setState({ refreshing: true }); IdentityStore.fetchIdentity().then(() => { setTimeout(() => { if (this._mounted) { this.setState({ refreshing: false }); } }, 400); }); }; render() { return (
); } } const ProTourFeatures = [ { link: 'https://foundry376.zendesk.com/hc/en-us/articles/115003340291--Add-reminders-to-sent-messages', icon: `icon-composer-reminders.png`, title: localized(`Follow-up reminders`), text: localized( `Never forget to follow up! Mailspring reminds you if your messages haven't received replies.` ), }, { link: 'https://foundry376.zendesk.com/hc/en-us/articles/115001881272--View-contact-and-company-profiles', icon: `toolbar-person-sidebar.png`, title: localized(`Rich contact profiles`), text: localized( `Write better emails with LinkedIn profiles, Twitter bios, message history, and more in the right sidebar.` ), }, { link: 'https://foundry376.zendesk.com/hc/en-us/articles/115001875431--Enable-read-receipts-link-tracking-and-notifications', icon: `icon-composer-eye.png`, title: localized(`Read Receipts`), text: localized( `Get notified when each recipient opens your email to send timely follow-ups and reminders.` ), }, { link: 'https://foundry376.zendesk.com/hc/en-us/articles/115001875231--Reply-faster-with-email-templates', icon: `toolbar-templates.png`, title: localized(`Mail Templates`), text: localized( `Create templated messages and fill them quickly to reply to messages and automate your common workflows.` ), }, { link: 'https://foundry376.zendesk.com/hc/en-us/articles/115001875431--Enable-read-receipts-link-tracking-and-notifications', icon: `icon-composer-linktracking.png`, title: localized(`Link tracking`), text: localized( `See when recipients click links in your emails so you can follow up with precision` ), }, { link: 'https://foundry376.zendesk.com/hc/en-us/articles/115001882012--Schedule-messages-to-send-later', icon: `icon-composer-sendlater.png`, title: localized(`Send Later`), text: localized( `Schedule messages to send at the ideal time to maximize your email reply rate or automate drip emails.` ), }, { link: 'https://foundry376.zendesk.com/hc/en-us/articles/115001881272--View-contact-and-company-profiles', icon: `icon-composer-reminders.png`, title: localized(`Company overviews`), text: localized( `See detailed information about companies you email, including their size, funding and timezone.` ), }, { link: 'https://foundry376.zendesk.com/hc/en-us/articles/115001881232--Snooze-emails-to-handle-them-later', icon: `toolbar-snooze.png`, title: localized(`Snooze messages`), text: localized( `Schedule messages to re-appear later to keep your inbox clean and focus on immediate todos.` ), }, { link: 'https://foundry376.zendesk.com/hc/en-us/articles/115002507891-Activity-Reports-In-Depth', icon: `icon-toolbar-activity.png`, title: localized(`Mailbox insights`), text: localized( `Use the Activity tab to get a birds-eye view of your mailbox: open and click rates, subject line effectiveness, and more.` ), }, { link: 'https://foundry376.zendesk.com/hc/en-us/articles/360031102452', icon: `pro-feature-translation.png`, title: localized(`Automatic Translation`), text: localized( `Instantly translate messages you receive into your preferred reading language.` ), }, ]; class PreferencesIdentity extends React.Component<{}, { identity: IIdentity }> { static displayName = 'PreferencesIdentity'; unsubscribe: () => void; constructor(props) { super(props); this.state = this._getStateFromStores(); } componentDidMount() { this.unsubscribe = IdentityStore.listen(() => { this.setState(this._getStateFromStores()); }); } componentWillUnmount() { this.unsubscribe(); } _getStateFromStores() { return { identity: IdentityStore.identity() || {}, }; } _onUpgrade = () => { Actions.openModal({ component: , width: BillingModal.IntrinsicWidth, height: BillingModal.IntrinsicHeight, }); }; _renderBasic() { const onLearnMore = () => shell.openExternal('https://getmailspring.com/pro'); return (
{localizedReactFragment( `You are using %@, which is free! You can link up to four email accounts and try pro features like snooze, send later, read receipts and reminders a few times a week.`, {localized('Mailspring Basic')} )} {localizedReactFragment( `Mailspring is independent %@ software, and subscription revenue allows us spend time maintaining and improving the product.`, {localized('open source')} )}

{localizedReactFragment( `Upgrade to %@ to use all these great features permanently:`, {localized('Mailspring Pro')} )}
  • {localized(`Rich contact profiles`)}
  • {localized(`Follow-up reminders`)}
  • {localized(`Read Receipts`)}
  • {localized(`Link tracking`)}
  • {localized(`Powerful template support`)}
  • {localized(`Send Later`)}
  • {localized(`Company overviews`)}
  • {localized(`Snooze messages`)}
  • {localized(`Mailbox insights`)}
  • {localized(`... and much more!`)}
$8
{localized('Monthly')}
{' '} {localized(`Get Mailspring Pro`)}
); } _renderPaidPlan(planName, effectivePlanName) { const planDisplayName = planName.replace('Annual', ` (${localized('annual')})`); const unpaidNote = effectivePlanName !== planName && (

{localized( `Note: Due to issues with your most recent payment, you've been temporarily downgraded to Mailspring %@. Click 'Billing' below to correct the issue.`, effectivePlanName )}

); return (
{localizedReactFragment( `Thank you for using %@ and supporting independent software. Get the most out of your subscription: explore pro features below or visit the %@ to learn more about reminders, templates, activity insights, and more.`, {`Mailspring ${planDisplayName}`}, {localized(`Help Center`)} )} {unpaidNote}
{localized('Explore Mailspring Pro')}
{ProTourFeatures.map(item => (

{item.title}

{item.text}

))}
); } render() { const { identity } = this.state; const { firstName, lastName, emailAddress, stripePlan = '', stripePlanEffective = '', } = identity; const logout = () => Actions.logoutMailspringIdentity(); return (
{firstName} {lastName}
{emailAddress}
{localized('Sign Out')}
{stripePlan === 'Basic' ? this._renderBasic() : this._renderPaidPlan(stripePlan, stripePlanEffective)}
); } } export default PreferencesIdentity;