Mailspring/app/internal_packages/open-tracking/lib/open-tracking-button.jsx

53 lines
1.5 KiB
React
Raw Normal View History

2017-09-27 02:46:00 +08:00
import { React, PropTypes, APIError, MailspringAPIRequest } from 'mailspring-exports';
import { MetadataComposerToggleButton } from 'mailspring-component-kit';
2017-09-27 02:33:08 +08:00
import { PLUGIN_ID, PLUGIN_NAME } from './open-tracking-constants';
export default class OpenTrackingButton extends React.Component {
static displayName = 'OpenTrackingButton';
static propTypes = {
2017-09-27 02:33:08 +08:00
draft: PropTypes.object.isRequired,
session: PropTypes.object.isRequired,
};
shouldComponentUpdate(nextProps) {
2017-09-27 02:33:08 +08:00
return (
nextProps.draft.metadataForPluginId(PLUGIN_ID) !==
this.props.draft.metadataForPluginId(PLUGIN_ID)
);
}
_errorMessage(error) {
2017-09-27 02:46:00 +08:00
if (
error instanceof APIError &&
MailspringAPIRequest.TimeoutErrorCodes.includes(error.statusCode)
) {
2017-09-27 02:33:08 +08:00
return `Open tracking does not work offline. Please re-enable when you come back online.`;
}
return `Unfortunately, open tracking is currently not available. Please try again later. Error: ${
error.message
}`;
}
render() {
const enabledValue = {
open_count: 0,
open_data: [],
};
return (
<MetadataComposerToggleButton
iconUrl="mailspring://open-tracking/assets/icon-composer-eye@2x.png"
pluginId={PLUGIN_ID}
pluginName={PLUGIN_NAME}
metadataEnabledValue={enabledValue}
errorMessage={this._errorMessage}
draft={this.props.draft}
session={this.props.session}
/>
2017-09-27 02:33:08 +08:00
);
}
}
OpenTrackingButton.containerRequired = false;