Add validation for WooCommerce schedule forms
[MAILPOET-3848]
This commit is contained in:
@@ -104,6 +104,9 @@ class EventScheduling extends React.Component {
|
|||||||
name: 'scheduling_time_duration',
|
name: 'scheduling_time_duration',
|
||||||
defaultValue: afterTimeNumber ? afterTimeNumber.toString() : '',
|
defaultValue: afterTimeNumber ? afterTimeNumber.toString() : '',
|
||||||
size: afterTimeNumberSize,
|
size: afterTimeNumberSize,
|
||||||
|
validation: {
|
||||||
|
'data-parsley-required': true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
item: {},
|
item: {},
|
||||||
onValueChange: _.partial(this.handleChange, _, 'afterTimeNumber'),
|
onValueChange: _.partial(this.handleChange, _, 'afterTimeNumber'),
|
||||||
|
@@ -11,6 +11,7 @@ import MailPoet from 'mailpoet';
|
|||||||
import _ from 'underscore';
|
import _ from 'underscore';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { GlobalContext } from 'context/index.jsx';
|
import { GlobalContext } from 'context/index.jsx';
|
||||||
|
import jQuery from 'jquery';
|
||||||
|
|
||||||
const defaultAfterTimeType = 'immediate';
|
const defaultAfterTimeType = 'immediate';
|
||||||
const defaultAfterTimeNumber = 1;
|
const defaultAfterTimeNumber = 1;
|
||||||
@@ -74,9 +75,18 @@ class EventsConditions extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.setState(newState);
|
this.setState(newState);
|
||||||
|
// we need to reset validation due to changes in the afterTimeType field
|
||||||
|
this.resetValidationErrors();
|
||||||
|
if (this.isValid()) {
|
||||||
|
this.validate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleNextStep() {
|
handleNextStep(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
if (!this.isValid()) {
|
||||||
|
this.validate();
|
||||||
|
} else {
|
||||||
const { history } = this.props;
|
const { history } = this.props;
|
||||||
const {
|
const {
|
||||||
eventSlug, afterTimeType, afterTimeNumber, event, segment, eventOptionValue,
|
eventSlug, afterTimeType, afterTimeNumber, event, segment, eventOptionValue,
|
||||||
@@ -121,6 +131,7 @@ class EventsConditions extends React.Component {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
getEvent(eventSlug) {
|
getEvent(eventSlug) {
|
||||||
return this.emailEvents[eventSlug];
|
return this.emailEvents[eventSlug];
|
||||||
@@ -130,6 +141,25 @@ class EventsConditions extends React.Component {
|
|||||||
return (_.isArray(this.segments) && this.segments[0].id) ? this.segments[0].id : null;
|
return (_.isArray(this.segments) && this.segments[0].id) ? this.segments[0].id : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isValid = () => {
|
||||||
|
if (jQuery('#newsletter_scheduling').parsley()) {
|
||||||
|
return jQuery('#newsletter_scheduling').parsley().isValid();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
validate = () => {
|
||||||
|
if (jQuery('#newsletter_scheduling').parsley()) {
|
||||||
|
jQuery('#newsletter_scheduling').parsley().validate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resetValidationErrors = () => {
|
||||||
|
if (jQuery('#newsletter_scheduling').parsley()) {
|
||||||
|
jQuery('#newsletter_scheduling').parsley().reset();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
displayHeader() {
|
displayHeader() {
|
||||||
const { event } = this.state;
|
const { event } = this.state;
|
||||||
return event.title;
|
return event.title;
|
||||||
@@ -220,6 +250,7 @@ class EventsConditions extends React.Component {
|
|||||||
<ListingHeadingStepsRoute emailType="woocommerce" automationId="woocommerce_email_creation_heading" />
|
<ListingHeadingStepsRoute emailType="woocommerce" automationId="woocommerce_email_creation_heading" />
|
||||||
|
|
||||||
<Grid.Column align="center" className="mailpoet-schedule-email">
|
<Grid.Column align="center" className="mailpoet-schedule-email">
|
||||||
|
<form id="newsletter_scheduling">
|
||||||
<Heading level={4}>{this.displayHeader()}</Heading>
|
<Heading level={4}>{this.displayHeader()}</Heading>
|
||||||
<div>{this.displayEventOptions()}</div>
|
<div>{this.displayEventOptions()}</div>
|
||||||
<div>{this.displaySegments()}</div>
|
<div>{this.displaySegments()}</div>
|
||||||
@@ -228,10 +259,11 @@ class EventsConditions extends React.Component {
|
|||||||
<Button
|
<Button
|
||||||
isFullWidth
|
isFullWidth
|
||||||
onClick={this.handleNextStep}
|
onClick={this.handleNextStep}
|
||||||
type="button"
|
type="submit"
|
||||||
>
|
>
|
||||||
{MailPoet.I18n.t('next')}
|
{MailPoet.I18n.t('next')}
|
||||||
</Button>
|
</Button>
|
||||||
|
</form>
|
||||||
</Grid.Column>
|
</Grid.Column>
|
||||||
|
|
||||||
{this.displayEventTip()}
|
{this.displayEventTip()}
|
||||||
|
Reference in New Issue
Block a user