Mailspring/internal_packages/thread-snooze/lib/snooze-mail-label.jsx
Karim Hamidou 7364ecb9fd [N1] Changes required for implementing snooze
Summary: This is a pretty small diff – it changes the snooze-store to save metadata for the individual messages affected instead of for the whole thread. We need this to have snoozing work without running an actual sync of the whole mailbox.

Test Plan: WIP.

Reviewers: evan, halla

Reviewed By: evan

Differential Revision: https://phab.nylas.com/D3815
2017-02-02 17:05:32 -08:00

58 lines
1.7 KiB
JavaScript

import _ from 'underscore';
import React, {Component, PropTypes} from 'react';
import {FocusedPerspectiveStore} from 'nylas-exports';
import {RetinaImg, MailLabel} from 'nylas-component-kit';
import {SNOOZE_CATEGORY_NAME, PLUGIN_ID} from './snooze-constants';
import SnoozeUtils from './snooze-utils';
class SnoozeMailLabel extends Component {
static displayName = 'SnoozeMailLabel';
static propTypes = {
thread: PropTypes.object,
};
static containerRequired = false;
render() {
const current = FocusedPerspectiveStore.current()
const isSnoozedPerspective = (
current.categories().length > 0 &&
current.categories()[0].displayName === SNOOZE_CATEGORY_NAME
)
if (!isSnoozedPerspective) {
return false
}
const {thread} = this.props;
if (_.findWhere(thread.categories, {displayName: SNOOZE_CATEGORY_NAME})) {
const metadata = thread.metadataForPluginId(PLUGIN_ID);
if (metadata) {
// TODO this is such a hack
const {snoozeDate} = metadata;
const message = SnoozeUtils.snoozedUntilMessage(snoozeDate).replace('Snoozed', '')
const content = (
<span className="snooze-mail-label">
<RetinaImg
name="icon-snoozed.png"
mode={RetinaImg.Mode.ContentIsMask}
/>
<span className="date-message">{message}</span>
</span>
)
const label = {
displayName: content,
isLockedCategory: () => true,
hue: () => 259,
}
return <MailLabel label={label} key={`snooze-message-${thread.id}`} />;
}
return <span />
}
return <span />
}
}
export default SnoozeMailLabel;