From d4451e0f8a8875e1191c66bac7be3b4e1698fbe0 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Wed, 18 Dec 2024 17:54:00 +0300 Subject: [PATCH] A question selector dropdown disappears (#494) Fixes #493 Co-authored-by: tsv2013 --- src/visualizationPanel.ts | 5 +++++ tests/visualizationPanel.test.ts | 33 ++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) 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