React = require 'react' _ = require 'underscore' {AccountStore, DatabaseStore, EdgehillAPI} = require 'nylas-exports' {RetinaImg, Flexbox} = require 'nylas-component-kit' class PreferencesAccounts extends React.Component @displayName: 'PreferencesAccounts' @propTypes: config: React.PropTypes.object.isRequired constructor: (@props) -> @state = @getStateFromStores() componentDidMount: => @unsubscribe = AccountStore.listen @_onAccountChange componentWillUnmount: => @unsubscribe?() render: =>
{@_renderAccounts()}
{@_renderLinkedAccounts()}
_renderAccounts: => return false unless @state.accounts allowUnlinking = @state.accounts.length > 1
Accounts:
{ @state.accounts.map (account) =>
{account.emailAddress}
{account.name || "No name provided."} ({account.displayProvider()})
}
_renderLinkedAccounts: => tokens = @getSecondaryTokens() return false unless tokens.length > 0
Linked Accounts:
{ tokens.map (token) =>
{@_renderLinkedAccount(token)}
}
_renderLinkedAccount: (token) =>
{token.provider}
getStateFromStores: => accounts: AccountStore.items() getSecondaryTokens: => return [] unless @props.config tokens = @props.config.get('tokens') || [] tokens = tokens.filter (token) -> token.provider isnt 'nylas' tokens _onAddAccount: => require('remote').getGlobal('application').windowManager.newOnboardingWindow() _onAccountChange: => @setState(@getStateFromStores()) _onUnlinkAccount: (account) => return [] unless @props.config tokens = @props.config.get('tokens') || [] token = _.find tokens, (t) -> t.provider is 'nylas' and t.identifier is account.emailAddress tokens = _.without(tokens, token) if not token console.warn("Could not find nylas token for email address #{account.emailAddress}") return DatabaseStore.unpersistModel(account).then => # TODO: Delete other mail data EdgehillAPI.unlinkToken(token) _onUnlinkToken: (token) => EdgehillAPI.unlinkToken(token) return _onLogout: => atom.logout() module.exports = PreferencesAccounts