From 6205d084518ac2db6bc33dfb2d2c128d6f298075 Mon Sep 17 00:00:00 2001 From: Eric Tuvesson Date: Mon, 18 Nov 2024 17:06:10 +0100 Subject: [PATCH] fix: showPopup replace error (#82) Error: "TypeError: Cannot read properties of undefined (reading 'replace')" --- packages/noodl-runtime/src/nodecontext.js | 11 ++++++++++- packages/noodl-viewer-react/src/api/navigation.js | 8 +++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/noodl-runtime/src/nodecontext.js b/packages/noodl-runtime/src/nodecontext.js index 32e26dc..9060e9a 100644 --- a/packages/noodl-runtime/src/nodecontext.js +++ b/packages/noodl-runtime/src/nodecontext.js @@ -230,7 +230,7 @@ NodeContext.prototype.deregisterComponentModel = function (componentModel) { NodeContext.prototype.fetchComponentBundle = async function (name) { const fetchBundle = async (name) => { - let baseUrl = Noodl.Env["BaseUrl"] || '/'; + let baseUrl = Noodl.Env['BaseUrl'] || '/'; let bundleUrl = `${baseUrl}noodl_bundles/${name}.json`; const response = await fetch(bundleUrl); @@ -455,6 +455,15 @@ NodeContext.prototype.setPopupCallbacks = function ({ onShow, onClose }) { this.onClosePopup = onClose; }; +/** + * @param {string} popupComponent + * @param {Record} params + * @param {{ + * senderNode?: unknown; + * onClosePopup?: (action?: string, results: object) => void; + * }} args + * @returns + */ NodeContext.prototype.showPopup = async function (popupComponent, params, args) { if (!this.onShowPopup) return; diff --git a/packages/noodl-viewer-react/src/api/navigation.js b/packages/noodl-viewer-react/src/api/navigation.js index 7612aee..0646304 100644 --- a/packages/noodl-viewer-react/src/api/navigation.js +++ b/packages/noodl-viewer-react/src/api/navigation.js @@ -2,12 +2,18 @@ const { RouterHandler } = require('../nodes/navigation/router-handler'); const NoodlRuntime = require('@noodl/runtime'); const navigation = { + /** + * This is set by "packages/noodl-viewer-react/src/noodl-js-api.js" + * @type {NoodlRuntime} + */ + _noodlRuntime: undefined, + async showPopup(componentPath, params) { return new Promise((resolve) => { navigation._noodlRuntime.context.showPopup(componentPath, params, { onClosePopup: (action, results) => { resolve({ - action: action.replace('closeAction-', ''), + action: action?.replace('closeAction-', ''), parameters: results }); }