Skip to content

Commit

Permalink
Merge branch 'master' into bug/6164-a11y-dropdown
Browse files Browse the repository at this point in the history
  • Loading branch information
dmitry-kurmanov committed May 10, 2023
2 parents cd04917 + 0cfb806 commit 7a76ba0
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 10 deletions.
2 changes: 1 addition & 1 deletion src/common-styles/sv-popup.scss
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ sv-popup {
display: flex;
flex-direction: column;
max-height: 90vh;
max-width: 90vw;
max-width: 100vw;
}

.sv-popup.sv-popup--modal {
Expand Down
2 changes: 1 addition & 1 deletion src/question_file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,7 @@ export class QuestionFileModel extends Question {
name?: string,
type?: string,
}): boolean {
if (!file) return false;
if (!file || !file.content || !file.content.substring) return false;
const imagePrefix = "data:image";
var subStr = file.content && file.content.substring(0, imagePrefix.length);
subStr = subStr && subStr.toLowerCase();
Expand Down
20 changes: 15 additions & 5 deletions src/survey.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3066,7 +3066,7 @@ export class SurveyModel extends SurveyElementCore
this.isCompleted = false;
this.isCompletedBefore = false;
this.isLoading = false;
this.canBeCompletedByTrigger = false;
this.completedByTriggers = undefined;
if (clearData) {
this.data = null;
this.variablesHash = {};
Expand Down Expand Up @@ -4196,13 +4196,24 @@ export class SurveyModel extends SurveyElementCore
public setCompleted(): void {
this.doComplete(true);
}
canBeCompleted(): void {
canBeCompleted(trigger: Trigger, isCompleted: boolean): void {
if (!settings.changeNavigationButtonsOnCompleteTrigger) return;
if (!this.canBeCompletedByTrigger) {
this.canBeCompletedByTrigger = true;
const prevCanBeCompleted = this.canBeCompletedByTrigger;
if(!this.completedByTriggers) this.completedByTriggers = {};
if(isCompleted) {
this.completedByTriggers[trigger.id] = true;
} else {
delete this.completedByTriggers[trigger.id];
}
if(prevCanBeCompleted !== this.canBeCompletedByTrigger) {
this.updateButtonsVisibility();
}
}
private completedByTriggers: HashTable<boolean>;
private get canBeCompletedByTrigger(): boolean {
if(!this.completedByTriggers) return false;
return Object.keys(this.completedByTriggers).length > 0;
}
/**
* Returns the HTML content for the complete page.
* @see completedHtml
Expand Down Expand Up @@ -5232,7 +5243,6 @@ export class SurveyModel extends SurveyElementCore
this.triggerValues = this.getFilteredValues();
var properties = this.getFilteredProperties();
let prevCanBeCompleted = this.canBeCompletedByTrigger;
this.canBeCompletedByTrigger = false;
for (var i: number = 0; i < this.triggers.length; i++) {
this.triggers[i].checkExpression(isOnNextPage, isOnComplete,
this.triggerKeys,
Expand Down
10 changes: 8 additions & 2 deletions src/trigger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { settings } from "./settings";
* Please note, it runs only one changing the expression result.
*/
export class Trigger extends Base {
static idCounter: number = 1;
static operatorsValue: HashTable<Function> = null;
static get operators() {
if (Trigger.operatorsValue != null) return Trigger.operatorsValue;
Expand Down Expand Up @@ -55,6 +56,7 @@ export class Trigger extends Base {
private conditionRunner: ConditionRunner;
private usedNames: Array<string>;
private hasFunction: boolean;
private idValue: number = (Trigger.idCounter ++);
constructor() {
super();
this.usedNames = [];
Expand All @@ -63,6 +65,7 @@ export class Trigger extends Base {
});
this.registerPropertyChangedHandlers(["expression"], () => { this.onExpressionChanged(); });
}
public get id(): number { return this.idValue; }
public getType(): string {
return "triggerbase";
}
Expand Down Expand Up @@ -218,7 +221,7 @@ export class Trigger extends Base {
export interface ISurveyTriggerOwner {
getObjects(pages: string[], questions: string[]): any[];
setCompleted(): void;
canBeCompleted(): void;
canBeCompleted(trigger: Trigger, isCompleted: boolean): void;
triggerExecuted(trigger: Trigger): void;
setTriggerValue(name: string, value: any, isVariable: boolean): any;
copyTriggerValue(name: string, fromName: string): any;
Expand Down Expand Up @@ -304,9 +307,12 @@ export class SurveyTriggerComplete extends SurveyTrigger {
if(this.isRealExecution()) {
this.owner.setCompleted();
} else {
this.owner.canBeCompleted();
this.owner.canBeCompleted(this, true);
}
}
protected onFailure(): void {
this.owner.canBeCompleted(this, false);
}
}
/**
* If expression returns true, the value from property **setValue** will be set to **setToName**
Expand Down
54 changes: 53 additions & 1 deletion tests/surveytriggertests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class SurveyTriggerVisibleOwnerTester implements ISurveyTriggerOwner {
return this.items;
}
setCompleted() {}
canBeCompleted() {}
canBeCompleted(trigger: Trigger, isCompleted: boolean) {}
triggerExecuted(trigger: Trigger): void {}
setTriggerValue(name: string, value: any, isVariable: boolean) {}
copyTriggerValue(name: string, fromName: string) {}
Expand Down Expand Up @@ -409,3 +409,55 @@ QUnit.test("Trigger with simple matrix", function(assert) {
q1.value = { b: 2, c: 3 };
assert.equal(q2.value, 8, "#5");
});
QUnit.test("Show complete button instead of next for single matrix, bug#6152", function(assert) {
const survey = new SurveyModel({
pages: [
{
elements: [
{
type: "matrix",
name: "q1",
columns: [1, 2, 3],
rows: ["row1", "row2", "row3"]
}
]
},
{
elements: [
{
type: "text",
name: "q2"
}
]
}
],
triggers: [
{
type: "complete",
expression:
"{q1.row2} = 1"
}
]
});
assert.equal(survey.isShowNextButton, true, "#1-next");
assert.equal(survey.isCompleteButtonVisible, false, "#1-complete");
const q1 = survey.getQuestionByName("q1");
q1.value = { row2: 1 };
assert.equal(survey.isShowNextButton, false, "#2-next");
assert.equal(survey.isCompleteButtonVisible, true, "#2-complete");
q1.value = { row1: 1, row2: 1 };
assert.equal(survey.isShowNextButton, false, "#3-next");
assert.equal(survey.isCompleteButtonVisible, true, "#3-complete");
q1.value = { row1: 1 };
assert.equal(survey.isShowNextButton, true, "#4-next");
assert.equal(survey.isCompleteButtonVisible, false, "#4-complete");
q1.value = { row1: 1, row2: 2 };
assert.equal(survey.isShowNextButton, true, "#5-next");
assert.equal(survey.isCompleteButtonVisible, false, "#5-complete");
q1.value = { row1: 1, row2: 1 };
assert.equal(survey.isShowNextButton, false, "#6-next");
assert.equal(survey.isCompleteButtonVisible, true, "#6-complete");
q1.value = { row1: 2, row2: 1, row3: 2 };
assert.equal(survey.isShowNextButton, false, "#7-next");
assert.equal(survey.isCompleteButtonVisible, true, "#7-complete");
});

0 comments on commit 7a76ba0

Please sign in to comment.