mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-12 04:25:31 +08:00
297320df94
Summary: Better error handling in the account settings page and a loading spinner Add Account... replaces "Link External Account", and it works Clean dead code from onboarding pages, remove base class component Always show the account switcher rm dead EdgehillAPI code, AccountStore now manages accounts and credentials in config, not in database Fix specs Test Plan: Run tests Reviewers: dillon, evan Reviewed By: evan Projects: #edgehill Differential Revision: https://phab.nylas.com/D2059
106 lines
3.6 KiB
CoffeeScript
106 lines
3.6 KiB
CoffeeScript
React = require 'react'
|
|
_ = require 'underscore'
|
|
{RetinaImg} = require 'nylas-component-kit'
|
|
{EdgehillAPI, Utils} = require 'nylas-exports'
|
|
|
|
OnboardingActions = require './onboarding-actions'
|
|
NylasApiEnvironmentStore = require './nylas-api-environment-store'
|
|
Providers = require './account-types'
|
|
url = require 'url'
|
|
|
|
class AccountChoosePage extends React.Component
|
|
@displayName: "AccountChoosePage"
|
|
|
|
constructor: (@props) ->
|
|
@state =
|
|
email: ""
|
|
provider: ""
|
|
environment: NylasApiEnvironmentStore.getEnvironment()
|
|
|
|
componentDidMount: ->
|
|
@_usub = NylasApiEnvironmentStore.listen =>
|
|
@setState environment: NylasApiEnvironmentStore.getEnvironment()
|
|
|
|
componentWillUnmount: ->
|
|
@_usub?()
|
|
|
|
render: =>
|
|
<div className="page account-choose">
|
|
<div className="quit" onClick={ => atom.close() }>
|
|
<RetinaImg name="onboarding-close.png" mode={RetinaImg.Mode.ContentPreserve}/>
|
|
</div>
|
|
|
|
<div className="logo-container">
|
|
<RetinaImg name="onboarding-logo.png" mode={RetinaImg.Mode.ContentPreserve} className="logo"/>
|
|
</div>
|
|
|
|
<div className="caption" style={marginBottom:20}>Select your email provider</div>
|
|
|
|
{@_renderProviders()}
|
|
|
|
</div>
|
|
|
|
_renderProviders: ->
|
|
return Providers.map (provider) =>
|
|
<div className={"provider "+provider.name} key={provider.name} onClick={=>@_onChooseProvider(provider)}>
|
|
|
|
<div className="icon-container">
|
|
<RetinaImg name={provider.icon} mode={RetinaImg.Mode.ContentPreserve} className="icon"/>
|
|
</div>
|
|
{provider.displayName}
|
|
</div>
|
|
|
|
_renderError: ->
|
|
if @state.error
|
|
<div className="alert alert-danger" role="alert">
|
|
{@state.error}
|
|
</div>
|
|
else <div></div>
|
|
|
|
_onEmailChange: (event) =>
|
|
@setState email: event.target.value
|
|
|
|
_onChooseProvider: (provider) =>
|
|
if provider.name is 'gmail'
|
|
# Show the "Sign in to Gmail" prompt for a moment before actually bouncing
|
|
# to Gmail. (400msec animation + 200msec to read)
|
|
_.delay =>
|
|
@_onBounceToGmail(provider)
|
|
, 600
|
|
OnboardingActions.moveToPage("account-settings", {provider})
|
|
|
|
_onBounceToGmail: (provider) =>
|
|
provider.clientKey = Utils.generateTempId()[6..]+'-'+Utils.generateTempId()[6..]
|
|
shell = require 'shell'
|
|
googleUrl = url.format({
|
|
protocol: 'https'
|
|
host: 'accounts.google.com/o/oauth2/auth'
|
|
query:
|
|
response_type: 'code'
|
|
state: provider.clientKey
|
|
client_id: '372024217839-cdsnrrqfr4d6b4gmlqepd7v0n0l0ip9q.apps.googleusercontent.com'
|
|
redirect_uri: "#{EdgehillAPI.APIRoot}/oauth/google/callback"
|
|
access_type: 'offline'
|
|
scope: 'https://www.googleapis.com/auth/userinfo.email \
|
|
https://www.googleapis.com/auth/userinfo.profile \
|
|
https://mail.google.com/ \
|
|
https://www.google.com/m8/feeds \
|
|
https://www.googleapis.com/auth/calendar'
|
|
})
|
|
shell.openExternal(googleUrl)
|
|
|
|
_environmentComponent: =>
|
|
return <div></div> unless atom.inDevMode()
|
|
<div className="environment-selector">
|
|
<select value={@state.environment} onChange={@_onEnvChange}>
|
|
<option value="development">Development (edgehill-dev, api-staging)</option>
|
|
<option value="experimental">Experimental (edgehill-experimental, api-experimental)</option>
|
|
<option value="staging">Staging (edgehill-staging, api-staging)</option>
|
|
<option value="production">Production (edgehill, api)</option>
|
|
</select>
|
|
</div>
|
|
|
|
_onEnvChange: (event) =>
|
|
OnboardingActions.changeAPIEnvironment(event.target.value)
|
|
|
|
module.exports = AccountChoosePage
|