import _ from 'underscore'; import _str from 'underscore.string'; import classNames from 'classnames'; import {Actions, AccountStore, NylasSyncStatusStore, React} from 'nylas-exports'; export default class InitialSyncActivity extends React.Component { static displayName = 'InitialSyncActivity'; constructor(props) { super(props); this.state = { isExpanded: false, syncState: NylasSyncStatusStore.getSyncState(), syncProgress: NylasSyncStatusStore.getSyncProgress(), } this.mounted = false; } componentDidMount() { this.mounted = true; this.unsubs = [ NylasSyncStatusStore.listen(this.onDataChanged), Actions.expandInitialSyncState.listen(this.showExpandedState), ] } componentWillUnmount() { if (this.unsubs) { this.unsubs.forEach((unsub) => unsub()) } this.mounted = false; } onDataChanged = () => { const syncState = NylasSyncStatusStore.getSyncState() const syncProgress = NylasSyncStatusStore.getSyncProgress() this.setState({syncState, syncProgress}); } hideExpandedState = () => { this.setState({isExpanded: false}); } showExpandedState = () => { if (!this.state.isExpanded) { this.setState({isExpanded: true}); } else { this.setState({blink: true}); setTimeout(() => { if (this.mounted) { this.setState({blink: false}); } }, 1000) } } renderExpandedSyncState() { let maxHeight = 0; let accounts = _.map(this.state.syncState, (accountSyncState, accountId) => { const account = _.findWhere(AccountStore.accounts(), {id: accountId}); if (!account) { return false; } const {folderSyncProgress} = accountSyncState let folderStates = _.map(folderSyncProgress, ({progress}, name) => { return this.renderFolderProgress(name, progress) }) if (folderStates.length === 0) { folderStates =

Gathering folders...
} // A row for the account email address plus a row for each folder state, const numRows = 1 + (folderStates.length || 1) maxHeight += 50 * numRows; return (

{account.emailAddress}

{folderStates}
) }); if (accounts.length === 0) { accounts =

Looking for accounts...
} return (
{accounts} Hide
) } renderFolderProgress(name, progress) { let status = 'busy'; if (progress === 1) { status = 'complete'; } return (

{_str.titleize(name)}:

{this.renderProgressBar(progress)}
{`${_str.numberFormat(progress * 100, 2) || '0.00'}%`}
) } renderProgressBar(progress) { return (
) } render() { if (!AccountStore.accountsAreSyncing()) { return false; } const {syncProgress: {progress}} = this.state if (progress === 1) { return false; } const classSet = classNames({ 'item': true, 'expanded-sync': this.state.isExpanded, 'blink': this.state.blink, }); return (
(this.setState({isExpanded: !this.state.isExpanded}))} > {this.renderProgressBar(progress)}
Syncing your mailbox…
{this.state.isExpanded ? this.renderExpandedSyncState() : false}
) } }