import React, { Component } from 'react'; import PropTypes from 'prop-types'; import moment from 'moment'; import { DateUtils, Actions, SyncbackMetadataTask, TaskQueue, SendDraftTask, } from 'mailspring-exports'; import { RetinaImg } from 'mailspring-component-kit'; import { PLUGIN_ID } from './send-later-constants'; const { DATE_FORMAT_SHORT } = DateUtils; export default class SendLaterStatus extends Component { static displayName = 'SendLaterStatus'; static propTypes = { draft: PropTypes.object, }; constructor(props) { super(props); this.state = this.getStateFromStores(props); } componentDidMount() { this._unlisten = TaskQueue.listen(() => { this.setState(this.getStateFromStores(this.props)); }); } componentWillReceiveProps(nextProps) { this.setState(this.getStateFromStores(nextProps)); } componentWillUnmount() { if (this._unlisten) { this._unlisten(); } } onCancelSendLater = () => { Actions.queueTask( SyncbackMetadataTask.forSaving({ model: this.props.draft, pluginId: PLUGIN_ID, value: { expiration: null }, }) ); }; getStateFromStores({ draft }) { return { task: TaskQueue.findTasks( SendDraftTask, { headerMessageId: draft.headerMessageId }, { includeCompleted: true } ).pop(), }; } render() { const metadata = this.props.draft.metadataForPluginId(PLUGIN_ID); if (!metadata || !metadata.expiration) { return ; } const { expiration } = metadata; let label = null; if (expiration > new Date(Date.now() + 60 * 1000)) { label = `Scheduled for ${DateUtils.format(moment(expiration), DATE_FORMAT_SHORT)}`; } else { label = `Sending in a few seconds...`; if (this.state.task) { label = `Sending now...`; } } return (
{label}
); } }