Type & Template
- fixed endpoint's name causing issues on case sensitive systems - improved behaviour of delete - added loading state for boxes - added Breadcrumb ReactClass - added common styles for breadcrumb
This commit is contained in:
@@ -9,4 +9,5 @@
|
|||||||
|
|
||||||
@require 'form_editor'
|
@require 'form_editor'
|
||||||
@require 'listing'
|
@require 'listing'
|
||||||
@require 'box'
|
@require 'box'
|
||||||
|
@require 'breadcrumb'
|
@@ -1,3 +1,6 @@
|
|||||||
|
.mailpoet_boxes.mailpoet_boxes_loading
|
||||||
|
opacity: 0.2
|
||||||
|
|
||||||
.mailpoet_boxes li
|
.mailpoet_boxes li
|
||||||
float: left
|
float: left
|
||||||
position: relative
|
position: relative
|
||||||
|
14
assets/css/src/breadcrumb.styl
Normal file
14
assets/css/src/breadcrumb.styl
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
.mailpoet_breadcrumb
|
||||||
|
font-size: 0.9em
|
||||||
|
text-transform: uppercase
|
||||||
|
color: #444
|
||||||
|
|
||||||
|
.mailpoet_breadcrumb .mailpoet_current
|
||||||
|
font-weight: bold
|
||||||
|
|
||||||
|
.mailpoet_breadcrumb a
|
||||||
|
text-decoration: none
|
||||||
|
color: #444
|
||||||
|
|
||||||
|
.mailpoet_breadcrumb a:hover
|
||||||
|
color: darken(#444, 50%)
|
76
assets/js/src/newsletters/breadcrumb.jsx
Normal file
76
assets/js/src/newsletters/breadcrumb.jsx
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
define(
|
||||||
|
[
|
||||||
|
'react',
|
||||||
|
'react-router',
|
||||||
|
'classnames'
|
||||||
|
],
|
||||||
|
function(
|
||||||
|
React,
|
||||||
|
Router,
|
||||||
|
classNames
|
||||||
|
) {
|
||||||
|
var Link = Router.Link;
|
||||||
|
|
||||||
|
var Breadcrumb = React.createClass({
|
||||||
|
mixins: [
|
||||||
|
Router.Navigation
|
||||||
|
],
|
||||||
|
getInitialState: function() {
|
||||||
|
return {
|
||||||
|
step: null,
|
||||||
|
steps: [
|
||||||
|
{
|
||||||
|
name: 'type',
|
||||||
|
label: 'Select type',
|
||||||
|
link: '/new'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'template',
|
||||||
|
label: 'Template'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'editor',
|
||||||
|
label: 'Designer'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'send',
|
||||||
|
label: 'Send'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
},
|
||||||
|
render: function() {
|
||||||
|
var steps = this.state.steps.map(function(step, index) {
|
||||||
|
var stepClasses = classNames(
|
||||||
|
{ 'mailpoet_current': (this.props.step === step.name) }
|
||||||
|
);
|
||||||
|
|
||||||
|
var label = step.label;
|
||||||
|
|
||||||
|
if(step['link'] !== undefined && this.props.step !== step.name) {
|
||||||
|
label = (
|
||||||
|
<Link to={ step.link }>{ step.label }</Link>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<span key={ 'step-'+index }>
|
||||||
|
<span className={ stepClasses }>
|
||||||
|
{ label }
|
||||||
|
</span>
|
||||||
|
{ (index < (this.state.steps.length - 1) ) ? ' > ' : '' }
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}.bind(this));
|
||||||
|
|
||||||
|
return (
|
||||||
|
<p className="mailpoet_breadcrumb">
|
||||||
|
{ steps }
|
||||||
|
</p>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return Breadcrumb;
|
||||||
|
}
|
||||||
|
);
|
@@ -1,13 +1,17 @@
|
|||||||
define(
|
define(
|
||||||
[
|
[
|
||||||
'react',
|
'react',
|
||||||
'mailpoet',
|
'mailpoet',
|
||||||
'react-router'
|
'react-router',
|
||||||
|
'classnames',
|
||||||
|
'newsletters/breadcrumb.jsx'
|
||||||
],
|
],
|
||||||
function(
|
function(
|
||||||
React,
|
React,
|
||||||
MailPoet,
|
MailPoet,
|
||||||
Router
|
Router,
|
||||||
|
classNames,
|
||||||
|
Breadcrumb
|
||||||
) {
|
) {
|
||||||
var NewsletterTemplates = React.createClass({
|
var NewsletterTemplates = React.createClass({
|
||||||
mixins: [
|
mixins: [
|
||||||
@@ -26,7 +30,7 @@ define(
|
|||||||
this.setState({ loading: true });
|
this.setState({ loading: true });
|
||||||
|
|
||||||
MailPoet.Ajax.post({
|
MailPoet.Ajax.post({
|
||||||
endpoint: 'newslettertemplates',
|
endpoint: 'newsletterTemplates',
|
||||||
action: 'getAll',
|
action: 'getAll',
|
||||||
}).done(function(response) {
|
}).done(function(response) {
|
||||||
if(this.isMounted()) {
|
if(this.isMounted()) {
|
||||||
@@ -37,22 +41,29 @@ define(
|
|||||||
}
|
}
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
},
|
},
|
||||||
handleSelectTemplate: function(id) {
|
handleSelectTemplate: function(template) {
|
||||||
console.log('select '+id);
|
console.log('select '+template.id);
|
||||||
},
|
},
|
||||||
handlePreviewTemplate: function(id) {
|
handlePreviewTemplate: function(template) {
|
||||||
console.log('preview '+id);
|
console.log('preview '+template.id);
|
||||||
},
|
},
|
||||||
handleDeleteTemplate: function(id) {
|
handleDeleteTemplate: function(template) {
|
||||||
this.setState({ loading: true });
|
this.setState({ loading: true });
|
||||||
|
if(
|
||||||
MailPoet.Ajax.post({
|
window.confirm(
|
||||||
endpoint: 'newslettertemplates',
|
'You are about to delete the template named "'+ template.name +'"'
|
||||||
action: 'delete',
|
)
|
||||||
data: id
|
) {
|
||||||
}).done(function(response) {
|
MailPoet.Ajax.post({
|
||||||
this.getTemplates();
|
endpoint: 'newsletterTemplates',
|
||||||
}.bind(this));
|
action: 'delete',
|
||||||
|
data: template.id
|
||||||
|
}).done(function(response) {
|
||||||
|
this.getTemplates();
|
||||||
|
}.bind(this));
|
||||||
|
} else {
|
||||||
|
this.setState({ loading: false });
|
||||||
|
}
|
||||||
},
|
},
|
||||||
render: function() {
|
render: function() {
|
||||||
var templates = this.state.templates.map(function(template, index) {
|
var templates = this.state.templates.map(function(template, index) {
|
||||||
@@ -69,14 +80,14 @@ define(
|
|||||||
<div className="mailpoet_actions">
|
<div className="mailpoet_actions">
|
||||||
<a
|
<a
|
||||||
className="button button-primary"
|
className="button button-primary"
|
||||||
onClick={ this.handleSelectTemplate.bind(null, template.id) }
|
onClick={ this.handleSelectTemplate.bind(null, template) }
|
||||||
>
|
>
|
||||||
Select
|
Select
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a
|
<a
|
||||||
className="button button-secondary"
|
className="button button-secondary"
|
||||||
onClick={ this.handlePreviewTemplate.bind(null, template.id) }
|
onClick={ this.handlePreviewTemplate.bind(null, template) }
|
||||||
>
|
>
|
||||||
Preview
|
Preview
|
||||||
</a>
|
</a>
|
||||||
@@ -84,7 +95,7 @@ define(
|
|||||||
<div className="mailpoet_delete">
|
<div className="mailpoet_delete">
|
||||||
<a
|
<a
|
||||||
href="javascript:;"
|
href="javascript:;"
|
||||||
onClick={ this.handleDeleteTemplate.bind(null, template.id) }
|
onClick={ this.handleDeleteTemplate.bind(null, template) }
|
||||||
>
|
>
|
||||||
Delete
|
Delete
|
||||||
</a>
|
</a>
|
||||||
@@ -93,21 +104,19 @@ define(
|
|||||||
);
|
);
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
|
var boxClasses = classNames(
|
||||||
|
'mailpoet_boxes',
|
||||||
|
'clearfix',
|
||||||
|
{ 'mailpoet_boxes_loading': this.state.loading }
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<h1>Select a template</h1>
|
<h1>Select a template</h1>
|
||||||
|
|
||||||
<div className="mailpoet_breadcrumbs">
|
<Breadcrumb step="template" />
|
||||||
Select type
|
|
||||||
>
|
|
||||||
<strong>Template</strong>
|
|
||||||
>
|
|
||||||
Designer >
|
|
||||||
Send
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
<ul className={ boxClasses }>
|
||||||
<ul className="mailpoet_boxes clearfix">
|
|
||||||
{ templates }
|
{ templates }
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,13 +1,15 @@
|
|||||||
define(
|
define(
|
||||||
[
|
[
|
||||||
'react',
|
'react',
|
||||||
'mailpoet',
|
'mailpoet',
|
||||||
'react-router'
|
'react-router',
|
||||||
|
'newsletters/breadcrumb.jsx'
|
||||||
],
|
],
|
||||||
function(
|
function(
|
||||||
React,
|
React,
|
||||||
MailPoet,
|
MailPoet,
|
||||||
Router
|
Router,
|
||||||
|
Breadcrumb
|
||||||
) {
|
) {
|
||||||
var NewsletterTypes = React.createClass({
|
var NewsletterTypes = React.createClass({
|
||||||
mixins: [
|
mixins: [
|
||||||
@@ -23,14 +25,7 @@ define(
|
|||||||
<div>
|
<div>
|
||||||
<h1>Pick a type of campaign</h1>
|
<h1>Pick a type of campaign</h1>
|
||||||
|
|
||||||
<div className="mailpoet_breadcrumbs">
|
<Breadcrumb step="type" />
|
||||||
<strong>Select type</strong>
|
|
||||||
>
|
|
||||||
Template
|
|
||||||
>
|
|
||||||
Designer >
|
|
||||||
Send
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<ul className="mailpoet_boxes clearfix">
|
<ul className="mailpoet_boxes clearfix">
|
||||||
<li data-type="standard">
|
<li data-type="standard">
|
||||||
|
Reference in New Issue
Block a user