mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-13 21:24:58 +08:00
213bbde692
Summary: Remove logout menu item and buttons, turn Link External Account to Add Account Onboarding window starts hidden, is shown when react component is mounted and sized Use get/setBounds to animate position and size at the same time smoothly Fix specs, change 401 notice Delay bouncing to Gmail to show users the Gmail screen momentarily Make the animated resizing code defer so it doesn't run in a hard loop, and other animations can run at the same time Bring back crossfade between screens, remove left/right shift on welcome screens Test Plan: Run tests Reviewers: drew, evan Reviewed By: evan Maniphest Tasks: T3529 Differential Revision: https://phab.nylas.com/D2054
122 lines
3.8 KiB
CoffeeScript
122 lines
3.8 KiB
CoffeeScript
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: =>
|
|
<div className="container-accounts">
|
|
{@_renderAccounts()}
|
|
<div style={textAlign:"right", marginTop: '20'}>
|
|
<button className="btn btn-large" onClick={@_onAddAccount}>Add Account...</button>
|
|
</div>
|
|
|
|
{@_renderLinkedAccounts()}
|
|
</div>
|
|
|
|
_renderAccounts: =>
|
|
return false unless @state.accounts
|
|
|
|
allowUnlinking = @state.accounts.length > 1
|
|
|
|
<div>
|
|
<div className="section-header">
|
|
Accounts:
|
|
</div>
|
|
{ @state.accounts.map (account) =>
|
|
<div className="well large" style={marginBottom:10} key={account.id}>
|
|
<Flexbox direction="row" style={alignItems: 'middle'}>
|
|
<div style={textAlign: "center"}>
|
|
<RetinaImg name={"ic-settings-account-#{account.provider}.png"}
|
|
fallback="ic-settings-account-imap.png"
|
|
mode={RetinaImg.Mode.ContentPreserve} />
|
|
</div>
|
|
<div style={flex: 1, marginLeft: 10}>
|
|
<div className="account-name">{account.emailAddress}</div>
|
|
<div className="account-subtext">{account.name || "No name provided."} ({account.displayProvider()})</div>
|
|
</div>
|
|
<div style={textAlign:"right", marginTop:10, display: if allowUnlinking then 'inline-block' else 'none'}>
|
|
<button className="btn btn-large" onClick={ => @_onUnlinkAccount(account) }>Unlink</button>
|
|
</div>
|
|
</Flexbox>
|
|
</div>
|
|
}
|
|
</div>
|
|
|
|
_renderLinkedAccounts: =>
|
|
tokens = @getSecondaryTokens()
|
|
return false unless tokens.length > 0
|
|
<div>
|
|
<div className="section-header">
|
|
Linked Accounts:
|
|
</div>
|
|
{ tokens.map (token) =>
|
|
<div className="well small" key={token.id}>
|
|
{@_renderLinkedAccount(token)}
|
|
</div>
|
|
}
|
|
</div>
|
|
|
|
_renderLinkedAccount: (token) =>
|
|
<Flexbox direction="row" style={alignItems: "center"}>
|
|
<div>
|
|
<RetinaImg name={"ic-settings-account-#{token.provider}.png"} fallback="ic-settings-account-imap.png" />
|
|
</div>
|
|
<div style={flex: 1, marginLeft: 10}>
|
|
<div className="account-name">{token.provider}</div>
|
|
</div>
|
|
<div style={textAlign:"right"}>
|
|
<button onClick={ => @_onUnlinkToken(token) } className="btn btn-large">Unlink</button>
|
|
</div>
|
|
</Flexbox>
|
|
|
|
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
|
|
|
|
module.exports = PreferencesAccounts
|