Newsletters router with multi page links.

This commit is contained in:
marco
2015-08-26 23:27:50 +02:00
parent 27022f2775
commit f34a6920a0
4 changed files with 88 additions and 102 deletions

View File

@ -0,0 +1,80 @@
define(
'list',
[
'react',
'jquery',
'mailpoet'
],
function(
React,
jQuery,
MailPoet
) {
var Newsletter = React.createClass({
send: function(e) {
e.preventDefault();
MailPoet.Ajax.post({
endpoint: 'newsletters',
action: 'send',
data: this.props.newsletter.id,
onSuccess: function(response) {
alert('Sent!');
},
onError: function(response) {
alert('Cannot send. Set the settings and add some subscribers!');
}
})
},
render: function() {
return (
<div className="newsletter">
<p className="subject">
{this.props.newsletter.subject} - <a href="" onClick={this.send}>
Send
</a>
</p>
</div>
);
}
});
var List = React.createClass({
load: function() {
MailPoet.Ajax.post({
endpoint: 'newsletters',
action: 'get',
data: {},
onSuccess: function(response) {
this.setState({data: response});
}.bind(this)
});
},
getInitialState: function() {
return {data: []};
},
componentDidMount: function() {
this.load();
setInterval(this.load, 2000);
},
render: function() {
var nodes = this.state.data.map(function (newsletter) {
return (
<Newsletter key={newsletter.id} newsletter={newsletter} />
);
});
return (
<div className="newslettersList">
<h1>Newsletters</h1>
{nodes}
</div>
);
}
});
return List;
});

View File

@ -1,86 +0,0 @@
define(
'listing',
[
'react',
'jquery',
'mailpoet'
],
function(
React,
jQuery,
MailPoet
) {
var Newsletter = React.createClass({
send: function(e) {
e.preventDefault();
MailPoet.Ajax.post({
endpoint: 'newsletters',
action: 'send',
data: this.props.newsletter.id,
onSuccess: function(response) {
alert('Sent!');
},
onError: function(response) {
alert('Cannot send. Set the settings and add some subscribers!');
}
})
},
render: function() {
return (
<div className="newsletter">
<p className="subject">
{this.props.newsletter.subject} - <a href="" onClick={this.send}>
Send
</a>
</p>
</div>
);
}
});
var NewslettersList = React.createClass({
load: function() {
MailPoet.Ajax.post({
endpoint: 'newsletters',
action: 'get',
data: {},
onSuccess: function(response) {
this.setState({data: response});
}.bind(this)
});
},
getInitialState: function() {
return {data: []};
},
componentDidMount: function() {
this.load();
setInterval(this.load, this.props.pollInterval);
},
render: function() {
var nodes = this.state.data.map(function (newsletter) {
return (
<Newsletter key={newsletter.id} newsletter={newsletter} />
);
});
return (
<div className="newslettersList">
{nodes}
</div>
);
}
});
var element = jQuery('#newsletters_list');
if(element.length > 0) {
React.render(
<NewslettersList pollInterval={2000} />,
element[0]
);
}
});

View File

@ -3,12 +3,14 @@ define(
[ [
'react', 'react',
'react-router', 'react-router',
'newsletters/form.jsx' 'newsletters/form.jsx',
'newsletters/list.jsx'
], ],
function( function(
React, React,
Router, Router,
Form Form,
List
) { ) {
var DefaultRoute = Router.DefaultRoute; var DefaultRoute = Router.DefaultRoute;
@ -23,7 +25,7 @@ define(
<header> <header>
<ul> <ul>
<li> <li>
<Link to="listing">Newsletters</Link> <Link to="list">Newsletters</Link>
</li> </li>
<li> <li>
<Link to="form">New</Link> <Link to="form">New</Link>
@ -37,21 +39,11 @@ define(
} }
}); });
var Listing = React.createClass({
render: function () {
return (
<div>
<h1>Newsletters</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="list" handler={List}/>
<Route name="form" handler={Form}/> <Route name="form" handler={Form}/>
<DefaultRoute handler={Listing}/> <DefaultRoute handler={List}/>
</Route> </Route>
); );

View File

@ -40,7 +40,7 @@ config.push(_.extend({}, baseConfig, {
'settings.jsx', 'settings.jsx',
'subscribers.jsx', 'subscribers.jsx',
'newsletters/newsletters.jsx', 'newsletters/newsletters.jsx',
'newsletters/listing.jsx', 'newsletters/list.jsx',
'newsletters/form.jsx' 'newsletters/form.jsx'
] ]
}, },