New newsletter dynamic form in a route.

This commit is contained in:
marco
2015-08-26 23:07:53 +02:00
parent 4b22e13947
commit 27022f2775
2 changed files with 60 additions and 75 deletions

View File

@@ -1,5 +1,5 @@
define( define(
'newsletters_form', 'form',
[ [
'react', 'react',
'jquery', 'jquery',
@@ -11,70 +11,67 @@ define(
MailPoet MailPoet
) { ) {
var NewslettersForm = React.createClass({ var Form = React.createClass({
getInitialState: function() { getInitialState: function() {
return { return {
disabled: false disabled: false
}; };
}, },
post: function(data) { post: function(data) {
MailPoet.Ajax.post({ MailPoet.Ajax.post({
endpoint: 'newsletters', endpoint: 'newsletters',
action: 'save', action: 'save',
data: data, data: data,
onSuccess: function(response) { onSuccess: function(response) {
}.bind(this) }.bind(this)
}) })
}, },
handleSubmit: function(e) { handleSubmit: function(e) {
e.preventDefault(); e.preventDefault();
this.setState({ this.setState({
disabled: true disabled: true
}); });
var subject = var subject =
React.findDOMNode(this.refs.subject); React.findDOMNode(this.refs.subject);
var body = var body =
React.findDOMNode(this.refs.body); React.findDOMNode(this.refs.body);
if (!subject.value || !body.value) {
return;
}
this.post({
subject: subject.value,
body: body.value
});
subject.value = '';
body.value = '';
this.setState({
disabled: false
});
if (!subject.value || !body.value) {
return; return;
} },
this.post({ render: function() {
subject: subject.value, return (
body: body.value <div>
}); <h1>New</h1>
<form className="newslettersForm" onSubmit={this.handleSubmit}>
subject.value = ''; <input type="text" placeholder="Subject" ref="subject" />
body.value = ''; <br />
this.setState({ <textarea placeholder="Body" ref="body" />
disabled: false <br />
}); <input type="submit" value="Save" disabled={this.state.locked} />
</form>
return; </div>
},
render: function() {
return (
<form className="newslettersForm" onSubmit={this.handleSubmit}>
<input type="text" placeholder="Subject" ref="subject" />
<br />
<textarea placeholder="Body" ref="body" />
<br />
<input type="submit" value="Save" disabled={this.state.locked} />
</form>
);
}
});
var element = jQuery('#newsletters_form');
if(element.length > 0) {
React.render(
<NewslettersForm />,
element[0]
); );
} }
}); });
return Form;
});

View File

@@ -3,13 +3,11 @@ define(
[ [
'react', 'react',
'react-router', 'react-router',
'mailpoet',
'newsletters/form.jsx' 'newsletters/form.jsx'
], ],
function( function(
React, React,
Router, Router,
MailPoet,
Form Form
) { ) {
@@ -28,7 +26,7 @@ define(
<Link to="listing">Newsletters</Link> <Link to="listing">Newsletters</Link>
</li> </li>
<li> <li>
<Link to="single">New</Link> <Link to="form">New</Link>
</li> </li>
</ul> </ul>
</header> </header>
@@ -49,20 +47,10 @@ define(
} }
}); });
var Single = React.createClass({
render: function () {
return (
<div>
<h1>New</h1>
</div>
);
}
});
var routes = ( var routes = (
<Route name="app" path="/" handler={App}> <Route name="app" path="/" handler={App}>
<Route name="listing" handler={Listing}/> <Route name="listing" handler={Listing}/>
<Route name="single" handler={Single}/> <Route name="form" handler={Form}/>
<DefaultRoute handler={Listing}/> <DefaultRoute handler={Listing}/>
</Route> </Route>
); );