From fe765656f8a068924a2424f131d07b22fea7437b Mon Sep 17 00:00:00 2001 From: Forrest Li Date: Wed, 4 Dec 2019 17:18:45 -0500 Subject: [PATCH] fix(WidgetManager): Incorrect handling of widget visibility with vdom --- Sources/Widgets/Core/WidgetManager/index.js | 57 ++++++++++----------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/Sources/Widgets/Core/WidgetManager/index.js b/Sources/Widgets/Core/WidgetManager/index.js index 952ffc039a5..39e01947144 100644 --- a/Sources/Widgets/Core/WidgetManager/index.js +++ b/Sources/Widgets/Core/WidgetManager/index.js @@ -137,43 +137,40 @@ function vtkWidgetManager(publicAPI, model) { .getRepresentations() .filter((r) => r.isA('vtkSVGRepresentation')); - if (widget.getVisibility() && svgReps.length) { - const pendingContent = svgReps + let pendingContent = []; + if (widget.getVisibility()) { + pendingContent = svgReps .filter((r) => r.getVisibility()) .map((r) => r.render()); - Promise.all(pendingContent).then((vnodes) => { - const oldVTree = svgVTrees.get(widget); - const newVTree = createSvgElement('g'); - for (let ni = 0; ni < vnodes.length; ni++) { - newVTree.appendChild(vnodes[ni]); - } + } - const widgetGroup = widgetToSvgMap.get(widget); - let node = widgetGroup; + Promise.all(pendingContent).then((vnodes) => { + const oldVTree = svgVTrees.get(widget); + const newVTree = createSvgElement('g'); + for (let ni = 0; ni < vnodes.length; ni++) { + newVTree.appendChild(vnodes[ni]); + } - const patchFns = diff(oldVTree, newVTree); - for (let j = 0; j < patchFns.length; j++) { - node = patchFns[j](node); - } + const widgetGroup = widgetToSvgMap.get(widget); + let node = widgetGroup; - if (!widgetGroup && node) { - // add - model.svgRoot.appendChild(node); - widgetToSvgMap.set(widget, node); - } else if (widgetGroup && !node) { - // delete - widgetGroup.remove(); - widgetToSvgMap.delete(widget); - } + const patchFns = diff(oldVTree, newVTree); + for (let j = 0; j < patchFns.length; j++) { + node = patchFns[j](node); + } - svgVTrees.set(widget, newVTree); - }); - } else { - const g = widgetToSvgMap.get(widget); - if (g) { - g.innerHTML = ''; + if (!widgetGroup && node) { + // add + model.svgRoot.appendChild(node); + widgetToSvgMap.set(widget, node); + } else if (widgetGroup && !node) { + // delete + widgetGroup.remove(); + widgetToSvgMap.delete(widget); } - } + + svgVTrees.set(widget, newVTree); + }); } } }