Rip out all invite-related code

This commit is contained in:
Ben Gotow 2016-05-19 16:30:47 -07:00
parent 3d5b21e4b2
commit 0d218bc86f
11 changed files with 39 additions and 332 deletions

View file

@ -386,18 +386,6 @@ class AccountSettingsPage extends React.Component
provider: @state.provider.name
})
if errorMessage is "Invite code required"
choice = dialog.showMessageBox(remote.getCurrentWindow(), {
type: 'info',
buttons: ['Okay'],
title: 'Confirm',
message: 'Due to a large number of sign-ups this week, youll need an invitation code to add another account! Visit http://invite.nylas.com/ to grab one, or hold tight!'
})
OnboardingActions.moveToPage("token-auth")
if errorMessage is "Invalid invite code"
OnboardingActions.moveToPage("token-auth")
pageNumber = @state.pageNumber
errorFieldNames = err.body?.missing_fields || err.body?.missing_settings

View file

@ -1,22 +0,0 @@
PageRouter = require "./page-router"
{SystemStartService, WorkspaceStore, ComponentRegistry} = require 'nylas-exports'
module.exports =
item: null
activate: (@state) ->
# This package does nothing in other windows
return unless NylasEnv.getWindowType() is 'onboarding'
WorkspaceStore.defineSheet 'Main', {root: true},
list: ['Center']
ComponentRegistry.register PageRouter,
location: WorkspaceStore.Location.Center
if (NylasEnv.config.get('nylas.accounts')?.length ? 0) is 0
startService = new SystemStartService()
startService.checkAvailability().then (available) =>
return unless available
startService.doesLaunchOnSystemStart().then (launchesOnStart) =>
startService.configureToLaunchOnSystemStart() unless launchesOnStart

View file

@ -0,0 +1,34 @@
import {SystemStartService, WorkspaceStore, ComponentRegistry} from 'nylas-exports'
import PageRouter from './page-router'
export function activate() {
WorkspaceStore.defineSheet('Main', {root: true}, {list: ['Center']});
ComponentRegistry.register(PageRouter, {
location: WorkspaceStore.Location.Center,
});
const accounts = NylasEnv.config.get('nylas.accounts') || [];
if (accounts.length === 0) {
const startService = new SystemStartService();
startService.checkAvailability().then((available) => {
if (!available) {
return;
}
startService.doesLaunchOnSystemStart().then((launchesOnStart) => {
if (!launchesOnStart) {
startService.configureToLaunchOnSystemStart();
}
});
});
}
}
export function deactivate() {
}
export function serialize() {
}

View file

@ -7,7 +7,6 @@ OnboardingActions = Reflux.createActions [
"moveToPreviousPage"
"moveToPage"
"accountJSONReceived"
"retryCheckTokenAuthStatus"
]
for key, action of OnboardingActions

View file

@ -1,5 +1,4 @@
OnboardingActions = require './onboarding-actions'
TokenAuthAPI = require './token-auth-api'
{AccountStore, Actions} = require 'nylas-exports'
{ipcRenderer} = require 'electron'
NylasStore = require 'nylas-store'
@ -14,12 +13,10 @@ class PageRouterStore extends NylasStore
@_pageData = NylasEnv.getWindowProps().pageData ? {}
@_pageStack = [{page: @_page, pageData: @_pageData}]
@_checkTokenAuthStatus()
@listenTo OnboardingActions.moveToPreviousPage, @_onMoveToPreviousPage
@listenTo OnboardingActions.moveToPage, @_onMoveToPage
@listenTo OnboardingActions.closeWindow, @_onCloseWindow
@listenTo OnboardingActions.accountJSONReceived, @_onAccountJSONReceived
@listenTo OnboardingActions.retryCheckTokenAuthStatus, @_checkTokenAuthStatus
_onAccountJSONReceived: (json) =>
isFirstAccount = AccountStore.accounts().length is 0
@ -58,10 +55,6 @@ class PageRouterStore extends NylasStore
pageData: -> @_pageData
tokenAuthEnabled: -> @_tokenAuthEnabled
tokenAuthEnabledError: -> @_tokenAuthEnabledError
connectType: ->
@_connectType
@ -83,30 +76,4 @@ class PageRouterStore extends NylasStore
else
NylasEnv.close()
_checkTokenAuthStatus: ->
@_tokenAuthEnabled = "unknown"
@_tokenAuthEnabledError = null
@trigger()
TokenAuthAPI.request
path: "/status/"
returnsModel: false
timeout: 10000
success: (json) =>
if json.restricted
@_tokenAuthEnabled = "yes"
else
@_tokenAuthEnabled = "no"
if @_tokenAuthEnabled is "no" and @_page is 'token-auth'
@_onMoveToPage("account-choose")
else
@trigger()
error: (err) =>
if err.statusCode is 404
err.message = "Sorry, we could not reach the Nylas API. Please try again."
@_tokenAuthEnabledError = err.message
@trigger()
module.exports = new PageRouterStore()

View file

@ -9,8 +9,6 @@ AccountChoosePage = require './account-choose-page'
AccountSettingsPage = require './account-settings-page'
InitialPreferencesPage = require './initial-preferences-page'
InitialPackagesPage = require './initial-packages-page'
TokenAuthPage = require './token-auth-page'
class PageRouter extends React.Component
@displayName: 'PageRouter'
@ -76,7 +74,6 @@ class PageRouter extends React.Component
_renderCurrentPage: =>
Component = {
"welcome": WelcomePage
"token-auth": TokenAuthPage
"account-choose": AccountChoosePage
"account-settings": AccountSettingsPage
"initial-preferences": InitialPreferencesPage

View file

@ -1,58 +0,0 @@
nodeRequest = require 'request'
{Actions, Utils, APIError} = require 'nylas-exports'
class TokenAuthAPI
constructor: ->
NylasEnv.config.onDidChange('env', @_onConfigChanged)
@_onConfigChanged()
@
_onConfigChanged: =>
env = NylasEnv.config.get('env')
if env is 'development'
@APIRoot = "http://localhost:5000"
else if env in ['experimental', 'staging']
@APIRoot = "https://invite-staging.nylas.com"
else
@APIRoot = "https://invite.nylas.com"
request: (options={}) ->
return if NylasEnv.getLoadSettings().isSpec
options.method ?= 'GET'
options.url ?= "#{@APIRoot}#{options.path}" if options.path
options.body ?= {} unless options.formData
options.json = true
options.error ?= @_defaultErrorCallback
# This is to provide functional closure for the variable.
rid = Utils.generateTempId()
[rid].forEach (requestId) ->
options.startTime = Date.now()
Actions.willMakeAPIRequest({
request: options,
requestId: requestId
})
nodeRequest options, (error, response, body) ->
statusCode = response?.statusCode
Actions.didMakeAPIRequest({
request: options,
statusCode: statusCode,
error: error,
requestId: requestId
})
if error? or statusCode > 299
if not statusCode or statusCode in [-123, 500]
body = "Sorry, we could not reach the Nylas API. Please try
again, or email us if you continue to have trouble.
(#{statusCode})"
options.error(new APIError({error:error, response:response, body:body, requestOptions: options}))
else
options.success(body) if options.success
_defaultErrorCallback: (apiError) ->
console.error(apiError)
module.exports = new TokenAuthAPI

View file

@ -1,158 +0,0 @@
React = require 'react'
ReactDOM = require 'react-dom'
ReactCSSTransitionGroup = require 'react-addons-css-transition-group'
_ = require 'underscore'
{RetinaImg} = require 'nylas-component-kit'
{Utils} = require 'nylas-exports'
TokenAuthAPI = require './token-auth-api'
OnboardingActions = require './onboarding-actions'
PageRouterStore = require './page-router-store'
Providers = require './account-types'
url = require 'url'
class TokenAuthPage extends React.Component
@displayName: "TokenAuthPage"
constructor: (@props) ->
@state =
token: ""
tokenValidityError: null
tokenAuthInflight: false
tokenAuthEnabled: PageRouterStore.tokenAuthEnabled()
tokenAuthEnabledError: PageRouterStore.tokenAuthEnabledError()
componentDidMount: ->
@_usub = PageRouterStore.listen(@_onTokenAuthChange)
_onTokenAuthChange: =>
@setState
tokenAuthEnabled: PageRouterStore.tokenAuthEnabled()
tokenAuthEnabledError: PageRouterStore.tokenAuthEnabledError()
@_resize()
componentWillUnmount: ->
@_usub?()
render: =>
if @state.tokenAuthEnabled is "unknown"
<div className="page token-auth">
<ReactCSSTransitionGroup transitionLeaveTimeout={150} transitionEnterTimeout={150} transitionName="alpha-fade">
{@_renderWaitingForTokenAuthAnswer()}
</ReactCSSTransitionGroup>
</div>
else if @state.tokenAuthEnabled is "yes"
<div className="page token-auth token-auth-enabled">
<div className="quit" onClick={ -> OnboardingActions.closeWindow() }>
<RetinaImg name="onboarding-close.png" mode={RetinaImg.Mode.ContentPreserve}/>
</div>
<RetinaImg url="nylas://onboarding/assets/nylas-pictograph@2x.png" mode={RetinaImg.Mode.ContentIsMask} style={zoom: 0.29} className="logo"/>
<div className="caption" style={padding: 40}>
Due to overwhelming interest, you need an invitation code to connect
an account to N1. Enter your invitation code below, or <a href="https://invite.nylas.com">request one here</a>.
</div>
{@_renderContinueError()}
<label className="token-label">
{@_renderInput()}
</label>
{@_renderContinueButton()}
</div>
else
<div className="page token-auth">
</div>
_renderWaitingForTokenAuthAnswer: =>
if @state.tokenAuthEnabledError
<div style={position:'absolute', width:'100%', padding:60, paddingTop:135} key="error">
<div className="errormsg">{@state.tokenAuthEnabledError}</div>
<button key="retry"
style={marginTop: 15}
className="btn btn-large btn-retry"
onClick={OnboardingActions.retryCheckTokenAuthStatus}>
Try Again
</button>
</div>
else
<div style={position:'absolute', width:'100%'} key="spinner">
<RetinaImg url="nylas://onboarding/assets/installing-spinner.gif"
mode={RetinaImg.Mode.ContentPreserve}
style={marginTop: 190}/>
</div>
_renderInput: =>
if @state.errorMessage
<input type="text"
value={@state.token}
onChange={@_onTokenChange}
onKeyPress={@_onKeyPress}
placeholder="Invitation Code"
className="token-input error" />
else
<input type="text"
value={@state.token}
onChange={@_onTokenChange}
onKeyPress={@_onKeyPress}
placeholder="Invitation Code"
className="token-input" />
_renderContinueButton: =>
if @state.tokenAuthInflight
<button className="btn btn-large btn-disabled" type="button">
<RetinaImg name="sending-spinner.gif" width={15} height={15} mode={RetinaImg.Mode.ContentPreserve} /> Checking&hellip;
</button>
else
<button className="btn btn-large btn-gradient" type="button" onClick={@_onContinue}>Continue</button>
_renderContinueError: =>
if @state.tokenValidityError
<div className="errormsg" role="alert">
{@state.tokenValidityError}
</div>
else
<div></div>
_onTokenChange: (event) =>
@setState(token: event.target.value)
_onKeyPress: (event) =>
if event.key in ['Enter', 'Return']
@_onContinue()
_onContinue: =>
if @state.tokenAuthInflight
return
if not @state.token or not /^[\w]{32}$/.test(@state.token)
@setState({
tokenAuthInflight: false,
tokenValidityError: "Please enter a valid invitation code."
})
@_resize()
return
@setState({tokenAuthInflight: true})
TokenAuthAPI.request
path: "/token/#{@state.token}"
returnsModel: false
timeout: 30000
success: (json) =>
NylasEnv.config.set("invitationCode", @state.token)
OnboardingActions.moveToPage("account-choose")
error: (err) =>
_.delay =>
@setState
tokenValidityError: err.message
tokenAuthInflight: false
@_resize()
, 400
_resize: =>
setTimeout( =>
@props.onResize?()
,10)
module.exports = TokenAuthPage

View file

@ -114,12 +114,7 @@ class WelcomePage extends React.Component
if @state.step < 2
@setState(step: @state.step + 1)
else
Actions.recordUserEvent('Welcome Page Finished', {
tokenAuthEnabled: PageRouterStore.tokenAuthEnabled(0)
})
if PageRouterStore.tokenAuthEnabled() is "no"
OnboardingActions.moveToPage("account-choose")
else
OnboardingActions.moveToPage("token-auth")
Actions.recordUserEvent('Welcome Page Finished')
OnboardingActions.moveToPage("account-choose")
module.exports = WelcomePage

View file

@ -348,43 +348,6 @@
}
}
.page.token-auth.token-auth-enabled {
height: auto;
padding-bottom:25px;
}
.page.token-auth {
width: 388px;
min-height: 478px;
position: relative;
padding-top: 40px;
img.logo.content-mask {
background-color: rgba(255,255,255,0.4);
}
.caption {
font-size: 17px;
color: rgba(0,0,0,0.56);
}
.token-label {
max-width: 75%;
}
input {
display:block;
padding:10px;
width:75%;
margin: 0 auto 20px auto;
background-color: #F5F5F5;
text-align: center;
}
input.error {
border: 1px solid #A33;
}
}
.initial-package {
display:block;
margin:auto;

View file

@ -192,7 +192,9 @@ export default class Application extends EventEmitter {
openWindowsForTokenState(loadingMessage) {
const accounts = this.config.get('nylas.accounts');
const hasAccount = accounts && accounts.length > 0;
if (hasAccount) {
const hasN1ID = this.config.get('nylas.identity');
if (hasAccount && hasN1ID) {
this.windowManager.ensureWindow(WindowManager.MAIN_WINDOW, {loadingMessage});
this.windowManager.ensureWindow(WindowManager.WORK_WINDOW);
} else {