From fff03c05bf5220cec12f4682ce35facffb7b56d0 Mon Sep 17 00:00:00 2001 From: Eric Tuvesson Date: Thu, 3 Oct 2024 11:24:57 +0200 Subject: [PATCH] fix(runtime): Close Popup node with no actions causing error (#78) TypeError: Cannot read properties of undefined (reading 'replace') at Object.onClosePopup (navigation.js:10:1) at EventEmitter. (nodecontext.js:491:1) at Object.onceWrapper (events.js:242:1) at EventEmitter.emit (events.js:153:1) at NoodlRuntime._doUpdate (noodl-runtime.js:338:1) --- .../src/nodes/navigation/closepopup.js | 3 ++- .../src/nodes/navigation/showpopup.js | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/noodl-viewer-react/src/nodes/navigation/closepopup.js b/packages/noodl-viewer-react/src/nodes/navigation/closepopup.js index db03840..961e9a5 100644 --- a/packages/noodl-viewer-react/src/nodes/navigation/closepopup.js +++ b/packages/noodl-viewer-react/src/nodes/navigation/closepopup.js @@ -51,8 +51,9 @@ const ClosePopupNode = { } }, close: function () { - if (this._internal.closeCallback) + if (this._internal.closeCallback) { this._internal.closeCallback(this._internal.closeAction, this._internal.resultValues); + } }, closeActionTriggered: function (name) { this._internal.closeAction = name; diff --git a/packages/noodl-viewer-react/src/nodes/navigation/showpopup.js b/packages/noodl-viewer-react/src/nodes/navigation/showpopup.js index e589bac..d3076a8 100644 --- a/packages/noodl-viewer-react/src/nodes/navigation/showpopup.js +++ b/packages/noodl-viewer-react/src/nodes/navigation/showpopup.js @@ -53,15 +53,24 @@ const ShowPopupNode = { this.context.showPopup(this._internal.target, this._internal.popupParams, { senderNode: this.nodeScope.componentOwner, + /** + * @param {string | undefined} action + * @param {*} results + */ onClosePopup: (action, results) => { this._internal.closeResults = results; - for (var key in results) { - if (this.hasOutput('closeResult-' + key)) this.flagOutputDirty('closeResult-' + key); + for (const key in results) { + if (this.hasOutput('closeResult-' + key)) { + this.flagOutputDirty('closeResult-' + key); + } } - if (!action) this.sendSignalOnOutput('Closed'); - else this.sendSignalOnOutput(action); + if (!action) { + this.sendSignalOnOutput('Closed'); + } else { + this.sendSignalOnOutput(action); + } } }); },