Add form loading state, remove errors and params

This commit is contained in:
Tautvidas Sipavičius
2016-04-07 17:45:17 +03:00
parent 0c008325c4
commit 678a0b3835
2 changed files with 28 additions and 32 deletions

View File

@@ -17,6 +17,11 @@ define(
mixins: [ mixins: [
Router.History Router.History
], ],
getDefaultProps: function() {
return {
params: {},
};
},
getInitialState: function() { getInitialState: function() {
return { return {
loading: false, loading: false,
@@ -158,7 +163,7 @@ define(
var formClasses = classNames( var formClasses = classNames(
'mailpoet_form', 'mailpoet_form',
{ 'mailpoet_form_loading': this.state.loading } { 'mailpoet_form_loading': this.state.loading || this.props.loading }
); );
var fields = this.props.fields.map(function(field, i) { var fields = this.props.fields.map(function(field, i) {

View File

@@ -22,15 +22,6 @@ define(
Breadcrumb Breadcrumb
) { ) {
var messages = {
onUpdate: function() {
MailPoet.Notice.success(MailPoet.I18n.t('newsletterUpdated'));
},
onCreate: function() {
MailPoet.Notice.success(MailPoet.I18n.t('newsletterAdded'));
}
};
var NewsletterSend = React.createClass({ var NewsletterSend = React.createClass({
mixins: [ mixins: [
Router.History Router.History
@@ -38,11 +29,23 @@ define(
getInitialState: function() { getInitialState: function() {
return { return {
fields: [], fields: [],
errors: [],
item: {}, item: {},
loading: false, loading: false,
}; };
}, },
getFieldsByNewsletter: function(newsletter) {
switch(newsletter.type) {
case 'notification': return NotificationNewsletterFields;
case 'welcome': return WelcomeNewsletterFields;
default: return StandardNewsletterFields;
}
},
isAutomatedNewsletter: function() {
return this.state.item.type !== 'standard';
},
isValid: function() {
return jQuery('#mailpoet_newsletter').parsley().isValid();
},
componentDidMount: function() { componentDidMount: function() {
if(this.isMounted()) { if(this.isMounted()) {
this.loadItem(this.props.params.id); this.loadItem(this.props.params.id);
@@ -76,23 +79,11 @@ define(
} }
}); });
}, },
getFieldsByNewsletter: function(newsletter) {
switch(newsletter.type) {
case 'notification': return NotificationNewsletterFields;
case 'welcome': return WelcomeNewsletterFields;
default: return StandardNewsletterFields;
}
},
isValid: function() {
return jQuery('#mailpoet_newsletter').parsley().isValid();
},
isAutomatedNewsletter: function() {
return this.state.item.type !== 'standard';
},
handleSend: function() { handleSend: function() {
if(!this.isValid()) { if(!this.isValid()) {
jQuery('#mailpoet_newsletter').parsley().validate(); jQuery('#mailpoet_newsletter').parsley().validate();
} else { } else {
this.setState({ loading: true });
MailPoet.Ajax.post({ MailPoet.Ajax.post({
endpoint: 'newsletters', endpoint: 'newsletters',
@@ -111,6 +102,7 @@ define(
return response; return response;
} }
}).done((response) => { }).done((response) => {
this.setState({ loading: false });
if(response.result === true) { if(response.result === true) {
this.history.pushState(null, '/'); this.history.pushState(null, '/');
MailPoet.Notice.success( MailPoet.Notice.success(
@@ -131,6 +123,7 @@ define(
}, },
handleSave: function(e) { handleSave: function(e) {
e.preventDefault(); e.preventDefault();
this.setState({ loading: true });
MailPoet.Ajax.post({ MailPoet.Ajax.post({
endpoint: 'newsletters', endpoint: 'newsletters',
@@ -141,10 +134,12 @@ define(
if(response.result === true) { if(response.result === true) {
this.history.pushState(null, '/'); this.history.pushState(null, '/');
messages.onUpdate(); MailPoet.Notice.success(
MailPoet.I18n.t('newsletterUpdated')
);
} else { } else {
if(response.errors.length > 0) { if(response.errors) {
this.setState({ errors: response.errors }); MailPoet.Notice.error(response.errors);
} }
} }
}); });
@@ -160,9 +155,6 @@ define(
}); });
return true; return true;
}, },
getParams: function() {
return {};
},
render: function() { render: function() {
return ( return (
<div> <div>
@@ -174,8 +166,7 @@ define(
id="mailpoet_newsletter" id="mailpoet_newsletter"
fields={ this.state.fields } fields={ this.state.fields }
item={ this.state.item } item={ this.state.item }
params={ this.getParams() } loading={ this.state.loading }
errors= { this.state.errors }
onChange={this.handleFormChange} onChange={this.handleFormChange}
onSubmit={this.handleSave} onSubmit={this.handleSave}
> >