From ff86d6847c02cbb46bb4483bb116b5bb56424742 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Fri, 2 Feb 2024 16:03:19 +0300 Subject: [PATCH 1/4] Fixed #7774 - A question disappears when Title Location: Bottom and the question is collapsed (#7797) Co-authored-by: tsv2013 --- src/knockout/templates/question.html | 7 ++- src/knockout/templates/questioncontent.html | 52 ++++++++++----------- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/src/knockout/templates/question.html b/src/knockout/templates/question.html index f709828fb8..98a0616081 100644 --- a/src/knockout/templates/question.html +++ b/src/knockout/templates/question.html @@ -10,8 +10,13 @@ + + + + - + + diff --git a/src/knockout/templates/questioncontent.html b/src/knockout/templates/questioncontent.html index 51467398cf..88bba0bf6f 100644 --- a/src/knockout/templates/questioncontent.html +++ b/src/knockout/templates/questioncontent.html @@ -1,40 +1,36 @@  \ No newline at end of file From 8928a4eeeb5b61a0481694f2d22f13c639805480 Mon Sep 17 00:00:00 2001 From: tsv2013 Date: Sat, 3 Feb 2024 09:59:09 +0300 Subject: [PATCH 2/4] Feature/totals redesign (#7789) * Resolved #7687 - Add an option to align matrix column totals * Resolved #7768 - Matrix Total Row * Work for #7687 - Add an option to align matrix column totals - added some smartness * Fixed lint * Work for #7687 Add an option to align matrix column totals - added u-test * Work for #7768 - Matrix Total Row - added vr-test * Fixed u-test * Work for #7768 - Matrix Total Row - fixed etalons * Work for #7687 - Add an option to align matrix column totals - fixed markup test * Updated etalons * Work for #7768 - Matrix Total Row - fixed angular + fixed total row top padding * Updated etalons --------- Co-authored-by: tsv2013 --- .../matrixdropdowncell.component.html | 2 +- .../src/MatrixDropdownCellComp.vue | 2 +- src/defaultV2-theme/blocks/sd-table.scss | 26 +++ .../templates/question-matrixdynamic.html | 2 +- src/question_matrixdropdownbase.ts | 19 ++ src/question_matrixdropdowncolumn.ts | 49 ++++-- src/question_matrixdropdownrendered.ts | 67 +++---- src/react/reactquestion.tsx | 2 +- src/vue/matrixdropdowncell.vue | 2 +- tests/question_matrixdynamictests.ts | 164 +++++++++++++++--- .../matrixdropdown-with-totals-alignment.png | Bin 0 -> 20583 bytes .../etalons/matrixdropdown-with-totals.png | Bin 15367 -> 15851 bytes .../etalons/matrixdynamic-with-totals.png | Bin 13048 -> 13451 bytes .../responsiveness-matrixdropdown-totals.png | Bin 26930 -> 27431 bytes .../tests/defaultV2/matrixdynamic.ts | 82 +++++++++ 15 files changed, 345 insertions(+), 72 deletions(-) create mode 100644 visualRegressionTests/tests/defaultV2/etalons/matrixdropdown-with-totals-alignment.png diff --git a/packages/survey-angular-ui/src/questions/matrixdropdowncell.component.html b/packages/survey-angular-ui/src/questions/matrixdropdowncell.component.html index 346a56c3db..44f1635e34 100644 --- a/packages/survey-angular-ui/src/questions/matrixdropdowncell.component.html +++ b/packages/survey-angular-ui/src/questions/matrixdropdowncell.component.html @@ -8,7 +8,7 @@
-
-
+
diff --git a/src/question_matrixdropdownbase.ts b/src/question_matrixdropdownbase.ts index fadf184f85..21a7fac60a 100644 --- a/src/question_matrixdropdownbase.ts +++ b/src/question_matrixdropdownbase.ts @@ -119,6 +119,9 @@ export class MatrixDropdownCell { public set value(value: any) { this.question.value = value; } + public getQuestionWrapperClassName(className: string): string { + return className; + } public runCondition(values: HashTable, properties: HashTable) { this.question.runCondition(values, properties); } @@ -160,6 +163,22 @@ export class MatrixDropdownTotalCell extends MatrixDropdownCell { this.question.unlocCalculation(); this.question.runIfReadOnly = true; } + public getQuestionWrapperClassName(className: string): string { + let result = super.getQuestionWrapperClassName(className); + if (!result) { + return result; + } + if (this.question.expression && this.question.expression != "''") { + result += " " + className + "--expression"; + } + let alignment = this.column.totalAlignment; + if (alignment === "auto") { + if (this.column.cellType === "dropdown") { + alignment = "left"; + } + } + return result + " " + className + "--" + alignment; + } public getTotalExpression(): string { if (!!this.column.totalExpression) return this.column.totalExpression; if (this.column.totalType == "none") return "''"; diff --git a/src/question_matrixdropdowncolumn.ts b/src/question_matrixdropdowncolumn.ts index 16fdc7b45a..277b33b2f9 100644 --- a/src/question_matrixdropdowncolumn.ts +++ b/src/question_matrixdropdowncolumn.ts @@ -31,7 +31,7 @@ export interface IMatrixColumnOwner extends ILocalizableOwner { getCellType(): string; getCustomCellType(column: MatrixDropdownColumn, row: MatrixDropdownRowModelBase, cellType: string): string; onColumnCellTypeChanged(column: MatrixDropdownColumn): void; - getCellAriaLabel(rowTitle:string, columnTitle:string):string; + getCellAriaLabel(rowTitle: string, columnTitle: string): string; } function onUpdateSelectBaseCellQuestion( @@ -223,7 +223,7 @@ export class MatrixDropdownColumn extends Base return true; } public get isColumnVisible(): boolean { - if(this.isDesignMode) return true; + if (this.isDesignMode) return true; return this.visible && this.hasVisibleCell; } /** @@ -245,17 +245,17 @@ export class MatrixDropdownColumn extends Base } public getVisibleMultipleChoices(): Array { const choices = this.templateQuestion.visibleChoices; - if(!Array.isArray(choices)) return []; - if(!Array.isArray(this._visiblechoices)) return choices; + if (!Array.isArray(choices)) return []; + if (!Array.isArray(this._visiblechoices)) return choices; const res = new Array(); - for(let i = 0; i < choices.length; i ++) { + for (let i = 0; i < choices.length; i++) { const item = choices[i]; - if(this._visiblechoices.indexOf(item.value) > -1) res.push(item); + if (this._visiblechoices.indexOf(item.value) > -1) res.push(item); } return res; } public get getVisibleChoicesInCell(): Array { - if(Array.isArray(this._visiblechoices)) return this._visiblechoices; + if (Array.isArray(this._visiblechoices)) return this._visiblechoices; const res = this.templateQuestion.visibleChoices; return Array.isArray(res) ? res : []; } @@ -263,11 +263,11 @@ export class MatrixDropdownColumn extends Base this._visiblechoices = val; } public get isFilteredMultipleColumns(): boolean { - if(!this.showInMultipleColumns) return false; + if (!this.showInMultipleColumns) return false; const choices = this.templateQuestion.choices; - if(!Array.isArray(choices)) return false; - for(let i = 0; i < choices.length; i ++) { - if(choices[i].visibleIf) return true; + if (!Array.isArray(choices)) return false; + for (let i = 0; i < choices.length; i++) { + if (choices[i].visibleIf) return true; } return false; } @@ -586,6 +586,28 @@ export class MatrixDropdownColumn extends Base public set totalDisplayStyle(val: string) { this.setPropertyValue("totalDisplayStyle", val); } + /** + * An alignment for calculated total values. + * + * Possible values: + * + * - `"auto"` (default) + * - `"left"` + * - `"center"` + * - `"right"` + * + * [View Demo](https://surveyjs.io/form-library/examples/aggregate-data-within-form/ (linkStyle)) + * @see totalType + * @see totalFormat + * @see totalCurrency + * @see totalDisplayStyle + */ + public get totalAlignment(): string { + return this.getPropertyValue("totalAlignment"); + } + public set totalAlignment(val: string) { + this.setPropertyValue("totalAlignment", val); + } /** * Specifies a currency used to display calculated total values. Applies only if [`totalDisplayStyle`](#totalDisplayStyle) is set to `"currency"`. * @see totalType @@ -913,6 +935,11 @@ Serializer.addClass( default: "none", choices: ["none", "decimal", "currency", "percent"], }, + { + name: "totalAlignment", + default: "auto", + choices: ["auto", "left", "center", "right"], + }, { name: "totalCurrency", choices: () => { diff --git a/src/question_matrixdropdownrendered.ts b/src/question_matrixdropdownrendered.ts index 7e144823b4..33404ce105 100644 --- a/src/question_matrixdropdownrendered.ts +++ b/src/question_matrixdropdownrendered.ts @@ -95,28 +95,31 @@ export class QuestionMatrixDropdownRenderedCell { } return builder.toString(); } + public get cellQuestionWrapperClassName(): string { + return this.cell.getQuestionWrapperClassName(this.matrix.cssClasses.cellQuestionWrapper); + } public get headers(): string { - if(this.cell && this.cell.column) { + if (this.cell && this.cell.column) { if (this.matrix.IsMultiplyColumn(this.cell.column)) { - if(!!this.item) { + if (!!this.item) { return this.item.locText.renderedHtml; } else { return ""; } } let cellHint = this.cell.column.cellHint; - if(!!cellHint) { - if(cellHint.trim() === "") return ""; + if (!!cellHint) { + if (cellHint.trim() === "") return ""; return this.cell.column.locCellHint.renderedHtml; } - if(this.hasQuestion && this.question.isVisible && this.question.title) + if (this.hasQuestion && this.question.isVisible && this.question.title) return this.question.title; return this.cell.column.title; } - if(this.hasQuestion && this.question.isVisible) { + if (this.hasQuestion && this.question.isVisible) { return this.question.locTitle.renderedHtml; } - if(this.hasTitle) { + if (this.hasTitle) { return this.locTitle.renderedHtml || ""; } return ""; @@ -135,7 +138,7 @@ export class QuestionMatrixDropdownRenderedCell { .toString(); } public focusIn(): void { - if(this.question) { + if (this.question) { this.question.focusIn(); } } @@ -195,7 +198,7 @@ export class QuestionMatrixDropdownRenderedErrorRow extends QuestionMatrixDropdo this.visible = this.cells.some((cell) => cell.question && cell.question.hasVisibleErrors); }; this.cells.forEach((cell) => { - if(cell.question) { + if (cell.question) { cell.question.registerFunctionOnPropertyValueChanged("hasVisibleErrors", callback); } }); @@ -209,7 +212,7 @@ export class QuestionMatrixDropdownRenderedTable extends Base { private hasRemoveRowsValue: boolean; private rowsActions: Array>; private cssClasses: any; - public renderedRowsChangedCallback = ():void=>{}; + public renderedRowsChangedCallback = (): void => { }; @propertyArray({ onPush: (_: any, i: number, target: QuestionMatrixDropdownRenderedTable) => { target.renderedRowsChangedCallback(); @@ -316,14 +319,14 @@ export class QuestionMatrixDropdownRenderedTable extends Base { let res = 0; let dataRowIndex = 0; for (var i = 0; i < this.rows.length; i++) { - if(dataRowIndex === index) { - if (this.rows[i].isErrorsRow|| this.rows[i].isDetailRow) res++; + if (dataRowIndex === index) { + if (this.rows[i].isErrorsRow || this.rows[i].isDetailRow) res++; break; } - res ++; + res++; if (!(this.rows[i].isErrorsRow) && !this.rows[i].isDetailRow) dataRowIndex++; } - if(dataRowIndex < index) return this.rows.length; + if (dataRowIndex < index) return this.rows.length; return res; } private getRenderedDataRowCount(): number { @@ -353,7 +356,7 @@ export class QuestionMatrixDropdownRenderedTable extends Base { ) { removeCount++; } - if(rowIndex > 0 && this.showCellErrorsTop && this.rows[rowIndex - 1].isErrorsRow) { + if (rowIndex > 0 && this.showCellErrorsTop && this.rows[rowIndex - 1].isErrorsRow) { rowIndex--; removeCount++; } @@ -367,11 +370,11 @@ export class QuestionMatrixDropdownRenderedTable extends Base { const rowIndex = this.getRenderedRowIndex(row); if (rowIndex < 0) return; let currentIndex = rowIndex; - if(this.showCellErrorsBottom) currentIndex ++; + if (this.showCellErrorsBottom) currentIndex++; var panelRowIndex = - currentIndex < this.rows.length - 1 && this.rows[currentIndex + 1].isDetailRow - ? currentIndex + 1 - : -1; + currentIndex < this.rows.length - 1 && this.rows[currentIndex + 1].isDetailRow + ? currentIndex + 1 + : -1; if ((isShowing && panelRowIndex > -1) || (!isShowing && panelRowIndex < 0)) return; if (isShowing) { @@ -495,7 +498,7 @@ export class QuestionMatrixDropdownRenderedTable extends Base { return this.hasActionCellInRowsValues[location]; } private hasActionsCellInLocaltion(location: "start" | "end"): boolean { - if(location == "end" && this.hasRemoveRows) return true; + if (location == "end" && this.hasRemoveRows) return true; return this.matrix.visibleRows.some( (row, index) => !this.isValueEmpty(this.getRowActions(index, location))); } @@ -522,17 +525,17 @@ export class QuestionMatrixDropdownRenderedTable extends Base { const renderedRow = this.createHorizontalRow(row, useAsHeader); const errorRow = this.createErrorRow(renderedRow); renderedRow.row = row; - if(index < 0) { + if (index < 0) { index = renderedRows.length; } - if(this.matrix.isMobile) { + if (this.matrix.isMobile) { const cells = []; - for(let i = 0; i < renderedRow.cells.length; i ++) { - if(this.showCellErrorsTop && !errorRow.cells[i].isEmpty) { + for (let i = 0; i < renderedRow.cells.length; i++) { + if (this.showCellErrorsTop && !errorRow.cells[i].isEmpty) { cells.push(errorRow.cells[i]); } cells.push(renderedRow.cells[i]); - if(this.showCellErrorsBottom && !errorRow.cells[i].isEmpty) { + if (this.showCellErrorsBottom && !errorRow.cells[i].isEmpty) { cells.push(errorRow.cells[i]); } } @@ -575,7 +578,7 @@ export class QuestionMatrixDropdownRenderedTable extends Base { if (!this.isValueEmpty(rowActions)) { const cell = new QuestionMatrixDropdownRenderedCell(); const actionContainer = this.matrix.allowAdaptiveActions ? new AdaptiveActionContainer() : new ActionContainer(); - if(!!this.matrix.survey && this.matrix.survey.getCss().actionBar) { + if (!!this.matrix.survey && this.matrix.survey.getCss().actionBar) { actionContainer.cssClasses = this.matrix.survey.getCss().actionBar; } actionContainer.setItems(rowActions); @@ -689,11 +692,11 @@ export class QuestionMatrixDropdownRenderedTable extends Base { const res = this.createErrorRenderedRow(this.cssClasses); for (let i = 0; i < row.cells.length; i++) { const cell = row.cells[i]; - if(!cell.hasQuestion) { + if (!cell.hasQuestion) { res.cells.push(this.createEmptyCell(true)); } else if (this.matrix.IsMultiplyColumn(cell.cell.column)) { - if(cell.isFirstChoice) { + if (cell.isFirstChoice) { res.cells.push(this.createErrorCell(cell.cell)); } else { res.cells.push(this.createEmptyCell(true)); @@ -779,7 +782,7 @@ export class QuestionMatrixDropdownRenderedTable extends Base { buttonCell.colSpans = 2; } buttonCell.isEmpty = true; - if(!panelFullWidth) res.cells.push(buttonCell); + if (!panelFullWidth) res.cells.push(buttonCell); var actionsCell = null; if (this.hasActionCellInRows("end")) { actionsCell = new QuestionMatrixDropdownRenderedCell(); @@ -820,7 +823,7 @@ export class QuestionMatrixDropdownRenderedTable extends Base { } else { const renderedRow = this.createVerticalRow(col, i); const errorRow = this.createErrorRow(renderedRow); - if(this.showCellErrorsTop) { + if (this.showCellErrorsTop) { renderedRows.push(errorRow); renderedRows.push(renderedRow); } else { @@ -845,7 +848,7 @@ export class QuestionMatrixDropdownRenderedTable extends Base { for (var i = 0; i < choices.length; i++) { const renderedRow = this.createVerticalRow(column, index, choices[i], i); const errorRow = this.createErrorRow(renderedRow); - if(this.showCellErrorsTop) { + if (this.showCellErrorsTop) { renderedRows.push(errorRow); renderedRows.push(renderedRow); } else { @@ -1026,7 +1029,7 @@ export class QuestionMatrixDropdownRenderedTable extends Base { ): QuestionMatrixDropdownRenderedCell { var cell = new QuestionMatrixDropdownRenderedCell(); cell.locTitle = locTitle; - if(!!locTitle) { + if (!!locTitle) { locTitle.strChanged(); } if (!!this.cssClasses.cell) { diff --git a/src/react/reactquestion.tsx b/src/react/reactquestion.tsx index ee736af64b..deac0c7355 100644 --- a/src/react/reactquestion.tsx +++ b/src/react/reactquestion.tsx @@ -354,7 +354,7 @@ export class SurveyQuestionAndErrorsCell extends SurveyQuestionAndErrorsWrapped > {this.wrapCell(this.props.cell, ( -
+
{this.renderQuestion()}
) )} diff --git a/src/vue/matrixdropdowncell.vue b/src/vue/matrixdropdowncell.vue index 9cf714114b..044e11b9ff 100644 --- a/src/vue/matrixdropdowncell.vue +++ b/src/vue/matrixdropdowncell.vue @@ -22,7 +22,7 @@ :question="cell.panel" :css="question.cssClasses" > -
+
): void { for (var i = 0; i < objs.length; i++) { objs[i].question = objs[i].question.name; - if(!!objs[i].context) { + if (!!objs[i].context) { objs[i].context = objs[i].context.name; } } @@ -1604,7 +1604,8 @@ QUnit.test("matrixDynamic.addConditionObjectsByContext", function (assert) { QUnit.test("matrixDynamic.getNestedQuestions", function (assert) { const survey = new SurveyModel({ elements: [ - { type: "matrixdynamic", name: "matrix", rowCount: 2, + { + type: "matrixdynamic", name: "matrix", rowCount: 2, columns: [{ name: "col1", cellType: "text", visibleIf: "{row.col2} = 'a'" }, { cellType: "text", name: "col2" }] } ] @@ -8324,12 +8325,18 @@ QUnit.test("Update expressions on setting matrixdropdown rows, Bug#5526", functi rows[0].cells[1].value = 2; rows[1].cells[0].value = 3; rows[1].cells[1].value = 4; - assert.deepEqual(survey.data, { matrix: { row1: { col1: 1, col2: 2, col3: 3, }, - row2: { col1: 3, col2: 4, col3: 7 } }, - "matrix-total": { col1: 4, col3: 10 } }, "#1"); + assert.deepEqual(survey.data, { + matrix: { + row1: { col1: 1, col2: 2, col3: 3, }, + row2: { col1: 3, col2: 4, col3: 7 } + }, + "matrix-total": { col1: 4, col3: 10 } + }, "#1"); matrix.rows = ["row1"]; - assert.deepEqual(survey.data, { matrix: { row1: { col1: 1, col2: 2, col3: 3, } }, - "matrix-total": { col1: 1, col3: 3 } }, "#2"); + assert.deepEqual(survey.data, { + matrix: { row1: { col1: 1, col2: 2, col3: 3, } }, + "matrix-total": { col1: 1, col3: 3 } + }, "#2"); }); QUnit.test("Carry forward in matrix cells", function (assert) { @@ -8437,7 +8444,8 @@ QUnit.test("Do not run total expressions if matrix is read-only, bug#5644", func assert.equal(totalQuestion.isEmpty(), false, "Total Expression question is empty"); assert.deepEqual(survey.data, { q1: 1, q2: 2, "matrix-total": { col1: 3 }, - "matrix": [{ "col1": 1 }] }, "Data set in survey correctly."); + "matrix": [{ "col1": 1 }] + }, "Data set in survey correctly."); }); QUnit.test("Check rightIndents set correctly for detailElements with defaultV2 theme - 5988", function (assert) { const survey = new SurveyModel({ @@ -8518,7 +8526,8 @@ QUnit.test("column validation, bug#6449", function (assert) { } ], "rows": ["Row1"] - }] }); + }] + }); survey.setValue("age", 50); const matrix = survey.getQuestionByName("matrix"); const cellQuestion = matrix.visibleRows[0].cells[0].question; @@ -8531,7 +8540,8 @@ QUnit.test("column validation, bug#6449", function (assert) { QUnit.test("matrixDynamic & defaultValueExpression", function (assert) { const survey = new SurveyModel({ elements: [ - { type: "matrixdynamic", name: "matrix", rowCount: 1, + { + type: "matrixdynamic", name: "matrix", rowCount: 1, columns: [{ name: "col1", cellType: "text", defaultValueExpression: "1 + 1" }, { name: "col2" }] } ] @@ -8545,7 +8555,8 @@ QUnit.test("matrixDynamic & defaultValueExpression", function (assert) { QUnit.test("Errors: matrixdropdown", function (assert) { const survey = new SurveyModel({ elements: [ - { type: "matrixdropdown", name: "matrix", + { + type: "matrixdropdown", name: "matrix", rows: ["Row1", "Row2"], choices: ["Item1"], columns: [{ name: "col1", isRequired: true }, { name: "col2", isRequired: true }] @@ -8590,7 +8601,8 @@ QUnit.test("Errors: matrixdropdown", function (assert) { QUnit.test("Errors: matrixdynamic", function (assert) { const survey = new SurveyModel({ elements: [ - { type: "matrixdynamic", name: "matrix", + { + type: "matrixdynamic", name: "matrix", rowCount: 3, columns: [{ name: "col1" }, { name: "col2" }] } @@ -8647,7 +8659,8 @@ QUnit.test("Errors: matrixdynamic + errors location bottom", function (assert) { const survey = new SurveyModel({ questionErrorLocation: "bottom", elements: [ - { type: "matrixdynamic", name: "matrix", + { + type: "matrixdynamic", name: "matrix", rowCount: 3, columns: [{ name: "col1" }, { name: "col2" }] } @@ -8703,7 +8716,8 @@ QUnit.test("Errors: matrixdynamic + errors location bottom", function (assert) { QUnit.test("Errors: matrixdynamic + showDetailPanel", function (assert) { const survey = new SurveyModel({ elements: [ - { type: "matrixdynamic", name: "matrix", + { + type: "matrixdynamic", name: "matrix", rowCount: 3, detailPanelMode: "underRow", detailElements: [{ type: "text", name: "q1" }], @@ -8757,7 +8771,8 @@ QUnit.test("Errors: matrixdynamic + showDetailPanel + errors bottom", function ( const survey = new SurveyModel({ questionErrorLocation: "bottom", elements: [ - { type: "matrixdynamic", name: "matrix", + { + type: "matrixdynamic", name: "matrix", rowCount: 3, detailPanelMode: "underRow", detailElements: [{ type: "text", name: "q1" }], @@ -8810,7 +8825,8 @@ QUnit.test("Errors: matrixdynamic + showDetailPanel + errors bottom", function ( QUnit.test("Errors: matrixdynamic + vertical columns", function (assert) { const survey = new SurveyModel({ elements: [ - { type: "matrixdynamic", + { + type: "matrixdynamic", name: "matrix", rowCount: 3, columnLayout: "vertical", @@ -8841,7 +8857,8 @@ QUnit.test("Errors: matrixdynamic + vertical columns", function (assert) { QUnit.test("Errors: matrixdropdown + show in multiple columns", function (assert) { const survey = new SurveyModel({ elements: [ - { type: "matrixdropdown", + { + type: "matrixdropdown", name: "matrix", rows: ["row1"], columns: [ @@ -8878,7 +8895,8 @@ QUnit.test("Errors: matrixdropdown + show in multiple columns", function (assert QUnit.test("Errors: matrixdynamic + show in multiple columns + vertical layout", function (assert) { const survey = new SurveyModel({ elements: [ - { type: "matrixdropdown", + { + type: "matrixdropdown", name: "matrix", rows: ["row1"], columnLayout: "vertical", @@ -8926,7 +8944,8 @@ QUnit.test("Errors: matrixdynamic + show in multiple columns + vertical layout", QUnit.test("Errors: matrixdropdown + mobile mode", function (assert) { const survey = new SurveyModel({ elements: [ - { type: "matrixdropdown", name: "matrix", + { + type: "matrixdropdown", name: "matrix", rows: ["Row1", "Row2"], choices: ["Item1"], columns: [{ name: "col1", isRequired: true }, { name: "col2", isRequired: true }] @@ -8955,14 +8974,15 @@ QUnit.test("matrixdynamic.removeRow & confirmActionAsync, #6736", function (asse const survey = new SurveyModel({ elements: [ - { type: "matrixdynamic", name: "matrix", + { + type: "matrixdynamic", name: "matrix", columns: [{ name: "col1" }] } ] }); const q = survey.getQuestionByName("matrix"); q.value = [{ col1: 1 }, { col1: 2 }, { col1: 3 }]; - let f_resFunc = (res: boolean): void => {}; + let f_resFunc = (res: boolean): void => { }; settings.confirmActionAsync = (message: string, resFunc: (res: boolean) => void): boolean => { f_resFunc = resFunc; return true; @@ -8982,7 +9002,8 @@ QUnit.test("matrixdynamic.removeRow & confirmActionAsync, #6736", function (asse QUnit.test("matrix dynamic getPlainData", function (assert) { const survey = new SurveyModel({ elements: [ - { type: "matrixdynamic", name: "matrix", + { + type: "matrixdynamic", name: "matrix", columns: [{ cellType: "text", name: "col1" }, { cellType: "text", name: "col2" }] } ] @@ -9002,7 +9023,8 @@ QUnit.test("matrix dynamic getPlainData", function (assert) { QUnit.test("matrix dynamic getPlainData & comment", function (assert) { const survey = new SurveyModel({ elements: [ - { type: "matrixdynamic", name: "matrix", + { + type: "matrixdynamic", name: "matrix", columns: [{ cellType: "text", name: "col1" }, { cellType: "text", name: "col2" }], showCommentArea: true } @@ -9064,3 +9086,97 @@ QUnit.test("matrix dynamic expression & checkbox ValuePropertyName", function (a assert.deepEqual(matrix.value, [{ testItem: "Item 1", col1: "Item 1 - matrix" }, { testItem: "Item 2", col1: "Item 2 - matrix" }], "matrix value #2"); }); +QUnit.test("Totals alingment", function (assert) { + var json = { + pages: [ + { + name: "page1", + elements: [ + { + type: "matrixdynamic", + name: "question1", + title: "Select Your Coffee", + columns: [ + { + name: "coffee", + title: "Coffee", + cellType: "dropdown", + isRequired: true, + isUnique: true, + choices: [ + { + value: "espresso", + text: "Espresso", + }, + { + value: "ristretto", + text: "Ristretto", + }, + { + value: "macchiato", + text: "Macchiato", + }, + ], + storeOthersAsComment: true, + }, + { + name: "price", + title: "Price", + cellType: "expression", + expression: + "iif({row.coffee} = 'ristretto' or {row.coffee} = 'macchiato' or {row.coffee} = 'cappuchino', '2.5', iif({row.coffee} = 'flatWhite' or {row.coffee} = 'latte', 3, 2))\n", + }, + { + name: "amount", + title: "Num of Items", + cellType: "dropdown", + totalType: "sum", + choicesMin: 1, + choicesMax: 10, + }, + { + name: "totalPerRow", + title: "Total", + cellType: "expression", + totalType: "sum", + totalDisplayStyle: "currency", + totalAlignment: "center", + expression: "{row.price} * {row.amount}", + }, + ], + rowCount: 1, + maxRowCount: 6, + defaultRowValue: { + coffeeItem: "2", + coffee: "espresso", + price: 2, + amount: 1, + totalPerRow: 2, + }, + addRowLocation: "topBottom", + addRowText: "Add Coffee", + }, + ], + }, + ], + }; + + var survey = new SurveyModel(json); + var question = ( + survey.getQuestionByName("question1") + ); + question.cssClassesValue.cellQuestionWrapper = "sd-table__question-wrapper"; + var renderedTable = question.renderedTable; + assert.equal( + renderedTable.footerRow.cells[1].cellQuestionWrapperClassName, + "sd-table__question-wrapper sd-table__question-wrapper--auto" + ); + assert.equal( + renderedTable.footerRow.cells[2].cellQuestionWrapperClassName, + "sd-table__question-wrapper sd-table__question-wrapper--expression sd-table__question-wrapper--left" + ); + assert.equal( + renderedTable.footerRow.cells[3].cellQuestionWrapperClassName, + "sd-table__question-wrapper sd-table__question-wrapper--expression sd-table__question-wrapper--center" + ); +}); \ No newline at end of file diff --git a/visualRegressionTests/tests/defaultV2/etalons/matrixdropdown-with-totals-alignment.png b/visualRegressionTests/tests/defaultV2/etalons/matrixdropdown-with-totals-alignment.png new file mode 100644 index 0000000000000000000000000000000000000000..f517e933e300ded305a3dc93334c706f10be6f02 GIT binary patch literal 20583 zcmeHv1yCK&w6!y?tA?weO{AUJp6=79Pk-lprzhyGf+Wgwg6D8>a46DJV#;uEPrkyzJ?eY* z6sX}qWv79IW6F~jd!y>{Xr~oT^%vrY#cLK}saoo&WCb*CPG$>92kly)A*a+_gdA)g z^Y^w3ktFFqMv!>-J|C%WdYVIaQji3?5mG#}oV!Gb34f}KuK)bl{S-Wg5^DFxnx)9k zE?g_Y45bpMg7bVv*Z`tu0}+Cp_>EPR-eyVP`U>%egoG#}ylL^=NR`ynBjM%cm4bkz zfxqU$oHVcC_5ifw0=+EgL@j_#W=z6%Y`e*rPvhQx1Imx5<|Xe{Umy z9{HzA1dHs?-Ct;5|GE3Q()+&+XZ(NMkbrLh)N4w4O1GWq9JNfye<+ZbdZv1mm9N(( zI}(!Q=7!9roRn(ju#I!&fBs4leXWq2byQFK$!}qum_>K<8h-Gh6m&U_U~e)fq0MN> z4(?iK;!y1hbU5p$p7mVdgzwR5|5&2Y7y~^JsrAQ6 zD6~H=&y_ZS*XB$99)46|sVs_5yA5sh5p?{mBBRNgB!<`3#ZF_~zOC9Ux6VRJx;?OD z!whdU)wz~kQTZ4r5q9&4FXK1k^d{~wk&$rsf02>^NlyEAXQAP#|f;G=LGI-GQAoAZ6Fu!y3Ov!Bd zon8I;R0H$#=RF(a>(pMgrRFs4-s^OXxfxZJsb^h0N(!doLGy&LY2JafOA(noD@$AZ z99ELG%h6uny1Fa;d3H1`rTHIn>KjjwB#Srd(v-q2Yh9R_7-y@JZ*7tE7?r2xyeHtM z&QaM$eu%odBrT;G(#}d~+lFpHrO(_)CWHslJZb6e4MepW1}lMHlM9Y^WHGIb&pEMt z+BO!ToT!hh+as{6b&ot{B@+}G%VGk#?dJsfR#ly{@o5hiA=ZBnJrIGhULmr*b;X<| zkPSKziF(Eosc<$nF)@7b(0GoaC}H7XWsJo8FIczQvzx@`n%u6|^&bfArYCw-^%40s zx#rulthL|U?#wSpJl04c$;i)-DDBl`6JO)7`PsH!Wfkn1_Qle_u5Obs*@R0)%(MMz zm5p6y9o}zIy5RItGA1J3t<66c0^eR=Rwp;LQZyH0$Pm6?LajRM+O*9Fb;%Bf=}79z zLPq6x=jQb~M&*Qwr~Cq8C%T~(ok0$4&Y?Q$lCotn^1IbzdKDdVeuz_k7D*?%log$n zMC{y7#I8)4Z%1BRo2O`akz!syrwtVWm3~;?QmR5#|50bmu7>cs;Bz!Xwr@Yz)pi{W z-;P3WT(KLOW5-`p=ljKufaN2ds(t*VkYFi%?RmFp@urO{wXxxs;_%22n zoq>vAi3%q>2M>{ci-C51d|jd_v&b|?YLJ?bKg5t(+V5P#zq`tDN{aCChJv1}B3i*7 zYM=Lk(2eu0NX+Oc*r>3OQQpq9CL@+OIiHqH0x44dbW~$XK07-)P1kgFIAUbVmC2Qz zKjEjIY^dopR%4i}i@DY2&a}AZoq(~Au8uZ$dw9_9c-J4>YMv<2rmQhYQ)E8fd}!Z* zqh!UsFy!wuRaSmYz`R@h)lilpc{`sj+)0G1cPLzmO^v&>K0nGRPK~-};T*MSm&7D5 zH(-mFB}#q|YRn-zAzu%(Vq8z?6BD|gcVznYNrmH76?2e!dYV-xyCAw=A}PpOgk3R2 z9fQSC^O0$g483uRGH67~TArJ!kyuBa1Hm+vV@kqPf~z(7lwTN z=;*Iu6BU+9C57451EH$jyGOP`&sfYY$p=}fN@;UqS!q4V>7A2oDT?QD$%d$7_+6Qqe0Qq5KG#}X3EFVKfAVhvcM3&(sHG(O|h-fu@tT? z6F+Q|Aj|A~)N&RhJ0szIA7^{RI0j8+OzKj?QsLCA0a>O}8zi>Z@=BpovLGeJhiP01 z<9H|O*+j+m`ePd&4QIOE6N;3o3|b`xCSih=gp;<%FV{?&-aM7U>f*`0tp>aCu_e;4h>HN*4dU;ivi>@ob3E={A2^A4#nU%}LO;fbx(& z|1g@|G%RJzTKrDv%WFDrAHUCCMheV8{iPg1;NexEgUBP6I8r)z<$;_Jc*A{8B1#4C zS18c+=w-PE?U}S7UxQOa(G*#$n-YxlBz!-!k#VL!H4=)v zSPx4I^f+6isZYA95`PxX#{2i&B4!`8?dxKLkc%1XTSVe;H4PlmX&EVS5M(eoaN5Q< zv78&csDdP(CmOj}g~zL5<=`aX6Hvvjjh8i;QJGF)K@452k~RjS2#660zK2TkP~$MH zBy@Hnq{Yg!a`o94*TiK%H7E<&i{jOLCyhVxB@#c?2)I8>0w0lpenpH&zLYI5@BIj? zvZkIyXjvY;K}@MC&L4wm*K<2-`kB7H+2=fmv9K}b-eH73-1}AMFX3Bk24=AEKHcg# z3Gqsu`#tGgg4g>1(p!9Q70Q!ppSUK{!i@EOzFKCIFAYZXmsOe)_ICpMX-PCJ!s$Eh z!X`)k)ko+0f^FE9Sp|mr+3MI}L*5F(3V}UxJ;ra1rx3*&i*TeCps2Zo60zR4gEA{2F z4NT|cO}7q@f9uxO>2&d>MXQ5ZaR+^4Kd|`5j*E~)3}xfNe)ahg z>qEiXEPg(wp#pJ*d{SPUsCzdvXo>oK9XIo=Pw(%J<%;Q-mjW{X_LZk5euQPdcL$r) zxZiY}r}9~rspERL{Yv=kQ#^$%Y2hpOv+ORsty}&(vpb9=7Hve&P95+FqdxHkg}yvf zTsJYh3TcyyiuoH{9Re1cbahENDAFxI1r7KgT-ibBbtbl}x-H;jUQ; z=TA&Y**NH&xY6gnZFZR`T)`iaEn26$ zQ|jNjA*uT~3C0%~X~xJF-95uD<;dl49vFnzUk>L#ce=3MU)!3|S}qj`527l{ZUXfW zaChM~tte3E;CgDGdTrf9V`yK}F;SMj>R%;ppL5$lei1)$bSNBnc!XN!eiAar>y1D< z>x94U(WDlmcZ*J+aSS%DiI|n3>BSl!y>g$0U0zU$d1$Rt6xCz|N^aaER-;6)2{s3x z-=*s>l1`Ck?Dt1FP0&m^_tGye>Pa+v(3Go#Lz&_WSFpupb8WxV=s84A=h{1T6T7qV zUcw<7@2|A0`z36JWDu3-omdGeqnq9lwx9gs>NClHKQq~E>^2cLJb z9PdK%FIKN)H9Ce@puRH9uRx7ZJL5`B+`}?%f^i2xVNqrC;XPF+!2=P2tVh8sYcm_v|Y@EQxaA zhkh(1%f5@cm$=7SXnuhZ(d(a=sr5CNL6kQ{v@92J`i;wtVt*DAU-hb^!X+JiefPzH z(#4o7>6+}?mj+hU=sTDocu4tV*QFyix1$KSPXuWvfNg~cfP^0}JLLnD|-GH#ft z=Cl&J1*l?5I>ynOhV+FWkuuV**v}tX$1&FgKKm1L*hmu?qC(qSW03sz@?z>FB5^|$ z%Q2f6#3|oO(Z)#KYJGq$vw)d{=lzT(hL)- z;VZu~*_TTkjHM1SrVMm}M*;!7cAYXtf7Cp6_J~KFs5Zi0$mz+^!caOkso_mjBiQr~ zmqX{mO>eQ(@~N)_8aE3udArP=lP;%PN{8_n^35WNogSZvf9%a#omHL(6@C}#j3RKg z;w>cBE2BpX8FogEZn6&@7JSvM9$v;6A5rAVlFr=EkXpyM9;z ze~ou{CpZT_czF)LX0O?;AFC@r@x}A+kSsk@7)XBh!yUA8W_8Rri48`a9VHG#B&_dt zcxt(ka{Fy)gZF4}EZ?wVGZ@@OvED89>gbWxM*59i^{aqZ1QWBkb{ z?~Ar2&YRo%d0C{(7##-^RvgVbzqsPn!j(z)808jiI>YI2*EN@WNJ8!>h2W|SnLej; zcA@6@h}%UjyGAfPCoWvT-pYDC&BfeE_0jY)16}{G;fotRp|el3HK%~)>--5~jpD}w zk(!{~01}FJ&ztGGYUhEqjg2-+XYj_Gz~)aYIKD@Mz=-;oFEE>2Jn6cLr@LF4eNzPm z%$H~uR-7fj?R*qol8ujdnv3#5zS*9dZl@#CqZlm1W}sWdDib!^5N)Q$)ajVY-wxbx znoHlE?j;rA==Phv#!J8d^dd+f(!Vo&-m(-Mql-b)id6cO{A^D6MeT-)uXG9?&A{-D zBJgsd)1s$bx)8LETw0!ife5q9fb^S~q<+8j%f$QMjqtXd`H7Zn*`p6U*a!iMmm`e# z2hr)u&X@at6`dL(6jb`WS*-#dmSAGmF{d}guIT4cRYE8|5f0= zFlBtHTLW-xfXGjH*$y{&X=7peMZ-^YgP<>&jMpgo7nju+k6GOQ1j3-~OcCYt6bqMY zzTx~g3_{1xSX@pXHC@7W$daWSqek(<>9q9sZ6t`Apu*uEY>9`^4bQddic{HE2xv8himq$->*o14|KqYKwnCz1fL4~eh&U?tn6#v zm;Y)**7ttgQ=hP}cS=W6x1}QBGLhr4nWuO-=3bcf63=5((&R(NN6r>>>apfUO-T}y zbvTx{swGc(+Dxu+1-5%W4G=A2H>4)Ln1Tzqm}^`xxsz6~+nv26i`1O!K0#08yg%l> z!@k(O>=fhC-B77Aqbf;1yhd|!`d69akDcRs@J3QPan9xkX>iNIB?s`}w9aoYQamakk#Y#;Q9Ve267Ca z7nj2I>3%{b@i6^8n&Tge7c=)W?Y4?SofMZhIT`0phcXKE%6OSOxaW@ETmzqgE8T{_{WHq|keLK&6kKh)DLPm~?+{=P7Gd3i9{0<)3dF=$q-5*Vf zp%NRNnJ<`b%uAa^G(~jmzd5;ic8Mm`A|G)Z3Ddtz>iH%*aJN&xGsoY%GjbkvA@~~| zLWaJ-FW2(#9aw46zTDhzPL1zjT01&+{%{+*(EKDyS;*%y7R)6aFBswsUXRjmMW_U? zWK=f1hQ=uB`%yy1W!LFREGeb%2Yy>ag*&hboHXHZ@L4k-rNEbi;c%1Fe zu%MAo{+M&=|MJ27|9r^%pT?YcN^R8baD39P{=wZ4;2BJ7-xw5iCPU$jSz*6x;Nlb~ zXNbhP%a3Qn2n1tba(xPDWv;TMKoI-e_ms(G35()TGU;Niy!cAjUw?zjQX3fpQ0}%i zBFs#mlk*5x-sDHYw8gnbJ}L}^c_BduR;JSPKYJz(zgsna87dRU30@IPFt*sPM3##i zb7*H$jUv}llDROG(m#<72VbRo%<9LI!{#6)mdm4Yj%g}V(&C&bgM}PZaTrUn1FWN} zlCpJ)^%66Il94V+qm)40j}7$;VU6IlsA~+a)M-&xkvC!ed3DqxQKY<+@ya{@+>FyW zg+3fy+Hgsa(i17n_^Qxy+jHL;3@NYntW8~QN$#8yTkh*w;M(;la;Tz~b*5;#=KxGj zrB+$N6^oIaY-R$c5iOVJPgvOZ$PYyNd)u}IwfjGqx&gLwSp?p0W~?*kOJN` zb+@88!dVNa%fkEorP^=u2g;ro>0wTjno?q)@hLU>?e7K^Xz5m67$3NsZ}fY_I*Q0J zcSVv>e9rD4lVQli@ndz?foFZR!xnpW9~jXUhB2n`zh+0`4aZaUmjNNUw)2a@`^25O z`yo%#drGJIN4x@kZOu24S@xmF;{o*=-lqsseD10oTw^JVHR~vq70vquPwONS?QAHA zay!2N5*qXcHF9x|k3;eH?aa+j@dh1-bY(To-Y2!;mgBSrV|M&u#L%HbtRFBIpzX`bj2!xVpFPJBa}qM^Cvb zDo1s+Wj>oa8{16Jv?|1fRXf0Da102m_rqV!P4@Hj*KKReqKwbAHGbL-dgP4RIQO&s zfw#hnQ&pOsQSdfSp&i!z_ZSD>M14^xp6|_lX@x5ym@x2G9rgBl0iGFjzO_IGBf_Dh zihBRSQDgbD>b};Na<#+$8BcE!Y8@gqT^;N?ltTi~vMwg>@HeILF^6f#7@G5mP?9Eb z@U@{dcI7Vj4;AeJ#}{MBuC628TmWMic;t^_Gd(Ba$~wAVaJB9h*HxU8Y5w`D^|Zr- zm(FWya%7OpZQq`&P(Pm}sb zLtR{d2)^nC8zQNlrq2CPlV{B-DT#gJX-XdDXw^r z7hR4|%lIv$?!)Auttu`h4D>Hr>w){R$gHf58+{g;YIbn7y@_wC`69l^b}7NO{(LMB z4ksHQf5&{|;EBrbM)G{wQ+K!N!pIseSIJY~jO8k^wPepcK?ex5sO>Ea{IIv>xzR&L z39@HnjgASWw(hK>I5Zec-~-PNU&em^vj! z&I$hh{rgu&oF!-(ofqNu=Ddp7V75Y1u%VsTXQ?-#D}QQ-#(zwghm_rTc3sugRN46x zW6tJ=k>A?U7v}iPl12X_K9N%$Qz2e+WgSsiv4|0KW>1YB3q?U0Q>tzen_!eJ^-AK; zPfXr4HCWWD>S`W-Ys^X$D?c);A$bl)KnY9b=p2=cKq;-X3(Y0Qv?&flXUff~bPeh) zY*($=GjLXW)FI=+X%vLQp&n7@TJv#|I60Rd&WMUA{&ySh+5SUmx-o0R?2}WSm9FeN z2|pEVLvzB${B#Lq7%Z*w&6uZ$TVB7I8bpm2PFBpQ4I4V)p!8|Cu?7(t&Am2!}^DW6SLwPnbt&hmcFXzW)r9idob*nl%?Miw?_Ww zBmz_%<`HfJzIH}IWx$~LC6wkGwrOqX1L{JXVF)5?7{lbWlj24 zaLoKPd4*_7M==AYtW|fNXtR~Yr6ps!MnM;c9TWAv0Mvz4+97nM`3@tejIGsi8pO{p z(X0BaW3NaeSo2*Xnco6`O_g_KZZ=6?rgP|-OL zB}Mhj+lT0ir5WVDqi`hL@Ie%1SKw%ngxLcTGQ_GPdMl>fq7&RYqGUz~^_3NLOrv4% zds2OHOInbVU=H;x{Y^W)ZV#{DEDQt4>EQ&z-EZEC?AR_S$`R|NBW{y~ z=87DZWShf=ns@?wtEh79m1oSD5A_m+C{QPxn0M1AmMQEJ*ia9#4vy0#)l_69-}O>^ zSsQmSti+W3CGFB^l%=mVsD|?x4e3q;bQa=`vKt{!Mw3O~yWk|rqeOiR?Ft6CFeOcW zc;x7mA*UHL^8|o!qgn?DuLsI4I13=$x=sX2UddWv(0=Jug_!)N=;YB~iCPH__A)tw zuDw^mt7BqCJv3K`iqY52y3ZH^1j1fh{wX{hmG7xCma6?qTs;I>JclBt6_rIf2`bX; z?7T?hD#?LI$}a}8sXr)d$VL68-aun-pA10Pr73SwLsUm6RTP)xNO$>jJbhFnX+sV| zrFU94&yvYzh>N}lz!V06cJaKG)LCEQNhB$kdEqJXUpWaIU{ z)-*UpA} z1!M2J7!|q#v#|10Xo4ak9l-12Ss7Yykpru)G9L z%ri*pvuX0rQv=*sbWo!h>*?++Udm2(rv1k>3Ox|;JTgm+u2EFUDrQ)zjlT=PL#Bww zsl8+XaYQ}q=PKQ9Wu~Y6O!017%-$3;^_m)Q$0D;nGdw&a{f9Q8_~`MfBrUx1u_ako zd0EO^tjzZ+J=Cx~fC|m~Ia!{X?1qI-HK;L*SmR3slc##k_lY9*v?BIRc5%qv_+yqF zXhD()Td0EkaSE?;=E`gM*u!Tzg`hXa77C?}J}D)T>7sc1l8~RkGQ}E54OxfWB8Q4zR+;5xq%=uU5%O*0Th*r3ovKvW ze$Qd7YuOpcGKN`sd0Pi5$=$};B2T(H43LuK@7n3)x2L|yKqRjlb%TL20fP1pKL^iz~4czbr5i%0srOTt1|Q6SFD z%O-FsQDn<~9CM?RfzB4rANF$w0fovW1Dit~S4F4!i|r>@7yaW$>)f{4rB%lvVHjP844|H~E07lkVSpN?ppf-6FMlq#A3u2{wOv^Us9>ac z0Y|nR>f*fLK94>%sQFZ=`{ONyTx&$mRhkZ^8XetI||V}VExu2F#wbky9|gbdBV@SRs06!3kruLcMsr8Wqv3bEX$~JHt}cd*ZlnS@bKT+PP3?5$<}mX2NkrH$@bno-;HA$_((d< zYm4q75YgLf*cpsnpjqxek*`iET^tXOhBW!bJ$4;ay%{7U2Kpl)}R4u?*@MPaZ*rd?h1D)()211(uE2J~UQ;dqFWn;TbpBb-t)yu_&UIVy=j&(=hK z6sWOGV94psONV*Sji~r|Nd*N|$caQxZ|_n9kcA73FM#YB&wj&kPk%op4GkjD0FZ|p z&I`VH1%ay5EHcI?C(GK|F+XJRjuKJ%4p-H9Af4>@f&-`to6nwr^gNNqf2e2lH_S{zU#<6ueJHBs~vW5j~fKXgr## z8`hW_j#KwnZ;ppI!hnR{;?ZxS0X#07F9CWj0F`+8$2UXN`m9m2-I@RWv0iDpdW*MO z$~?lgR#wvs?vf`C@0gzjh(9(aqkX0-#kj7B@2s3f69Zy-r1aI`aFR6g=oXxpKV4?} zA~iL2&TZCK3Ife<-}_ZR-Qdao=H**uWs!)jEvqVp}>|Axsrd0x^ZWmV18*NV(icz4;$jAUvNnyYVQBqcJo2j(UEiB9` zFOPOy=_1#SRW4S!+!a6YplU7vr!mf0diXrTb{Bp;t8b=-Ob4Q~iXSwZgfQ9-OFr+^ zwr}j5EYuDXqlk%#c^T5lqt1wv359;Hw4PGd)|LgPYNabow9YC^FXw1BWbshOSMyRp zvtsPv>M{ME?~|(LfeO4)HJU|w2yqxjm_(37rdXy@2GCjK*(%!yL6bz&D4HECw(9gO zwtk|cqa()%dYE584?eo61uK~74L)C&CzNJn2q`Ggd7iC$^m81gp`;3xj^jG6+(Mt1 zrSVK9dm;QJ3uuq@l~d!z9MJYM0lc^nu#$U%%^XTC9+NxOXW ze;)+{L;Od&SOG3qc$R`f(dVKRQDjk4KPaQ5BBel^QBoi&5QdH&Y%@l5+rw}KL+@%L znaB+8a;4jOVTX5sC>5npO~A#PvV0-6rHLlZV5E3{_250YkF*HtwEpDiLTvX%2hQ5z z`ZAbHP$&dJ?Yc+*hFX|qI8$=F%2f3obB2{Z<|n)6h=7d&b1%b~G3Cns#Ci*)?Wz6D zpf_`R0%@?=V>(i~YOKosjWUZ~ugQJuk8i3~1bq2okNfcl=yFBX7!#@k^G>fV2qG07 zFKy^IV%YIu%QmxBVX6G?qnR}|3FM;w2RXb*jT#fa*wdEVf>AXb zjtP*7Z-28TqD~$zFyAZikt_Cyn(|FT2_w|x*nZTPh??0fe#*pb#Trp8F=#)#l%EoZ2NcSXx!xDr0mkTB?!?VW}QP1%4@l8xj9O!Hpno^UJ2!w{e zD`f(bmWtOS=GO~=#fnB1Nx*cNCWnn~22%>1uus`ve5(xdk>_?^*c4C*f(Uv%o=$x)Kk0go<*3w;{<$ z4!063c|>%Er`-31;f6A4##s;HV;Zq2W|RInrk$C}5E4yIO=JR&z!2BXALNroy0Yr( zxCjUcfMH?I@(@sn0EReZKK@;)W5p3FTUhIb{(?PyaV>)pl*|2K;U9!6`R*Ogr>7{( zM#OwBfq=CbotO}R^X5^M)Mr^bl8CX)>}>yId`>H@Lk}XDlSPqUN8136M=k9Om{rWs zM1}`zy&fY?@^KHzu+N%vE_l;kT1X)I2o)&0VhZhww`=gN#0obdSX!(#w(8|h+XY8MO*Rs0rAISY~zCLPB8%QDD*hOgH z@J3gc*wWJSWPc%jeckL`p_aI&CZIU@;IykNFJO5}0#XLRlKIKzhz{zZM+yliCufS~ zUorQSSKgbhtB$if!`QLJqKaf--?h1-ahu;PbOw};`ZbR(KxSFbJ!>)`!AGrPusGppb@#Art4j=$ zbdC_!rFK=-cW;Gwo)-p8OR}zgifoDuBji3ho3)RQi<1Dl41hFMHMNoP@s2#Td|Czu zN?_F-=N1>|)YT;o4JkC;offnE-gq$Q{8bgNPy)_i4}ox(-ihKxNtHOZgUfhN8xt() zEha9zxt>}3W_c|w0#j2{0OP$?QxjKF!OVYGm{Cv=8XAf`l+)Cd1^@#-e*Vj=spg@J z!k{mO9-T-R7*h zmaMZ363#Num2aXzk)7$U$RdnL7C*Reu#@*~^kkQSsYCkB*^1qGoz26{aqN$bJV|Iw zag~LfS=ZP%lcbhPfyKxWvBsmg_fuX;W`H!uE=ZjV%Sv zlO-i3X#kiS7!))o$2r^I|7l)+K5SC1Y(WLBa6%)T~UrS^s1`PDULN!Yw_A*5?ZUInCden zd%V8^3+d|#t-P2j&y5R-)AbO>#_lYzw^@!bRq^mc!0z0(w8_vGsuqUJw>o#M@)=O{xMwfPcXnK$U^fvl_I(5fBnScoZ}WDT@^VC{F*=%~}9k)gBM=*Fpfh z@i1*v@pG+hk|de7>&J`_cjU)tG}osR4R*OqY1dn7K3Ei z7;*r;NRL#!EErK8^a{kS;)MKeqk?2cVxmey!DaW_S-wiV)w9G~QliulXk z4#vMnFn))BzkqaW>+0%w3Ntf5Ihz7o(XiloWO8ypA}P4#uhb;Ni3|smI9*&^-fC#{ z{46z&Itdy_#ZkEC3bJH5jtIG&f-O4Ft4Gk$%t_lu8OF>N4{T$D#8UC0Npa+!H~!4I>Omq#B?A}9mQ+k=y0 z+!gv}6#vY|@J_*CB}JJAHd;@<`4EI4WPLclLL46_G+0`{~AocQ3~P61(ohmO!PGOmX6 z?*YM&+ckV{JEDb)F7C~(Eu&v`u0+7r?o2G;5eZNb5p8WEdo?SlAn7_hm{eUJuw{gk zJ^K#09l);e;?GW>0(ej=Dk|+?ZVm#3#UP+l1;BZreD>JN+B&zWXkFwF;4=S%zZ}Sg zZF@Upd{=hE4t=2CB2KW5M zi`qz5<1WA)PB;1R1KX$+ggF8L!w!R-QwQQe)H}Y|_cUL}Dyqm%r&UW^8*odWym=4O zRRDZbz($mnmq$T`)vc`=08|P@SjMki{w2bboc{}Fd~4doDbPVM8T25rNGOXa2;+_N zJ`PX@>88AA&;c$XMOaZ%Po%Hd0CfSK+C7vjKdAzy%;A z$cbsszyK652EdGhPMLLeb%7NSnV1*^f-OUxzw{3bfSx^8Na1<&&^B`baM#rdOjJVR z>7OV6^`r9s2!PyxB>=$V*AN%SQ5XUMf_`6sU@X$W6M)$V@}zFFUi|mDfQRtW|K6$a zn1?fXUeynK70;*3peTWAZ#osHD3Fh4lKQL6$2g3sBFq~W^KGLDAs*kn;1RV976Wqu zKPsi0y6ZwG_qHH`J0M5hZt->hYYDm3!H>1}gAgvedp!j9E;A>Ki3QgC zN;#Qk{-imVy8rdhP(2!AKys%ty-dd*2T|f2ayR<|@z-R+8lOS1{>YiOhSCK?baA=H zb3Hc9SB_e!gA;^O9PP#~{i$tpoSLersXZl(3W~$qDUn7X(33KA#1O5otF`7DJZ^~W1P1E^bgM(FjHOYSyt40@ zMPYF=j^wWV??y$?&v80=nDRIEvX7tl>lGXCb(9hTufz$isiy6+)D%BwOI6o6^CEVp z38xAkuYbrh%vBE#2ZwGjbVI&?V6vPJWK=CP>hH?3zNLn|YfgU>$<7$>o1*W1OhOi4 zK%3s%XGHdkAjuMbCixt$)GwgRZB(%JPddOIO(0E6q_I)rZlko@|R|#!SU;wUAdqWWGP@GYB zo8)&5q;sKj0rnS>F5!Q22T!^)YC}^rI$9tbKbx-O2S^eOdhe?Or=nA`d^;l&Sp9_C z(=__nRg82rm`e>^W<{OZ%`Lw1K8isG1?U*HZ&n4Yn+^RCaehpTFNLbSk4g4BIaf%X z!<{0_7&a+amZ~_RF5KnrTLSr@$ha0C5eDkp=*QQ3!VxWZm}mldT8A<~h1>IQD{{}J zC4V20@GIW{xdFk_7xEg=Vs3xim_Q zH)7RyE6JG-FHSr{;|*PVVtb#M;FuAs7YLI<^Qj!M_G_#_>=?Eb-U7LCb|#!mNw!jm zY0G#if>@MSy36k<^QgIh_!^D-uECoBmj}6O02r&|0!J!Z>`B@&a~lWv?@p4^_0zJ^|b|qkp^>mPu58ywm>{PV1b4V zZGT&!{-j!V;ABUTj!e2{t23{&hu0d>WEHYW$9Qc)B7gKpTIFIa*p~nAkzW}PG9)NH zdJ(5Ujw^ky^;fTsfyF$UC3VIAe_?z5KirwJfJi%3wkRtLLAp^NU^e{1;L%kCP09mI5|D5;FRyqcfe(DcNk&!=MAH2 z;nd-|akjI)A9Gl^1eZYt(r}i4(%^{FN6$ zf0Fsf>!D-$H%V01d7fpM)C&&6_dFB<{VPufo973P&d$B z*mFaW+%-S=qY1oqFI_1b!}2xNgyz@PC`$-?$|5whY4x9xXN_sQG_*Gp?YKC(iO5-%SnV6vrDFP zvGGGWLNmh*v)ttuE5<}mBy^nN{rDR~>yJkN9QLmpAB8c^&-P<1YEQTKG?u19W*P;i zm1T*!m0M_(uQeN7DHUDYR()B6*}g7Wa0=gw5|~TxnjcPv2}~eGUw6{>z4y*)$lGC@X#hG&e0tc!kyqp@dJCpT5FEUWTsL+aIaYAn)rB2#4c$NfTddme~pNU&CIh}`?+hAAXGyg7jIJ?GFaN}=?p+QtLr4j8?Eq>Zi19{bY$@=1ZOuaX_Locz*PVO!7V*tygPq#QBN5gTCN`{X(8mitG+O2i9TeRHPm5yI`@qQrAoJV`)gm>_} zf`mSPXi1Ck6=k<2vfzJu^5N_jG@na(s6ZSPVL(>0k-6{#ph5vrfhCf!Cfyu% zs6AygzW;Dr_5qcPgD72<&DV|2f^u$Wa-_-+rY^X4B1h(q=*Vc-`Qma~ewi0M`y&1tSJw^QAL zN8-A}2Rlu#F|E;j2QL3r{wwHMvfXC4mFIDD^+ESP`@#F1E{a_!pO2`a=v!(ftPt4ecx{Obs3mXoF$<&YL~;1%i=_ zG~TFDe#cC6k!jsi;k#@1vRsFX0rQlNYl3b~)nWH5)yBW5!fJ08vs-Tn6?*H0WY(9?J=WW+zgyoBj~I9JI9L$&p8?L< z2Cc*$wuvq&)$xJ1!10pyIOkpXW~ng|PequiH$d|`V^Q8e|7W!?22Zy6$GuzR+q>Ti zyNRkWd|2-mM!T(UfvCol2}n0Q>|v?4rvjcQ)jyhJru>l?8Al8U2-rW6nrD}m7pBof z+~HisAI(HQx{_x78K|_6_sPeZ^N5`k^`sy^XuV2Q%`lds{b5 zzz-X}RmNDR5e8$`eYAl`#bf6CxmCO-Y-r4JuKNPURU?$6H=frp#NCH%zyPSr~N;3*y_jhbkJ{` z1;O$Mc%6?c-4TCg8T4fdpkbc$nqd6aT@W2I5O6#Jl8b?mwFnTWOiWCKW@Y_VgIjA? l7ndLN^9n#XP4Lbyr!=ptLoS{L_<$gsw77y;k%+;^{{d%QIhX(d literal 0 HcmV?d00001 diff --git a/visualRegressionTests/tests/defaultV2/etalons/matrixdropdown-with-totals.png b/visualRegressionTests/tests/defaultV2/etalons/matrixdropdown-with-totals.png index 30427b0ffe24bc4a73af2bf680c5d470d0004272..43f832b8283e7b8fef1cb74729e039d37067f4c6 100644 GIT binary patch delta 4739 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 J5}oVe{{Xh{tycg5 delta 4252 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 diff --git a/visualRegressionTests/tests/defaultV2/etalons/matrixdynamic-with-totals.png b/visualRegressionTests/tests/defaultV2/etalons/matrixdynamic-with-totals.png index 85280fb53c4e56dcc24c206b7e447835c6447938..516848e87f4b411f26caae7c2e05ab794af66531 100644 GIT binary patch literal 13451 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 literal 13048 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 b!pwb9+E$`<9q@ldu0dZaz9@Qb`0l>|8+MsG delta 12601 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 diff --git a/visualRegressionTests/tests/defaultV2/matrixdynamic.ts b/visualRegressionTests/tests/defaultV2/matrixdynamic.ts index eb1438a21d..d4eb7166f2 100644 --- a/visualRegressionTests/tests/defaultV2/matrixdynamic.ts +++ b/visualRegressionTests/tests/defaultV2/matrixdynamic.ts @@ -349,4 +349,86 @@ frameworks.forEach(framework => { await takeElementScreenshot("matrixdropdown-with-totals.png", matrixdynamicRoot, t, comparer); }); }); + test("Check MatrixDynamic totals alignment", async (t) => { + await wrapVisualTest(t, async (t, comparer) => { + await t.resizeWindow(1280, 1100); + await initSurvey(framework, { + pages: [ + { + name: "page1", + elements: [ + { + type: "matrixdynamic", + name: "question1", + title: "Select Your Coffee", + columns: [ + { + name: "coffee", + title: "Coffee", + cellType: "dropdown", + isRequired: true, + isUnique: true, + choices: [ + { + value: "espresso", + text: "Espresso", + }, + { + value: "ristretto", + text: "Ristretto", + }, + { + value: "macchiato", + text: "Macchiato", + }, + ], + storeOthersAsComment: true, + }, + { + name: "price", + title: "Price", + cellType: "expression", + expression: + "iif({row.coffee} = 'ristretto' or {row.coffee} = 'macchiato' or {row.coffee} = 'cappuchino', '2.5', iif({row.coffee} = 'flatWhite' or {row.coffee} = 'latte', 3, 2))\n", + }, + { + name: "amount", + title: "Num of Items", + cellType: "dropdown", + totalType: "sum", + choicesMin: 1, + choicesMax: 10, + }, + { + name: "totalPerRow", + title: "Total", + cellType: "expression", + totalType: "sum", + totalDisplayStyle: "currency", + totalAlignment: "center", + expression: "{row.price} * {row.amount}", + }, + ], + rowCount: 1, + maxRowCount: 6, + defaultRowValue: { + coffeeItem: "2", + coffee: "espresso", + price: 2, + amount: 1, + totalPerRow: 2, + }, + addRowLocation: "topBottom", + addRowText: "Add Coffee", + }, + ], + }, + ], + }); + + const matrixdynamicRoot = Selector(".sd-question"); + await resetFocusToBody(); + await takeElementScreenshot("matrixdropdown-with-totals-alignment.png", matrixdynamicRoot, t, comparer); + }); + }); }); \ No newline at end of file From b8b9115554ae08c96b5fdf5d01b262069e52600e Mon Sep 17 00:00:00 2001 From: Dmitry Date: Mon, 5 Feb 2024 10:28:23 +0400 Subject: [PATCH 3/4] Fix row gap in compact mode (#7803) * Fix row-gap in compact mode * Add vr test --- src/defaultV2-theme/blocks/sd-row.scss | 17 ++++--- .../etalons/row-multiple-compact-mode.png | Bin 0 -> 11265 bytes .../tests/defaultV2/survey.ts | 43 ++++++++++++++++++ 3 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 visualRegressionTests/tests/defaultV2/etalons/row-multiple-compact-mode.png diff --git a/src/defaultV2-theme/blocks/sd-row.scss b/src/defaultV2-theme/blocks/sd-row.scss index 6b882566fe..9eaab695e3 100644 --- a/src/defaultV2-theme/blocks/sd-row.scss +++ b/src/defaultV2-theme/blocks/sd-row.scss @@ -20,17 +20,17 @@ .sd-page__title, .sd-page__description { - &~.sd-row.sd-page__row:not(.sd-row--compact) { + & ~ .sd-row.sd-page__row:not(.sd-row--compact) { margin-top: calcSize(3); } - &~.sd-page__row.sd-row--compact { + & ~ .sd-page__row.sd-row--compact { margin-top: var(--sd-base-vertical-padding); } } .sd-row.sd-page__row:not(.sd-row--compact) { - &~.sd-row.sd-page__row:not(.sd-row--compact) { + & ~ .sd-row.sd-page__row:not(.sd-row--compact) { margin-top: calcSize(2); } } @@ -41,7 +41,7 @@ width: calc(100% + var(--sd-base-padding)); flex-wrap: wrap; - &>div { + & > div { box-sizing: border-box; padding-left: calcSize(2); display: flex; @@ -53,14 +53,14 @@ .sd-row--multiple { row-gap: var(--sd-base-vertical-padding); - &>div { + & > div { padding-left: var(--sd-base-padding); } } } .sd-row--multiple.sd-row--compact { - &>div { + & > div { padding-left: var(--sd-base-padding); } } @@ -69,13 +69,12 @@ margin-left: calcSize(-2); width: calc(100% + 2 * var(--sjs-base-unit, var(--base-unit, 8px))); - &.sd-row--compact { padding: 0; + row-gap: var(--sd-base-vertical-padding); margin-left: calc(-1 * var(--sd-base-padding)); width: calc(100% + var(--sd-base-padding)); } - } .sd-row__panel { @@ -87,4 +86,4 @@ box-sizing: border-box; width: 100%; white-space: nowrap; -} \ No newline at end of file +} diff --git a/visualRegressionTests/tests/defaultV2/etalons/row-multiple-compact-mode.png b/visualRegressionTests/tests/defaultV2/etalons/row-multiple-compact-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..ebe0b95ac55a7139d882c1e06d4e455ace8d9dff GIT binary patch literal 11265 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 literal 0 HcmV?d00001 diff --git a/visualRegressionTests/tests/defaultV2/survey.ts b/visualRegressionTests/tests/defaultV2/survey.ts index dcfe6217ff..000e9271dc 100644 --- a/visualRegressionTests/tests/defaultV2/survey.ts +++ b/visualRegressionTests/tests/defaultV2/survey.ts @@ -1287,6 +1287,49 @@ frameworks.forEach(framework => { }); }); + test("Check multiple row in compact mode", async (t) => { + await wrapVisualTest(t, async (t, comparer) => { + await t.resizeWindow(700, 1080); + const json = { + pages: [ + { + name: "p1", + elements: [ + { + type: "text", + name: "q1", + title: "Question", + startWithNewLine: false + }, + { + type: "text", + name: "q2", + title: "Question", + startWithNewLine: false + }, + { + type: "text", + name: "q3", + title: "Question", + startWithNewLine: false + }, + { + type: "text", + name: "q4", + title: "Question", + startWithNewLine: false + }, + ] + }, + ] + }; + + await initSurvey(framework, json); + await ClientFunction(() => (window as any).survey.isCompact = true)(); + await takeElementScreenshot("row-multiple-compact-mode.png", Selector(".sd-root-modern"), t, comparer); + }); + }); + test("Check survey logo right with empty title", async (t) => { await wrapVisualTest(t, async (t, comparer) => { await t.resizeWindow(1920, 1080); From f94d610b39bc05cc4f7dfe1bbc22c32eb94f2657 Mon Sep 17 00:00:00 2001 From: RomanTsukanov Date: Mon, 5 Feb 2024 10:46:07 +0400 Subject: [PATCH 4/4] Update the `totalAlignment` description --- src/question_matrixdropdowncolumn.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/question_matrixdropdowncolumn.ts b/src/question_matrixdropdowncolumn.ts index 277b33b2f9..46ec4dbc2f 100644 --- a/src/question_matrixdropdowncolumn.ts +++ b/src/question_matrixdropdowncolumn.ts @@ -591,10 +591,10 @@ export class MatrixDropdownColumn extends Base * * Possible values: * - * - `"auto"` (default) * - `"left"` * - `"center"` * - `"right"` + * - `"auto"` (default) - Applies one of the values above based on the column's [cell type](#cellType). * * [View Demo](https://surveyjs.io/form-library/examples/aggregate-data-within-form/ (linkStyle)) * @see totalType