Skip to content

Commit 4f95676

Browse files
committed
MC-18601: Page Builder Render
1 parent 0831386 commit 4f95676

File tree

6 files changed

+89
-17
lines changed

6 files changed

+89
-17
lines changed

app/code/Magento/PageBuilder/view/adminhtml/web/js/form/form-mixin.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* See COPYING.txt for license details.
44
*/
55

6-
define(['jquery', 'Magento_PageBuilder/js/events', 'consoleLogger'], function ($, events, consoleLogger) {
6+
define(['jquery', 'Magento_PageBuilder/js/events', 'consoleLogger', 'Magento_PageBuilder/js/stage'], function ($, events, consoleLogger, stage) {
77
'use strict';
88

99
var mixin = {
@@ -50,12 +50,14 @@ define(['jquery', 'Magento_PageBuilder/js/events', 'consoleLogger'], function ($
5050
if (locks.length === 0) {
5151
submit();
5252
} else {
53+
stage.debugLog('Lock detected, waiting for resolution');
5354
timeout = setTimeout(function () {
5455
consoleLogger.error('Page Builder was rendering for 5 seconds without releasing locks.');
5556
}, 5000);
5657

5758
$('body').trigger('processStart');
5859
$.when.apply(null, locks).then(function () {
60+
stage.debugLog('Resolved lock, saving');
5961
$('body').trigger('processStop');
6062
clearTimeout(timeout);
6163
submit();

app/code/Magento/PageBuilder/view/adminhtml/web/js/master-format/render.js

Lines changed: 33 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/stage.js

Lines changed: 15 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/template/page-builder.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@
2121
<render/>
2222
</with>
2323
<iframe width="1" height="1" attr="src: config.render_url, id: 'render_frame_' + id" sandbox="allow-scripts" style="display: none;"></iframe>
24+
<textarea name="debug" rows="15" cols="250"></textarea>
2425
</if>
2526
</div>

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/master-format/render.ts

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,17 @@
44
*/
55

66
import $ from "jquery";
7+
import _ from "underscore";
78
import ContentTypeCollectionInterface from "../content-type-collection.types";
89
import { getSerializedTree } from "./render/serialize";
910

11+
function debugLog(message: any) {
12+
if (_.isObject(message) || _.isArray(message)) {
13+
message = JSON.stringify(message);
14+
}
15+
$("[name=debug]").append(message + "\n");
16+
}
17+
1018
export default class MasterFormatRenderer {
1119
public stageId: string;
1220
public channel: MessageChannel;
@@ -28,34 +36,45 @@ export default class MasterFormatRenderer {
2836
*/
2937
public applyBindings(rootContainer: ContentTypeCollectionInterface): Promise<string> {
3038
if (!this.getRenderFrame()) {
39+
debugLog("No render frame");
3140
console.error("No render frame present for Page Builder instance.");
3241
return;
3342
}
3443

3544
return new Promise((resolve, reject) => {
3645
if (this.ready) {
37-
this.channel.port1.postMessage({
38-
type: "render",
39-
message: {
40-
stageId: this.stageId,
41-
tree: getSerializedTree(rootContainer),
42-
},
43-
});
46+
debugLog("Frame is ready, posting data");
47+
try {
48+
this.channel.port1.postMessage({
49+
type: "render",
50+
message: {
51+
stageId: this.stageId,
52+
tree: getSerializedTree(rootContainer),
53+
},
54+
});
55+
} catch (e) {
56+
debugLog("Error in postMessage");
57+
debugLog(e);
58+
}
4459
this.channel.port1.onmessage = (event) => {
4560
if (event.isTrusted) {
4661
if (event.data.type === "render") {
4762
console.log(event.data.message);
63+
debugLog("Render complete, resolving event");
4864
resolve(event.data.message);
4965
}
5066
if (event.data.type === "template") {
67+
debugLog("Requested template " + event.data.message);
5168
this.loadTemplate(event.data.message);
5269
}
5370
} else {
5471
reject();
5572
}
5673
};
5774
} else {
75+
debugLog("Frame not ready, waiting for ready...");
5876
this.readyDeferred.then(() => {
77+
debugLog("Frame became ready");
5978
this.applyBindings(rootContainer).then((rendered: string) => {
6079
resolve(rendered);
6180
}).catch(() => {
@@ -90,6 +109,7 @@ export default class MasterFormatRenderer {
90109
*/
91110
private loadTemplate(name: string): void {
92111
require(["text!" + name], (template: string) => {
112+
debugLog("Loaded template " + name);
93113
this.channel.port1.postMessage({
94114
type: "template",
95115
message: {

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/stage.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ import buildStage from "./stage-builder";
2020
import {StageUpdateAfterParamsInterface} from "./stage-events.types";
2121
import deferred, {DeferredInterface} from "./utils/promise-deferred";
2222

23+
export function debugLog(message: any) {
24+
if (_.isObject(message) || _.isArray(message)) {
25+
message = JSON.stringify(message);
26+
}
27+
$("[name=debug]").append(message + "\n");
28+
}
29+
2330
export default class Stage {
2431
public static readonly rootContainerName: string = "root-container";
2532
public pageBuilder: PageBuilderInterface;
@@ -47,11 +54,14 @@ export default class Stage {
4754
* @type {(() => void) & _.Cancelable}
4855
*/
4956
private applyBindingsDebounce = _.debounce(() => {
57+
debugLog("------------------------------------------");
58+
debugLog("Lock created");
5059
this.renderingLock = $.Deferred();
5160
this.render.applyBindings(this.rootContainer)
5261
.then((renderedOutput: string) => events.trigger(`stage:${ this.id }:masterFormatRenderAfter`, {
5362
value: renderedOutput,
5463
})).then(() => {
64+
debugLog("Lock resolved");
5565
this.renderingLock.resolve();
5666
}).catch((error: Error) => {
5767
console.error(error);

0 commit comments

Comments
 (0)