From c7f71663d9cd532236e66c567041fb04b44e775e Mon Sep 17 00:00:00 2001 From: Pavel Dohnal Date: Thu, 30 Aug 2018 11:40:46 +0200 Subject: [PATCH] Make templates payload smaller [MAILPOET-1479] --- assets/js/src/newsletters/templates/template_box.jsx | 9 +-------- lib/API/JSON/v1/NewsletterTemplates.php | 6 +++++- lib/API/JSON/v1/Newsletters.php | 9 +++++++++ tests/unit/API/JSON/v1/NewsletterTemplatesTest.php | 2 +- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/assets/js/src/newsletters/templates/template_box.jsx b/assets/js/src/newsletters/templates/template_box.jsx index 419daee047..d8032d2ea3 100644 --- a/assets/js/src/newsletters/templates/template_box.jsx +++ b/assets/js/src/newsletters/templates/template_box.jsx @@ -1,5 +1,4 @@ import React from 'react'; -import _ from 'underscore'; import MailPoet from 'mailpoet'; import { confirmAlert } from 'react-confirm-alert'; import PropTypes from 'prop-types'; @@ -60,11 +59,6 @@ class TemplateBox extends React.Component { onSelect() { const { newsletterId, name, beforeSelect, afterSelect } = this.props; - let body = this.props.body; - - if (!_.isUndefined(body)) { - body = JSON.stringify(body); - } beforeSelect(); @@ -79,7 +73,7 @@ class TemplateBox extends React.Component { action: 'save', data: { id: newsletterId, - body, + template_id: this.props.id, }, }).done((response) => { afterSelect(true, response.data.id); @@ -151,7 +145,6 @@ TemplateBox.propTypes = { afterDelete: PropTypes.func.isRequired, beforeSelect: PropTypes.func.isRequired, afterSelect: PropTypes.func.isRequired, - body: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types }; export default TemplateBox; diff --git a/lib/API/JSON/v1/NewsletterTemplates.php b/lib/API/JSON/v1/NewsletterTemplates.php index 9df1bd8cda..f0bd823b12 100644 --- a/lib/API/JSON/v1/NewsletterTemplates.php +++ b/lib/API/JSON/v1/NewsletterTemplates.php @@ -29,7 +29,11 @@ class NewsletterTemplates extends APIEndpoint { } function getAll() { - $collection = NewsletterTemplate::orderByDesc('created_at')->orderByAsc('name')->findMany(); + $collection = NewsletterTemplate + ::selectExpr('id, categories, thumbnail, name, description, readonly') + ->orderByDesc('created_at') + ->orderByAsc('name') + ->findMany(); $templates = array_map(function($item) { return $item->asArray(); }, $collection); diff --git a/lib/API/JSON/v1/Newsletters.php b/lib/API/JSON/v1/Newsletters.php index 87e07871ab..680c522b0f 100644 --- a/lib/API/JSON/v1/Newsletters.php +++ b/lib/API/JSON/v1/Newsletters.php @@ -65,6 +65,15 @@ class Newsletters extends APIEndpoint { unset($data['options']); } + if(!empty($data['template_id'])) { + $template = NewsletterTemplate::whereEqual('id', $data['template_id'])->findOne(); + if(!empty($template)) { + $template = $template->asArray(); + $data['body'] = $template['body']; + } + unset($data['template_id']); + } + $newsletter = Newsletter::createOrUpdate($data); $errors = $newsletter->getErrors(); diff --git a/tests/unit/API/JSON/v1/NewsletterTemplatesTest.php b/tests/unit/API/JSON/v1/NewsletterTemplatesTest.php index 2c9f900432..cec726828d 100644 --- a/tests/unit/API/JSON/v1/NewsletterTemplatesTest.php +++ b/tests/unit/API/JSON/v1/NewsletterTemplatesTest.php @@ -49,7 +49,7 @@ class NewsletterTemplatesTest extends \MailPoetTest { $router = new NewsletterTemplates(); $response = $router->getAll(); expect($response->status)->equals(APIResponse::STATUS_OK); - expect($response->data)->equals($templates); + expect($response->data)->count(count($templates)); } function testItCanSaveANewTemplate() {