Skip to content

Commit

Permalink
The survey.onTriggerExecuted event is not raised when a trigger expre…
Browse files Browse the repository at this point in the history
…ssion is evaluated fix #8273 (#8274)
  • Loading branch information
andrewtelnov committed May 15, 2024
1 parent 6b997a6 commit 1ebcf1b
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 3 deletions.
5 changes: 4 additions & 1 deletion src/conditionProcessValue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,11 @@ export class ProcessValue {
}
public isAnyKeyChanged(keys: any, usedNames: string[]): boolean {
for (var i = 0; i < usedNames.length; i++) {
var name = usedNames[i];
const name = usedNames[i];
if(!name) continue;
const lowerName = name.toLowerCase();
if (keys.hasOwnProperty(name)) return true;
if(name !== lowerName && keys.hasOwnProperty(lowerName)) return true;
var firstName = this.getFirstName(name);
if (!keys.hasOwnProperty(firstName)) continue;
if (name === firstName) return true;
Expand Down
10 changes: 8 additions & 2 deletions src/survey.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6378,14 +6378,20 @@ export class SurveyModel extends SurveyElementCore
*/
public setVariable(name: string, newValue: any): void {
if (!name) return;
const oldValue = this.getVariable(name);
if (!!this.valuesHash) {
delete this.valuesHash[name];
}
name = name.toLowerCase();
this.variablesHash[name] = newValue;
this.notifyElementsOnAnyValueOrVariableChanged(name);
this.runConditionOnValueChanged(name, newValue);
this.onVariableChanged.fire(this, { name: name, value: newValue });
if(!Helpers.isTwoValueEquals(oldValue, newValue)) {
this.runConditionOnValueChanged(name, newValue);
var triggerKeys: { [index: string]: any } = {};
triggerKeys[name] = { newValue: newValue, oldValue: oldValue };
this.checkTriggers(triggerKeys, false, false, name);
this.onVariableChanged.fire(this, { name: name, value: newValue });
}
}
/**
* Returns the names of all variables in the survey.
Expand Down
92 changes: 92 additions & 0 deletions tests/surveytriggertests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -729,3 +729,95 @@ QUnit.test("runexpression trigger and isNextPage", function(assert) {

FunctionFactory.Instance.unregister("calcCust");
});
QUnit.test("runexpression trigger and calculated values, Bug#8273 Case#1", function(assert) {
const survey = new SurveyModel({
pages: [
{
elements: [
{ type: "text", name: "q1" },
{ type: "text", name: "q2" }
]
}
],
calculatedValues: [
{ name: "calc1", expression: "{q1} = 'abc'" }
],
triggers: [
{
"type": "runexpression",
"expression": "{calc1} = true",
"runExpression": "10",
"setToName": "q2"
},
{
"type": "runexpression",
"expression": "{calc1} = false",
"runExpression": "20",
"setToName": "q2"
}
]
});
const q1 = survey.getQuestionByName("q1");
const q2 = survey.getQuestionByName("q2");
const calcVal = survey.calculatedValues[0];
assert.equal(calcVal.value, false, "calcValue.val #1");
assert.equal(q2.value, 20, "q2.value #1");
q1.value = "a";
assert.equal(calcVal.value, false, "calcValue.val #2");
assert.equal(q2.value, 20, "q2.value #2");
q1.value = "abc";
assert.equal(calcVal.value, true, "calcValue.val #3");
assert.equal(q2.value, 10, "q2.value #3");
q1.value = "abcd";
assert.equal(calcVal.value, false, "calcValue.val #4");
assert.equal(q2.value, 20, "q2.value #4");
});
QUnit.test("runexpression trigger and calculated values, Bug#8273 Case#2", function(assert) {
const survey = new SurveyModel({
pages: [
{
elements: [
{ type: "text", name: "q1" },
{ type: "text", name: "q2" }
]
}
],
calculatedValues: [
{ name: "calcVal.1", expression: "{q1} = 'abc'" },
{ name: "calcVal.2", expression: "{q1} = 'd'" }
],
triggers: [
{
"type": "runexpression",
"expression": "{calcVal.1} = true",
"runExpression": "10",
"setToName": "q2"
},
{
"type": "runexpression",
"expression": "{calcVal.2} = true",
"runExpression": "20",
"setToName": "q2"
}
]
});
const q1 = survey.getQuestionByName("q1");
const q2 = survey.getQuestionByName("q2");
const calcVal1 = survey.calculatedValues[0];
const calcVal2 = survey.calculatedValues[1];
assert.equal(calcVal1.value, false, "calcVal1.val #1");
assert.equal(calcVal2.value, false, "calcVal2.val #1");
assert.equal(q2.value, undefined, "q2.value #1");
q1.value = "a";
assert.equal(calcVal1.value, false, "calcVal1.val #2");
assert.equal(calcVal2.value, false, "calcVal2.val #2");
assert.equal(q2.value, undefined, "q2.value #2");
q1.value = "abc";
assert.equal(calcVal1.value, true, "calcVal1.val #3");
assert.equal(calcVal2.value, false, "calcVal2.val #3");
assert.equal(q2.value, "10", "q2.value #3");
q1.value = "d";
assert.equal(calcVal1.value, false, "calcVal1.val #4");
assert.equal(calcVal2.value, true, "calcVal2.val #4");
assert.equal(q2.value, "20", "q2.value #4");
});

0 comments on commit 1ebcf1b

Please sign in to comment.