diff --git a/src/visualizationPanel.ts b/src/visualizationPanel.ts index 35ed6d253..f2688c18c 100644 --- a/src/visualizationPanel.ts +++ b/src/visualizationPanel.ts @@ -400,6 +400,11 @@ export class VisualizationPanel extends VisualizerBase { order.forEach(name => { newElements.push(this._elements.filter(el => el.name === name)[0]); }); + this._elements.forEach(el => { + if(order.indexOf(el.name) == -1) { + newElements.push(el); + } + }); this._elements = newElements; this.visibleElementsChanged(undefined, "REORDERED"); } diff --git a/tests/visualizationPanel.test.ts b/tests/visualizationPanel.test.ts index c34105c49..d0d16a240 100644 --- a/tests/visualizationPanel.test.ts +++ b/tests/visualizationPanel.test.ts @@ -791,3 +791,36 @@ test("reorderVisibleElements", () => { expect(state2.elements?.map(el => el.name)).toStrictEqual(["q2", "q1", "q3"]); expect(stateChagedCounter).toBe(1); }); + +test("keep hidden element on reorder", () => { + const json = { + elements: [ + { + type: "text", + name: "q1", + }, + { + type: "text", + name: "q2", + }, + { + type: "text", + name: "q3", + } + ], + }; + const survey = new SurveyModel(json); + let visPanel = new VisualizationPanel(survey.getAllQuestions(), [], { layoutEngine: new LayoutEngine(true) }); + + expect(visPanel.getElements().length).toEqual(3); + expect(visPanel.getElements().map(el => el.isVisible)).toStrictEqual([true, true, true]); + expect(visPanel.getElements().map(el => el.name)).toStrictEqual(["q1", "q2", "q3"]); + visPanel.hideElement("q1"); + expect(visPanel.getElements().length).toEqual(3); + expect(visPanel.getElements().map(el => el.isVisible)).toStrictEqual([false, true, true]); + expect(visPanel.getElements().map(el => el.name)).toStrictEqual(["q1", "q2", "q3"]); + visPanel.reorderVisibleElements(["q3", "q2"]); + expect(visPanel.getElements().length).toEqual(3); + expect(visPanel.getElements().map(el => el.isVisible)).toStrictEqual([true, true, false]); + expect(visPanel.getElements().map(el => el.name)).toStrictEqual(["q3", "q2", "q1"]); +}); \ No newline at end of file