From 1d95820798d51dc7cd2a0a6ee240d26478de9030 Mon Sep 17 00:00:00 2001 From: Jelle De Loecker Date: Sun, 4 Feb 2024 14:37:53 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20custom-element=20render=20?= =?UTF-8?q?issue=20with=20overlaying=20variable=20instances?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + lib/core/variables.js | 6 +++++- lib/element/custom_element.js | 11 ++++++----- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af9f9d1c..fa812631 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ * Trigger `HePlaceholder` render when made & inserted in the DOM manually * Improve printed error messages during rendering * Actually update the `hawkejs.scene.exposed` values after receiving new data from the server +* Fix custom-element render issue with overlaying variable instances ## 2.3.15 (2023-11-27) diff --git a/lib/core/variables.js b/lib/core/variables.js index 35f6dc31..f4d40acb 100644 --- a/lib/core/variables.js +++ b/lib/core/variables.js @@ -24,7 +24,7 @@ const Variables = Fn.inherits('Hawkejs.Base', function Variables(renderer, varia * * @author Jelle De Loecker * @since 2.0.0 - * @version 2.0.0 + * @version 2.3.16 * * @param {Mixed} value * @param {Renderer} renderer @@ -33,6 +33,10 @@ const Variables = Fn.inherits('Hawkejs.Base', function Variables(renderer, varia */ Variables.setStatic(function cast(value, renderer) { + if (!renderer) { + throw new Error('Unable to cast to Variables without renderer instance'); + } + if (!value || typeof value != 'object') { return new Variables(renderer); } diff --git a/lib/element/custom_element.js b/lib/element/custom_element.js index 7ea7577d..4f1cc0b3 100644 --- a/lib/element/custom_element.js +++ b/lib/element/custom_element.js @@ -951,16 +951,17 @@ function addTemplateRenderer(element_class) { * * @author Jelle De Loecker * @since 2.0.0 - * @version 2.3.15 + * @version 2.3.16 * * @param {Boolean} re_render Is this a render done from outside a normal render? */ function renderCustomTemplate(re_render) { - var template = this.inner_template; + let template = this.inner_template, + has_prepare_logic = typeof this.prepareRenderVariables == 'function'; if (!template) { - return; + return this.prepareRenderVariables(); } let that = this, @@ -983,7 +984,7 @@ function renderCustomTemplate(re_render) { Hawkejs.series(function getRenderVariables(next) { - if (!that.prepareRenderVariables) { + if (!has_prepare_logic) { return next(); } @@ -1020,7 +1021,7 @@ function renderCustomTemplate(re_render) { } if (that[Hawkejs.VARIABLES]) { - render_vars = that[Hawkejs.VARIABLES].overlay(render_vars); + render_vars = Hawkejs.Variables.cast(that[Hawkejs.VARIABLES], renderer).overlay(render_vars); } render_vars.self = that;