import classNames from 'classnames'; import { PropTypes, Actions, React, Utils } from 'mailspring-exports'; import InitialSyncActivity from './initial-sync-activity'; import SyncbackActivity from './syncback-activity'; export default class SyncActivity extends React.Component { static propTypes = { initialSync: PropTypes.bool, syncbackTasks: PropTypes.array, }; constructor() { super(); this.state = { expanded: false, blink: false, }; this.mounted = false; } componentDidMount() { this.mounted = true; this.unsub = Actions.expandInitialSyncState.listen(this.showExpandedState); } shouldComponentUpdate(nextProps, nextState) { return !Utils.isEqualReact(nextProps, this.props) || !Utils.isEqualReact(nextState, this.state); } componentWillUnmount() { this.mounted = false; this.unsub(); } showExpandedState = () => { if (!this.state.expanded) { this.setState({ expanded: true }); } else { this.setState({ blink: true }); setTimeout(() => { if (this.mounted) { this.setState({ blink: false }); } }, 1000); } }; hideExpandedState = () => { this.setState({ expanded: false }); }; _renderInitialSync() { if (!this.props.initialSync) { return false; } return ; } _renderSyncbackTasks() { return ; } _renderExpandedDetails() { return (
Hide {this._renderSyncbackTasks()} {this._renderInitialSync()}
); } render() { const { initialSync, syncbackTasks } = this.props; if (!initialSync && (!syncbackTasks || syncbackTasks.length === 0)) { return false; } const classSet = classNames({ item: true, 'expanded-sync': this.state.expanded, blink: this.state.blink, }); const ellipses = [1, 2, 3].map(i => ( . )); return (
this.setState({ expanded: !this.state.expanded })} >
Syncing your mailbox{ellipses}
{this.state.expanded ? this._renderExpandedDetails() : false}
); } }