From 9811a1c5d9bc50cc65c5bd81234f603d1d7bd4ef Mon Sep 17 00:00:00 2001 From: David Taylor Date: Tue, 8 Jun 2021 16:46:07 +0100 Subject: [PATCH] DEV: Allow `transformed` values to be used in all widget hbs statements (#13331) Previously, the `transformed.blah` shortcut could only be used in top-level hbs statements like {{transformed.blah}}. When attempting to use it in a sub-expression like `{{concat "hello" transformed.world}}`, it would raise a "transformed is not defined" error. This commit updates the shortcut logic to make `transformed.blah` and `attrs.blah` work consistently in all hbs expressions. Co-authored-by: Jordan Vidrine --- .../tests/integration/widgets/widget-test.js | 24 +++++++++++++++++++ lib/javascripts/widget-hbs-compiler.js | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/discourse/tests/integration/widgets/widget-test.js b/app/assets/javascripts/discourse/tests/integration/widgets/widget-test.js index 6df1ef695a..aa1a27b016 100644 --- a/app/assets/javascripts/discourse/tests/integration/widgets/widget-test.js +++ b/app/assets/javascripts/discourse/tests/integration/widgets/widget-test.js @@ -262,6 +262,30 @@ discourseModule("Integration | Component | Widget | base", function (hooks) { }, }); + componentTest("using transformed values in a subexpression", { + template: hbs`{{mount-widget widget="attach-test"}}`, + + beforeEach() { + createWidget("testing", { + tagName: "span.value", + template: widgetHbs`{{attrs.value}}`, + }); + + createWidget("attach-test", { + transform() { + return { someValue: "world" }; + }, + tagName: "div.container", + template: widgetHbs`{{testing value=(concat "hello" " " transformed.someValue)}}`, + }); + }, + + test(assert) { + assert.ok(queryAll(".container").length, "renders container"); + assert.equal(queryAll(".container .value").text(), "hello world"); + }, + }); + componentTest("handlebars d-icon", { template: hbs`{{mount-widget widget="hbs-icon-test" args=args}}`, diff --git a/lib/javascripts/widget-hbs-compiler.js b/lib/javascripts/widget-hbs-compiler.js index e36aa3549c..63b12cdc72 100644 --- a/lib/javascripts/widget-hbs-compiler.js +++ b/lib/javascripts/widget-hbs-compiler.js @@ -16,7 +16,7 @@ function sexpValue(value) { } else if (value.type === "SubExpression") { return sexp(value); } - return pValue; + return resolve(pValue); } function pairsToObj(pairs) {