React = require 'react' _ = require 'underscore' classNames = require 'classnames' NotificationStore = require './notifications-store' {Actions, TaskQueue, AccountStore, NylasSyncStatusStore, TaskQueueStatusStore, NylasAPI} = require 'nylas-exports' {TimeoutTransitionGroup} = require 'nylas-component-kit' class ActivitySidebar extends React.Component @displayName: 'ActivitySidebar' @containerRequired: false @containerStyles: minWidth: 165 maxWidth: 400 constructor: (@props) -> @state = @_getStateFromStores() componentDidMount: => @_unlisteners = [] @_unlisteners.push TaskQueueStatusStore.listen @_onDataChanged @_unlisteners.push NylasSyncStatusStore.listen @_onDataChanged @_unlisteners.push NotificationStore.listen @_onDataChanged componentWillUnmount: => unlisten() for unlisten in @_unlisteners @_workerUnlisten() if @_workerUnlisten render: => items = [].concat(@_renderSyncActivityItem(), @_renderNotificationActivityItems(), @_renderTaskActivityItems()) names = classNames "sidebar-activity": true "sidebar-activity-error": error? wrapperClass = "sidebar-activity-transition-wrapper " if items.length is 0 wrapperClass += "sidebar-activity-empty" else inside = {items} {inside} _renderSyncActivityItem: => count = 0 fetched = 0 progress = 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 progress = (fetched / count) * 100 if count > 0 if incomplete is 0 return [] else if error
Initial sync encountered an error. Waiting to retry...
Try Again
else
Syncing mail data...
_renderTaskActivityItems: => summary = {} @state.tasks.map (task) -> label = task.label?() return unless label summary[label] ?= 0 summary[label] += 1 _.pairs(summary).map ([label, count]) ->
{label} ({count})
_renderNotificationActivityItems: => @state.notifications.map (notification) ->
{notification.message}
_onTryAgain: => Actions.retryInitialSync() _onDataChanged: => @setState(@_getStateFromStores()) _getStateFromStores: => notifications: NotificationStore.notifications() tasks: TaskQueueStatusStore.queue() sync: NylasSyncStatusStore.state() module.exports = ActivitySidebar