diff --git a/assets/js/src/newsletters/types/welcome.jsx b/assets/js/src/newsletters/types/welcome.jsx index 56988c6fbe..a73d1e07e6 100644 --- a/assets/js/src/newsletters/types/welcome.jsx +++ b/assets/js/src/newsletters/types/welcome.jsx @@ -1,29 +1,179 @@ define( [ + 'underscore', 'react', 'react-router', 'mailpoet', 'form/form.jsx', + 'form/fields/select.jsx', 'form/fields/selection.jsx', + 'form/fields/text.jsx', 'newsletters/breadcrumb.jsx' ], function( + _, React, Router, MailPoet, Form, + Select, Selection, + Text, Breadcrumb ) { + var availableRoles = window.mailpoet_roles || {}; + var availableSegments = window.mailpoet_segments || {}; + + var events = { + name: 'event', + values: { + 'list': 'When someone subscribes to the list...', + 'user': 'When a new Wordrpess user is added to your site...', + } + }; + + var availableSegmentValues = _.object(_.map( + availableSegments, + function(segment) { + return [segment.id, segment.name]; + } + )); + var segmentField = { + name: 'list', + values: availableSegmentValues, + }; + + var roleField = { + name: 'role', + values: availableRoles, + }; + + var afterTimeNumberField = { + name: 'afterTimeNumber', + size: 3, + }; + + var afterTimeTypeField = { + name: 'afterTimeType', + values: { + 'immediate': 'immediately', + 'hours': 'hour(s) after', + 'days': 'day(s) after', + 'weeks': 'week(s) after', + } + }; + var NewsletterWelcome = React.createClass({ + mixins: [ + Router.Navigation + ], + getInitialState: function() { + return { + event: 'segment', + list: 1, + role: 'subscriber', + afterTimeNumber: 1, + afterTimeType: 'immediate', + }; + }, + handleEventChange: function(event) { + this.setState({ + event: event.target.value, + }); + }, + handleSegmentChange: function(event) { + this.setState({ + list: event.target.value, + }); + }, + handleRoleChange: function(event) { + this.setState({ + role: event.target.value, + }) + }, + handleAfterTimeNumberChange: function(event) { + this.setState({ + afterTimeNumber: event.target.value, + }) + }, + handleAfterTimeTypeChange: function(event) { + this.setState({ + afterTimeType: event.target.value, + }) + }, + handleNext: function() { + MailPoet.Ajax.post({ + endpoint: 'newsletters', + action: 'create', + data: { + type: 'welcome', + options: this.state, + }, + }).done(function(response) { + if(response.id !== undefined) { + this.showTemplateSelection(response.id); + } else { + response.map(function(error) { + MailPoet.Notice.error(error); + }); + } + }.bind(this)); + }, + showTemplateSelection: function(newsletterId) { + this.transitionTo('/template/' + newsletterId); + }, render: function() { + var roleListSelection, timeNumber; + if (this.state.event === 'user') { + roleListSelection = ( + + ); + } + if (this.state.afterTimeType !== 'immediate') { + timeNumber = ( + + ); + } return (

Welcome email

- Welcome email options placeholder + + +

+ +

); }, diff --git a/lib/Config/Menu.php b/lib/Config/Menu.php index 035f2a595d..493f4f6f02 100644 --- a/lib/Config/Menu.php +++ b/lib/Config/Menu.php @@ -164,6 +164,8 @@ class Menu { } function newsletters() { + global $wp_roles; + $data = array(); $data['segments'] = Segment::findArray(); @@ -172,6 +174,7 @@ class Menu { foreach($settings as $setting) { $data['settings'][$setting['name']] = $setting['value']; } + $data['roles'] = $wp_roles->get_names(); echo $this->renderer->render('newsletters.html', $data); } diff --git a/views/newsletters.html b/views/newsletters.html index 7664ce1028..46299bad5b 100644 --- a/views/newsletters.html +++ b/views/newsletters.html @@ -13,5 +13,7 @@ <% endblock %>