diff --git a/assets/js/src/newsletters/templates.jsx b/assets/js/src/newsletters/templates.jsx index 1e2997890a..0b72b02f2e 100644 --- a/assets/js/src/newsletters/templates.jsx +++ b/assets/js/src/newsletters/templates.jsx @@ -6,280 +6,280 @@ import classNames from 'classnames'; import Breadcrumb from 'newsletters/breadcrumb.jsx'; import HelpTooltip from 'help-tooltip.jsx'; - const ImportTemplate = React.createClass({ - saveTemplate: function (saveTemplate) { - const template = saveTemplate; +const ImportTemplate = React.createClass({ + saveTemplate: function (saveTemplate) { + const template = saveTemplate; - // Stringify to enable transmission of primitive non-string value types - if (!_.isUndefined(template.body)) { - template.body = JSON.stringify(template.body); - } + // Stringify to enable transmission of primitive non-string value types + if (!_.isUndefined(template.body)) { + template.body = JSON.stringify(template.body); + } - MailPoet.Modal.loading(true); + MailPoet.Modal.loading(true); - MailPoet.Ajax.post({ - api_version: window.mailpoet_api_version, - endpoint: 'newsletterTemplates', - action: 'save', - data: template, - }).always(() => { - MailPoet.Modal.loading(false); - }).done((response) => { - this.props.onImport(response.data); - }).fail((response) => { - if (response.errors.length > 0) { - MailPoet.Notice.error( - response.errors.map((error) => { return error.message; }), - { scroll: true } - ); - } - }); - }, - handleSubmit: function (e) { - e.preventDefault(); - - if (_.size(this.refs.templateFile.files) <= 0) return false; - - - const file = _.first(this.refs.templateFile.files); - const reader = new FileReader(); - const saveTemplate = this.saveTemplate; - - reader.onload = (evt) => { - try { - saveTemplate(JSON.parse(evt.target.result)); - MailPoet.trackEvent('Emails > Template imported', { - 'MailPoet Free version': window.mailpoet_version, - }); - } catch (err) { - MailPoet.Notice.error(MailPoet.I18n.t('templateFileMalformedError')); - } - }; - - reader.readAsText(file); - }, - render: function () { - return ( -
-

{MailPoet.I18n.t('importTemplateTitle')}

-
- -

- -

-
-
+ MailPoet.Ajax.post({ + api_version: window.mailpoet_api_version, + endpoint: 'newsletterTemplates', + action: 'save', + data: template, + }).always(() => { + MailPoet.Modal.loading(false); + }).done((response) => { + this.props.onImport(response.data); + }).fail((response) => { + if (response.errors.length > 0) { + MailPoet.Notice.error( + response.errors.map((error) => { return error.message; }), + { scroll: true } ); - }, + } }); + }, + handleSubmit: function (e) { + e.preventDefault(); - const NewsletterTemplates = React.createClass({ - getInitialState: function () { - return { - loading: false, - templates: [], - }; - }, - componentDidMount: function () { - this.getTemplates(); - }, - getTemplates: function () { - this.setState({ loading: true }); + if (_.size(this.refs.templateFile.files) <= 0) return false; - MailPoet.Modal.loading(true); - MailPoet.Ajax.post({ - api_version: window.mailpoet_api_version, - endpoint: 'newsletterTemplates', - action: 'getAll', - }).always(() => { - MailPoet.Modal.loading(false); - }).done((response) => { - if (this.isMounted()) { - if (response.data.length === 0) { - response.data = [ - { - name: - MailPoet.I18n.t('mailpoetGuideTemplateTitle'), - description: - MailPoet.I18n.t('mailpoetGuideTemplateDescription'), - readonly: '1', - }, - ]; - } - this.setState({ - templates: response.data, - loading: false, - }); - } - }).fail((response) => { - if (response.errors.length > 0) { - MailPoet.Notice.error( - response.errors.map((error) => { return error.message; }), - { scroll: true } - ); - } - }); - }, - handleSelectTemplate: function (template) { - let body = template.body; + const file = _.first(this.refs.templateFile.files); + const reader = new FileReader(); + const saveTemplate = this.saveTemplate; - // Stringify to enable transmission of primitive non-string value types - if (!_.isUndefined(body)) { - body = JSON.stringify(body); - } - - MailPoet.trackEvent('Emails > Template selected', { + reader.onload = (evt) => { + try { + saveTemplate(JSON.parse(evt.target.result)); + MailPoet.trackEvent('Emails > Template imported', { 'MailPoet Free version': window.mailpoet_version, - 'Email name': template.name, }); + } catch (err) { + MailPoet.Notice.error(MailPoet.I18n.t('templateFileMalformedError')); + } + }; - MailPoet.Ajax.post({ - api_version: window.mailpoet_api_version, - endpoint: 'newsletters', - action: 'save', - data: { - id: this.props.params.id, - body: body, - }, - }).done((response) => { - // TODO: Move this URL elsewhere - window.location = 'admin.php?page=mailpoet-newsletter-editor&id=' + response.data.id; - }).fail((response) => { - if (response.errors.length > 0) { - MailPoet.Notice.error( - response.errors.map((error) => { return error.message; }), - { scroll: true } - ); - } - }); - }, - handleDeleteTemplate: function (template) { - this.setState({ loading: true }); - const onConfirm = () => { - MailPoet.Ajax.post({ - api_version: window.mailpoet_api_version, - endpoint: 'newsletterTemplates', - action: 'delete', - data: { - id: template.id, + reader.readAsText(file); + }, + render: function () { + return ( +
+

{MailPoet.I18n.t('importTemplateTitle')}

+
+ +

+ +

+
+
+ ); + }, +}); + +const NewsletterTemplates = React.createClass({ + getInitialState: function () { + return { + loading: false, + templates: [], + }; + }, + componentDidMount: function () { + this.getTemplates(); + }, + getTemplates: function () { + this.setState({ loading: true }); + + MailPoet.Modal.loading(true); + + MailPoet.Ajax.post({ + api_version: window.mailpoet_api_version, + endpoint: 'newsletterTemplates', + action: 'getAll', + }).always(() => { + MailPoet.Modal.loading(false); + }).done((response) => { + if (this.isMounted()) { + if (response.data.length === 0) { + response.data = [ + { + name: + MailPoet.I18n.t('mailpoetGuideTemplateTitle'), + description: + MailPoet.I18n.t('mailpoetGuideTemplateDescription'), + readonly: '1', }, - }).done(() => { - this.getTemplates(); - }).fail((response) => { - if (response.errors.length > 0) { - MailPoet.Notice.error( - response.errors.map((error) => { return error.message; }), - { scroll: true } - ); - } - }); - }; - const onCancel = () => { - this.setState({ loading: false }); - }; - confirmAlert({ - title: MailPoet.I18n.t('confirmTitle'), - message: MailPoet.I18n.t('confirmTemplateDeletion').replace('%$1s', template.name), - confirmLabel: MailPoet.I18n.t('confirmLabel'), - cancelLabel: MailPoet.I18n.t('cancelLabel'), - onConfirm: onConfirm, - onCancel: onCancel, + ]; + } + this.setState({ + templates: response.data, + loading: false, }); - }, - handleShowTemplate: function (template) { - MailPoet.Modal.popup({ - title: template.name, - template: '
', - data: template, - }); - }, - handleTemplateImport: function () { - this.getTemplates(); - }, - render: function () { - const templates = this.state.templates.map((template, index) => { - const deleteLink = ( -
- - {MailPoet.I18n.t('delete')} - -
- ); - let thumbnail = ''; - - if (typeof template.thumbnail === 'string' - && template.thumbnail.length > 0) { - thumbnail = ( - - -
-
- ); - } - - return ( -
  • -
    - { thumbnail } -
    - -
    -

    { template.name }

    -

    { template.description }

    -
    - -
    - - {MailPoet.I18n.t('preview')} - -   - - {MailPoet.I18n.t('select')} - -
    - { (template.readonly === '1') ? false : deleteLink } -
  • - ); - }); - - const boxClasses = classNames( - 'mailpoet_boxes', - 'clearfix', - { mailpoet_boxes_loading: this.state.loading } + } + }).fail((response) => { + if (response.errors.length > 0) { + MailPoet.Notice.error( + response.errors.map((error) => { return error.message; }), + { scroll: true } ); - - return ( -
    -

    {MailPoet.I18n.t('selectTemplateTitle')}

    - - - - - - -
    - ); - }, + } }); + }, + handleSelectTemplate: function (template) { + let body = template.body; + + // Stringify to enable transmission of primitive non-string value types + if (!_.isUndefined(body)) { + body = JSON.stringify(body); + } + + MailPoet.trackEvent('Emails > Template selected', { + 'MailPoet Free version': window.mailpoet_version, + 'Email name': template.name, + }); + + MailPoet.Ajax.post({ + api_version: window.mailpoet_api_version, + endpoint: 'newsletters', + action: 'save', + data: { + id: this.props.params.id, + body: body, + }, + }).done((response) => { + // TODO: Move this URL elsewhere + window.location = 'admin.php?page=mailpoet-newsletter-editor&id=' + response.data.id; + }).fail((response) => { + if (response.errors.length > 0) { + MailPoet.Notice.error( + response.errors.map((error) => { return error.message; }), + { scroll: true } + ); + } + }); + }, + handleDeleteTemplate: function (template) { + this.setState({ loading: true }); + const onConfirm = () => { + MailPoet.Ajax.post({ + api_version: window.mailpoet_api_version, + endpoint: 'newsletterTemplates', + action: 'delete', + data: { + id: template.id, + }, + }).done(() => { + this.getTemplates(); + }).fail((response) => { + if (response.errors.length > 0) { + MailPoet.Notice.error( + response.errors.map((error) => { return error.message; }), + { scroll: true } + ); + } + }); + }; + const onCancel = () => { + this.setState({ loading: false }); + }; + confirmAlert({ + title: MailPoet.I18n.t('confirmTitle'), + message: MailPoet.I18n.t('confirmTemplateDeletion').replace('%$1s', template.name), + confirmLabel: MailPoet.I18n.t('confirmLabel'), + cancelLabel: MailPoet.I18n.t('cancelLabel'), + onConfirm: onConfirm, + onCancel: onCancel, + }); + }, + handleShowTemplate: function (template) { + MailPoet.Modal.popup({ + title: template.name, + template: '
    ', + data: template, + }); + }, + handleTemplateImport: function () { + this.getTemplates(); + }, + render: function () { + const templates = this.state.templates.map((template, index) => { + const deleteLink = ( +
    + + {MailPoet.I18n.t('delete')} + +
    + ); + let thumbnail = ''; + + if (typeof template.thumbnail === 'string' + && template.thumbnail.length > 0) { + thumbnail = ( + + +
    +
    + ); + } + + return ( +
  • +
    + { thumbnail } +
    + +
    +

    { template.name }

    +

    { template.description }

    +
    + +
    + + {MailPoet.I18n.t('preview')} + +   + + {MailPoet.I18n.t('select')} + +
    + { (template.readonly === '1') ? false : deleteLink } +
  • + ); + }); + + const boxClasses = classNames( + 'mailpoet_boxes', + 'clearfix', + { mailpoet_boxes_loading: this.state.loading } + ); + + return ( +
    +

    {MailPoet.I18n.t('selectTemplateTitle')}

    + + + + + + +
    + ); + }, +}); export default NewsletterTemplates;