From f51335606b3319938f3c9eac17aa7716423533bb Mon Sep 17 00:00:00 2001 From: Andrew Telnov Date: Tue, 27 Jun 2023 07:51:24 +0300 Subject: [PATCH] Could not modify dropdown value from survey correctly if choices are loading from web fix #6433 --- src/question_baseselect.ts | 3 +++ tests/choicesRestfultests.ts | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/question_baseselect.ts b/src/question_baseselect.ts index 951245ec1d..0a286138da 100644 --- a/src/question_baseselect.ts +++ b/src/question_baseselect.ts @@ -1155,6 +1155,9 @@ export class QuestionSelectBase extends Question { } } super.updateValueFromSurvey(newValue); + if((this.isRunningChoices || this.choicesByUrl.isRunning) && !this.isEmpty()) { + this.cachedValueForUrlRequests = this.value; + } if (!!newComment) { this.setNewComment(newComment); } diff --git a/tests/choicesRestfultests.ts b/tests/choicesRestfultests.ts index f3d2de47a0..c5f09349ec 100644 --- a/tests/choicesRestfultests.ts +++ b/tests/choicesRestfultests.ts @@ -724,6 +724,24 @@ QUnit.test("Set value before loading data, bug #1089", function(assert) { assert.equal(question.value, "CA", "'CA' value is still here"); assert.equal(question.selectedItem.value, "CA", "selectedItem is correct"); }); +QUnit.test("Set value before loading data + defaultValue", function(assert) { + const survey = new SurveyModel(); + survey.addNewPage("1"); + const question = new QuestionDropdownModelTester("q1"); + question.defaultValue = "CA"; + question.choicesByUrl.url = "{state}"; + survey.pages[0].addQuestion(question); + question.hasItemsCallbackDelay = true; + question.onSurveyLoad(); + question.restFulTest.isRequestRunning = true; + assert.equal(question.restFulTest.isRunning, true, "request should be running"); + assert.equal(question.value, "CA", "Set default Value"); + survey.mergeData({ "q1": "TX" }); + question.restFulTest.isRequestRunning = false; + question["onLoadChoicesFromUrl"]([new ItemValue("CA"), new ItemValue("TX")]); + assert.equal(question.value, "TX", "'TX' value is here"); + assert.equal(question.selectedItem.value, "TX", "selectedItem is correct"); +}); QUnit.test("Clear value on getting empty array, bug #6251", function(assert) { var survey = new SurveyModel(); survey.addNewPage("1");