Skip to content

Commit

Permalink
Support this functionality for all arrays properties #7254
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewtelnov committed Oct 30, 2023
1 parent ba8cee2 commit 3fd8f55
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 7 deletions.
3 changes: 3 additions & 0 deletions src/jsonobject.ts
Original file line number Diff line number Diff line change
Expand Up @@ -867,6 +867,9 @@ export class JsonMetadataClass {
prop.baseClassName = propInfo.baseClassName;
prop.isArray = true;
}
if(prop.isArray === true) {
prop.isArray = true;
}
if (propInfo.classNamePart) {
prop.classNamePart = propInfo.classNamePart;
}
Expand Down
2 changes: 1 addition & 1 deletion src/question_matrixdropdownbase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2440,7 +2440,7 @@ Serializer.addClass(
[
{
name: "columns:matrixdropdowncolumns",
className: "matrixdropdowncolumn",
className: "matrixdropdowncolumn", isArray: true
},
{
name: "columnLayout",
Expand Down
2 changes: 1 addition & 1 deletion src/question_multipletext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -845,7 +845,7 @@ Serializer.addClass(
Serializer.addClass(
"multipletext",
[
{ name: "!items:textitems", className: "multipletextitem" },
{ name: "!items:textitems", className: "multipletextitem", isArray: true },
{ name: "itemSize:number", minValue: 0 },
{ name: "colCount:number", default: 1, choices: [1, 2, 3, 4, 5] },
{ name: "itemErrorLocation", default: "default", choices: ["default", "top", "bottom"], visible: false }
Expand Down
8 changes: 4 additions & 4 deletions src/survey.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7480,10 +7480,10 @@ Serializer.addClass("survey", [
},
{
name: "completedHtmlOnCondition:htmlconditions",
className: "htmlconditionitem",
className: "htmlconditionitem", isArray: true
},
{ name: "loadingHtml:html", serializationProperty: "locLoadingHtml" },
{ name: "pages:surveypages", className: "page" },
{ name: "pages:surveypages", className: "page", isArray: true },
{
name: "elements",
alternativeName: "questions",
Expand All @@ -7506,7 +7506,7 @@ Serializer.addClass("survey", [
},
{
name: "calculatedValues:calculatedvalues",
className: "calculatedvalue",
className: "calculatedvalue", isArray: true
},
{ name: "surveyId", visible: false },
{ name: "surveyPostId", visible: false },
Expand All @@ -7525,7 +7525,7 @@ Serializer.addClass("survey", [
"navigateToUrl",
{
name: "navigateToUrlOnCondition:urlconditions",
className: "urlconditionitem",
className: "urlconditionitem", isArray: true
},
{
name: "questionsOrder",
Expand Down
16 changes: 15 additions & 1 deletion tests/jsonobjecttests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3047,9 +3047,10 @@ QUnit.test("Add a quesition into page elements array", function (assert) {
assert.equal(survey.pages[0].elements.length, 1, "There is one element in the page");
assert.equal(survey.pages[0].elements[0].name, "q1", "Element has a correct name");
assert.equal(survey.jsonErrors.length, 1, "There is a JSON error");
assert.equal((<any>survey.jsonErrors[0]).propertyName, "elements", "Correct property name");
});
QUnit.test("Add a quesition into survey questions array", function (assert) {
const prop = Serializer.findProperty("page", "elements");
const prop = Serializer.findProperty("survey", "elements");
assert.equal(prop.isArray, true, "Elements is an array");
const survey = new SurveyModel({
questions: { type: "text", name: "q1" }
Expand All @@ -3059,4 +3060,17 @@ QUnit.test("Add a quesition into survey questions array", function (assert) {
assert.equal(survey.pages[0].elements[0].name, "q1", "Element has a correct name");
assert.equal(survey.jsonErrors.length, 1, "There is a JSON error");
assert.equal((<any>survey.jsonErrors[0]).propertyName, "questions", "Correct property name");
});
QUnit.test("Add a page into survey pages array", function (assert) {
const prop = Serializer.findProperty("survey", "pages");
assert.equal(prop.isArray, true, "Elements is an array");
const survey = new SurveyModel({
pages: { questions: { type: "text", name: "q1" } }
});
assert.equal(survey.pages.length, 1, "There is one page");
assert.equal(survey.pages[0].elements.length, 1, "There is one element in the page");
assert.equal(survey.pages[0].elements[0].name, "q1", "Element has a correct name");
assert.equal(survey.jsonErrors.length, 2, "There are JSONs error");
assert.equal((<any>survey.jsonErrors[0]).propertyName, "pages", "Correct property name #1");
assert.equal((<any>survey.jsonErrors[1]).propertyName, "questions", "Correct property name #2");
});

0 comments on commit 3fd8f55

Please sign in to comment.