@@ -332,6 +93,19 @@ class StandardScheduling extends React.Component {
}
}
+StandardScheduling.propTypes = {
+ item: PropTypes.object, // eslint-disable-line react/forbid-prop-types
+ field: PropTypes.shape({
+ name: PropTypes.string.isRequired,
+ disabled: PropTypes.bool,
+ }).isRequired,
+ onValueChange: PropTypes.func.isRequired,
+};
+
+StandardScheduling.defaultProps = {
+ item: {},
+};
+
let fields = [
{
name: 'subject',
diff --git a/assets/js/src/newsletters/send/time_select.jsx b/assets/js/src/newsletters/send/time_select.jsx
new file mode 100644
index 0000000000..0617895c1d
--- /dev/null
+++ b/assets/js/src/newsletters/send/time_select.jsx
@@ -0,0 +1,45 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+
+class TimeSelect extends React.Component { // eslint-disable-line react/prefer-stateless-function
+ render() {
+ const options = Object.keys(this.props.timeOfDayItems).map(
+ value => (
+
+ )
+ );
+
+ return (
+
+ );
+ }
+}
+
+TimeSelect.propTypes = {
+ timeOfDayItems: PropTypes.objectOf(PropTypes.string).isRequired,
+ name: PropTypes.string,
+ value: PropTypes.string.isRequired,
+ disabled: PropTypes.bool,
+ onChange: PropTypes.func.isRequired,
+ validation: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
+};
+
+TimeSelect.defaultProps = {
+ name: 'time',
+ disabled: false,
+};
+
+module.exports = TimeSelect;
diff --git a/assets/js/src/newsletters/types.jsx b/assets/js/src/newsletters/types.jsx
index 6ccd3660c8..1d846c694a 100644
--- a/assets/js/src/newsletters/types.jsx
+++ b/assets/js/src/newsletters/types.jsx
@@ -20,6 +20,29 @@ class NewsletterTypes extends React.Component {
}
};
+ getAutomaticEmails = () => {
+ if (!window.mailpoet_automatic_emails) return [];
+
+ return _.map(window.mailpoet_automatic_emails, (automaticEmail) => {
+ const email = automaticEmail;
+ const onClick = _.partial(this.setupNewsletter, automaticEmail.slug);
+ email.action = (() => (
+
+ ))();
+
+ return email;
+ });
+ };
+
createNewsletter = (type) => {
MailPoet.trackEvent('Emails > Type selected', {
'MailPoet Free version': window.mailpoet_version,
@@ -45,29 +68,6 @@ class NewsletterTypes extends React.Component {
});
};
- getAutomaticEmails = () => {
- if (!window.mailpoet_automatic_emails) return [];
-
- return _.map(window.mailpoet_automatic_emails, (automaticEmail) => {
- const email = automaticEmail;
- const onClick = _.partial(this.setupNewsletter, automaticEmail.slug);
- email.action = (() => (
-
- ))();
-
- return email;
- });
- };
-
render() {
const createStandardNewsletter = _.partial(this.createNewsletter, 'standard');
const createNotificationNewsletter = _.partial(this.setupNewsletter, 'notification');
diff --git a/assets/js/src/newsletters/types/notification/scheduling.jsx b/assets/js/src/newsletters/types/notification/scheduling.jsx
index f6dd7d0d91..5671a3a5c1 100644
--- a/assets/js/src/newsletters/types/notification/scheduling.jsx
+++ b/assets/js/src/newsletters/types/notification/scheduling.jsx
@@ -1,5 +1,6 @@
import _ from 'underscore';
import React from 'react';
+import PropTypes from 'prop-types';
import Select from 'form/fields/select.jsx';
import {
intervalValues,
@@ -35,9 +36,7 @@ const nthWeekDayField = {
};
class NotificationScheduling extends React.Component {
- getCurrentValue = () => {
- return (this.props.item[this.props.field.name] || {});
- };
+ getCurrentValue = () => this.props.item[this.props.field.name] || {};
handleValueChange = (name, value) => {
const oldValue = this.getCurrentValue();
@@ -53,40 +52,11 @@ class NotificationScheduling extends React.Component {
});
};
- handleIntervalChange = (event) => {
- return this.handleValueChange(
- 'intervalType',
- event.target.value
- );
- };
-
- handleTimeOfDayChange = (event) => {
- return this.handleValueChange(
- 'timeOfDay',
- event.target.value
- );
- };
-
- handleWeekDayChange = (event) => {
- return this.handleValueChange(
- 'weekDay',
- event.target.value
- );
- };
-
- handleMonthDayChange = (event) => {
- return this.handleValueChange(
- 'monthDay',
- event.target.value
- );
- };
-
- handleNthWeekDayChange = (event) => {
- return this.handleValueChange(
- 'nthWeekDay',
- event.target.value
- );
- };
+ handleIntervalChange = event => this.handleValueChange('intervalType', event.target.value);
+ handleTimeOfDayChange = event => this.handleValueChange('timeOfDay', event.target.value);
+ handleWeekDayChange = event => this.handleValueChange('weekDay', event.target.value);
+ handleMonthDayChange = event => this.handleValueChange('monthDay', event.target.value);
+ handleNthWeekDayChange = event => this.handleValueChange('nthWeekDay', event.target.value);
render() {
const value = this.getCurrentValue();
@@ -153,4 +123,12 @@ class NotificationScheduling extends React.Component {
}
}
+NotificationScheduling.propTypes = {
+ item: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
+ field: PropTypes.shape({
+ name: PropTypes.string,
+ }).isRequired,
+ onValueChange: PropTypes.func.isRequired,
+};
+
module.exports = NotificationScheduling;
diff --git a/assets/js/src/newsletters/types/standard.jsx b/assets/js/src/newsletters/types/standard.jsx
index 3559d5f600..4ab453ff37 100644
--- a/assets/js/src/newsletters/types/standard.jsx
+++ b/assets/js/src/newsletters/types/standard.jsx
@@ -7,10 +7,6 @@ class NewsletterStandard extends React.Component {
router: React.PropTypes.object.isRequired,
};
- showTemplateSelection = (newsletterId) => {
- this.context.router.push(`/template/${newsletterId}`);
- };
-
componentDidMount() {
// No options for this type, create a newsletter upon mounting
MailPoet.Ajax.post({
@@ -32,6 +28,10 @@ class NewsletterStandard extends React.Component {
});
}
+ showTemplateSelection = (newsletterId) => {
+ this.context.router.push(`/template/${newsletterId}`);
+ };
+
render() {
return (
diff --git a/assets/js/src/newsletters/types/welcome/scheduling.jsx b/assets/js/src/newsletters/types/welcome/scheduling.jsx
index cf37361dd6..6d3b2dfd04 100644
--- a/assets/js/src/newsletters/types/welcome/scheduling.jsx
+++ b/assets/js/src/newsletters/types/welcome/scheduling.jsx
@@ -4,6 +4,7 @@ import MailPoet from 'mailpoet';
import Select from 'form/fields/select.jsx';
import Text from 'form/fields/text.jsx';
import { timeDelayValues } from 'newsletters/scheduling/common.jsx';
+import PropTypes from 'prop-types';
const availableRoles = window.mailpoet_roles || {};
const availableSegments = _.filter(
@@ -52,9 +53,7 @@ class WelcomeScheduling extends React.Component {
router: React.PropTypes.object.isRequired,
};
- getCurrentValue = () => {
- return (this.props.item[this.props.field.name] || {});
- };
+ getCurrentValue = () => this.props.item[this.props.field.name] || {};
handleValueChange = (name, value) => {
const oldValue = this.getCurrentValue();
@@ -70,40 +69,11 @@ class WelcomeScheduling extends React.Component {
});
};
- handleEventChange = (event) => {
- return this.handleValueChange(
- 'event',
- event.target.value
- );
- };
-
- handleSegmentChange = (event) => {
- return this.handleValueChange(
- 'segment',
- event.target.value
- );
- };
-
- handleRoleChange = (event) => {
- return this.handleValueChange(
- 'role',
- event.target.value
- );
- };
-
- handleAfterTimeNumberChange = (event) => {
- return this.handleValueChange(
- 'afterTimeNumber',
- event.target.value
- );
- };
-
- handleAfterTimeTypeChange = (event) => {
- return this.handleValueChange(
- 'afterTimeType',
- event.target.value
- );
- };
+ handleEventChange = event => this.handleValueChange('event', event.target.value);
+ handleSegmentChange = event => this.handleValueChange('segment', event.target.value);
+ handleRoleChange = event => this.handleValueChange('role', event.target.value);
+ handleAfterTimeNumberChange = event => this.handleValueChange('afterTimeNumber', event.target.value);
+ handleAfterTimeTypeChange = event => this.handleValueChange('afterTimeType', event.target.value);
handleNext = () => {
MailPoet.Ajax.post({
@@ -184,4 +154,12 @@ class WelcomeScheduling extends React.Component {
}
}
+WelcomeScheduling.propTypes = {
+ item: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
+ field: PropTypes.shape({
+ name: PropTypes.string,
+ }).isRequired,
+ onValueChange: PropTypes.func.isRequired,
+};
+
module.exports = WelcomeScheduling;