Add hook for subscriber engagement when premium is active, remove premium code
[MAILPOET-2104]
This commit is contained in:
@@ -2,11 +2,9 @@ import Hooks from 'wp-js-hooks';
|
|||||||
import MailPoet from 'mailpoet';
|
import MailPoet from 'mailpoet';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Link, withRouter } from 'react-router-dom';
|
import { Link, withRouter } from 'react-router-dom';
|
||||||
import ReactStringReplace from 'react-string-replace';
|
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import NewsletterGeneralStats from './newsletter_stats.jsx';
|
import NewsletterGeneralStats from './newsletter_stats.jsx';
|
||||||
import NewsletterStatsInfo from './newsletter_info.jsx';
|
import NewsletterStatsInfo from './newsletter_info.jsx';
|
||||||
import SubscriberEngagementListing from './subscriber_engagement.jsx';
|
|
||||||
import PremiumBanner from './premium_banner.jsx';
|
import PremiumBanner from './premium_banner.jsx';
|
||||||
|
|
||||||
class CampaignStatsPage extends React.Component {
|
class CampaignStatsPage extends React.Component {
|
||||||
@@ -15,11 +13,7 @@ class CampaignStatsPage extends React.Component {
|
|||||||
this.state = {
|
this.state = {
|
||||||
item: {},
|
item: {},
|
||||||
loading: true,
|
loading: true,
|
||||||
savingSegment: false,
|
|
||||||
segmentCreated: false,
|
|
||||||
segmentErrors: [],
|
|
||||||
};
|
};
|
||||||
this.handleCreateSegment = this.handleCreateSegment.bind(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
@@ -36,35 +30,6 @@ class CampaignStatsPage extends React.Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleCreateSegment(group, newsletter, linkId) {
|
|
||||||
const name = `${newsletter.subject} – ${group}`;
|
|
||||||
this.setState({ savingSegment: true, segmentCreated: false, segmentErrors: [] });
|
|
||||||
MailPoet.Ajax.post({
|
|
||||||
api_version: window.mailpoet_api_version,
|
|
||||||
endpoint: 'dynamic_segments',
|
|
||||||
action: 'save',
|
|
||||||
data: {
|
|
||||||
segmentType: 'email',
|
|
||||||
action: group === 'unopened' ? 'notOpened' : group,
|
|
||||||
newsletter_id: newsletter.id,
|
|
||||||
link_id: linkId,
|
|
||||||
name,
|
|
||||||
},
|
|
||||||
}).always(() => {
|
|
||||||
this.setState({ savingSegment: false });
|
|
||||||
}).done(() => {
|
|
||||||
this.setState({
|
|
||||||
segmentCreated: true,
|
|
||||||
segmentName: name,
|
|
||||||
});
|
|
||||||
}).fail((response) => {
|
|
||||||
this.setState({
|
|
||||||
segmentErrors:
|
|
||||||
response.errors.map(error => ((error.error === 409) ? MailPoet.I18n.t('segmentExists') : error.message)),
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
loadItem(id) {
|
loadItem(id) {
|
||||||
const { history } = this.props;
|
const { history } = this.props;
|
||||||
this.setState({ loading: true });
|
this.setState({ loading: true });
|
||||||
@@ -98,57 +63,8 @@ class CampaignStatsPage extends React.Component {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
renderCreateSegmentSuccess() {
|
|
||||||
const { segmentCreated, segmentName } = this.state;
|
|
||||||
let segmentCreatedSuccessMessage;
|
|
||||||
|
|
||||||
if (segmentCreated) {
|
|
||||||
let message = ReactStringReplace(
|
|
||||||
MailPoet.I18n.t('successMessage'),
|
|
||||||
/\[link\](.*?)\[\/link\]/g,
|
|
||||||
(match, i) => (
|
|
||||||
<a
|
|
||||||
key={i}
|
|
||||||
href="?page=mailpoet-newsletters#/new"
|
|
||||||
>
|
|
||||||
{match}
|
|
||||||
</a>
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
message = ReactStringReplace(message, '%s', () => segmentName);
|
|
||||||
|
|
||||||
segmentCreatedSuccessMessage = (
|
|
||||||
<div className="mailpoet_notice notice inline notice-success">
|
|
||||||
<p>{message}</p>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return segmentCreatedSuccessMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
renderCreateSegmentError() {
|
|
||||||
const { segmentErrors } = this.state;
|
|
||||||
let error;
|
|
||||||
|
|
||||||
if (segmentErrors.length > 0) {
|
|
||||||
error = (
|
|
||||||
<div>
|
|
||||||
{segmentErrors.map(errorMessage => (
|
|
||||||
<div className="mailpoet_notice notice inline error" key={`error-${errorMessage}`}>
|
|
||||||
<p>{errorMessage}</p>
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { item, loading, savingSegment } = this.state;
|
const { item, loading } = this.state;
|
||||||
const newsletter = item;
|
const newsletter = item;
|
||||||
const { match, location } = this.props;
|
const { match, location } = this.props;
|
||||||
|
|
||||||
@@ -201,17 +117,7 @@ class CampaignStatsPage extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2>{MailPoet.I18n.t('subscriberEngagement')}</h2>
|
<h2>{MailPoet.I18n.t('subscriberEngagement')}</h2>
|
||||||
|
{Hooks.applyFilters('mailpoet_newsletters_subscriber_engagement', <PremiumBanner />, location, match.params, newsletter)}
|
||||||
{this.renderCreateSegmentSuccess()}
|
|
||||||
{this.renderCreateSegmentError()}
|
|
||||||
|
|
||||||
<SubscriberEngagementListing
|
|
||||||
location={location}
|
|
||||||
params={match.params}
|
|
||||||
newsletter={newsletter}
|
|
||||||
handleCreateSegment={this.handleCreateSegment}
|
|
||||||
savingSegment={savingSegment}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user