Newsletters router with multi page links.
This commit is contained in:
80
assets/js/src/newsletters/list.jsx
Normal file
80
assets/js/src/newsletters/list.jsx
Normal 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;
|
||||||
|
});
|
@ -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]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
@ -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>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -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'
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user