Move welcome emails to free plugin

[MAILPOET-1518]
This commit is contained in:
Pavel Dohnal
2018-09-05 13:00:29 +02:00
parent 8623cbb164
commit 8ee8498bd5
5 changed files with 148 additions and 12 deletions

View File

@@ -113,6 +113,28 @@ let newsletterActions = [
);
},
},
{
name: 'duplicate',
label: MailPoet.I18n.t('duplicate'),
onClick: (newsletter, refresh) => MailPoet.Ajax.post({
api_version: window.mailpoet_api_version,
endpoint: 'newsletters',
action: 'duplicate',
data: {
id: newsletter.id,
},
}).done((response) => {
MailPoet.Notice.success((MailPoet.I18n.t('newsletterDuplicated')).replace('%$1s', response.data.subject));
refresh();
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
{ scroll: true }
);
}
}),
},
{
name: 'edit',
link: function link(newsletter) {

View File

@@ -10,6 +10,7 @@ import NewsletterTemplates from 'newsletters/templates.jsx';
import NewsletterSend from 'newsletters/send.jsx';
import NewsletterTypeStandard from 'newsletters/types/standard.jsx';
import NewsletterTypeNotification from 'newsletters/types/notification/notification.jsx';
import NewsletterTypeWelcome from 'newsletters/types/welcome/welcome.jsx';
import AutomaticEmailEventsList from 'newsletters/types/automatic_emails/events_list.jsx';
import NewsletterListStandard from 'newsletters/listings/standard.jsx';
import NewsletterListWelcome from 'newsletters/listings/welcome.jsx';
@@ -73,6 +74,10 @@ if (container) {
path: 'new/notification',
component: NewsletterTypeNotification,
},
{
path: 'new/welcome',
component: NewsletterTypeWelcome,
},
/* Template selection */
{
name: 'template',

View File

@@ -67,6 +67,7 @@ const NewsletterTypes = React.createClass({
render: function render() {
const createStandardNewsletter = _.partial(this.createNewsletter, 'standard');
const createNotificationNewsletter = _.partial(this.setupNewsletter, 'notification');
const createWelcomeNewsletter = _.partial(this.setupNewsletter, 'welcome');
const defaultTypes = [
{
slug: 'standard',
@@ -93,11 +94,22 @@ const NewsletterTypes = React.createClass({
videoGuide: 'https://beta.docs.mailpoet.com/article/254-video-guide-to-welcome-emails',
action: (function action() {
return (
<div>
<a href="?page=mailpoet-premium" target="_blank">
{MailPoet.I18n.t('premiumFeatureLink')}
</a>
</div>
<a
className="button button-primary"
onClick={createWelcomeNewsletter}
data-automation-id="create_welcome"
onKeyDown={(event) => {
if ((['keydown', 'keypress'].includes(event.type) && ['Enter', ' '].includes(event.key))
) {
event.preventDefault();
createWelcomeNewsletter();
}
}}
role="button"
tabIndex={0}
>
{MailPoet.I18n.t('setUp')}
</a>
);
}()),
},

View File

@@ -0,0 +1,104 @@
import React from 'react';
import _ from 'underscore';
import MailPoet from 'mailpoet';
import PropTypes from 'prop-types';
import Breadcrumb from '../../breadcrumb.jsx';
import WelcomeScheduling from './scheduling.jsx';
const field = {
name: 'options',
label: 'Event',
type: 'reactComponent',
component: WelcomeScheduling,
};
class NewsletterWelcome extends React.Component {
constructor(props) {
super(props);
let availableSegments = window.mailpoet_segments || [];
let defaultSegment = 1;
availableSegments = availableSegments.filter(segment => segment.type === 'default');
if (_.size(availableSegments) > 0) {
defaultSegment = _.first(availableSegments).id;
}
this.state = {
options: {
event: 'segment',
segment: defaultSegment,
role: 'subscriber',
afterTimeNumber: 1,
afterTimeType: 'immediate',
},
};
this.handleValueChange = this.handleValueChange.bind(this);
this.handleNext = this.handleNext.bind(this);
}
handleValueChange(event) {
const { state } = this;
state[event.target.name] = event.target.value;
this.setState(state);
}
handleNext() {
MailPoet.Ajax.post({
api_version: window.mailpoet_api_version,
endpoint: 'newsletters',
action: 'create',
data: _.extend({}, this.state, {
type: 'welcome',
subject: MailPoet.I18n.t('draftNewsletterTitle'),
}),
}).done((response) => {
this.showTemplateSelection(response.data.id);
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(error => error.message),
{ scroll: true }
);
}
});
}
showTemplateSelection(newsletterId) {
this.props.router.push(`/template/${newsletterId}`);
}
render() {
return (
<div>
<h1>{MailPoet.I18n.t('welcomeNewsletterTypeTitle')}</h1>
<Breadcrumb step="type" />
<h3>{MailPoet.I18n.t('selectEventToSendWelcomeEmail')}</h3>
<WelcomeScheduling
item={this.state}
field={field}
onValueChange={this.handleValueChange}
/>
<p className="submit">
<input
className="button button-primary"
type="button"
onClick={this.handleNext}
value={MailPoet.I18n.t('next')}
/>
</p>
</div>
);
}
}
NewsletterWelcome.propTypes = {
router: PropTypes.shape({
push: PropTypes.func.isRequired,
}).isRequired,
};
export default NewsletterWelcome;