_ = require 'underscore' _str = require 'underscore.string' classNames = require 'classnames' React = require 'react' {Actions, AccountStore, NylasSyncStatusStore} = require 'nylas-exports' class InitialSyncActivity extends React.Component @displayName: 'InitialSyncActivity' constructor: (@props) -> @state = @_getStateFromStores() componentDidMount: => @_usub = NylasSyncStatusStore.listen @_onDataChanged componentWillUnmount: => @_usub?() _onDataChanged: => @setState(@_getStateFromStores()) _getStateFromStores: => sync: NylasSyncStatusStore.state() render: => count = 0 fetched = 0 totalProgress = 0 incomplete = 0 error = null for acctId, state of @state.sync for model, modelState of state incomplete += 1 unless modelState.complete error ?= modelState.error if modelState.count count += modelState.count / 1 fetched += modelState.fetched / 1 totalProgress = (fetched / count) * 100 if count > 0 classSet = classNames 'item': true 'expanded-sync': @state.expandedSync if incomplete is 0 return false else if error
Initial sync encountered an error. Waiting to retry...
Try Again
{@_expandedSyncState()}
else
@setState expandedSync: !@state.expandedSync}> {@_renderProgressBar(totalProgress)}
Syncing mail data…
{@_expandedSyncState()}
_expandedSyncState: -> accounts = [] for acctId, state of @state.sync account = _.findWhere(AccountStore.items(), id: acctId) continue unless account modelStates = _.map state, (modelState, model) => @_renderModelProgress(model, modelState, 100) accounts.push

{account.emailAddress}

{modelStates}
accounts.push Hide
{accounts}
_hideExpandedState: (event) => event.stopPropagation() # So it doesn't reach the parent's onClick event.preventDefault() @setState expandedSync: false return _renderModelProgress: (model, modelState) -> if modelState.error status = "error" else if modelState.complete status = "complete" else status = "busy" percent = (+modelState.fetched / +modelState.count) * 100

{_str.titleize(model)}:

{@_renderProgressBar(percent)}
{_str.numberFormat(modelState.fetched)} / {_str.numberFormat(modelState.count)}
{modelState.error}
_renderProgressBar: (percent) ->
_onTryAgain: => Actions.retryInitialSync() module.exports = InitialSyncActivity