Skip to content

Commit 85cb845

Browse files
committed
fix #56
Properly let coexist "required" keyword of v3 and v4+ flavors. Fixing for nested object
1 parent fbc3262 commit 85cb845

File tree

3 files changed

+85
-17
lines changed

3 files changed

+85
-17
lines changed

dist/js/brutusin-json-forms.js

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ if (typeof brutusin === "undefined") {
137137
var root = schema;
138138
var formId = "BrutusinForms#" + BrutusinForms.instances.length;
139139

140+
renameRequiredPropeties(schema); // required v4 (array) -> requiredProperties
140141
populateSchemaMap("$", schema);
141142

142143
validateDepencyMapIsAcyclic();
@@ -937,6 +938,45 @@ if (typeof brutusin === "undefined") {
937938
return false;
938939
}
939940

941+
function renameRequiredPropeties(schema) {
942+
if (schema.hasOwnProperty("oneOf")) {
943+
for (var i in schema.oneOf) {
944+
renameRequiredPropeties(schema.oneOf[i]);
945+
}
946+
} else if (schema.hasOwnProperty("$ref")) {
947+
var newSchema = getDefinition(schema["$ref"]);
948+
renameRequiredPropeties(newSchema);
949+
} else if (schema.type === "object") {
950+
if (schema.properties) {
951+
if (schema.hasOwnProperty("required")) {
952+
if (Array.isArray(schema.required)) {
953+
schema.requiredProperties = schema.required;
954+
delete schema.required;
955+
}
956+
}
957+
for (var prop in schema.properties) {
958+
renameRequiredPropeties(schema.properties[prop]);
959+
}
960+
}
961+
if (schema.patternProperties) {
962+
for (var pat in schema.patternProperties) {
963+
var s = schema.patternProperties[pat];
964+
if (s.hasOwnProperty("type") || s.hasOwnProperty("$ref") || s.hasOwnProperty("oneOf")) {
965+
renameRequiredPropeties(schema.patternProperties[pat]);
966+
}
967+
}
968+
}
969+
if (schema.additionalProperties) {
970+
if (schema.additionalProperties.hasOwnProperty("type") || schema.additionalProperties.hasOwnProperty("oneOf")) {
971+
renameRequiredPropeties(schema.additionalProperties);
972+
973+
}
974+
}
975+
} else if (schema.type === "array") {
976+
renameRequiredPropeties(schema.items);
977+
}
978+
}
979+
940980
function populateSchemaMap(name, schema) {
941981
var pseudoSchema = createPseudoSchema(schema);
942982
pseudoSchema["$id"] = name;
@@ -958,18 +998,12 @@ if (typeof brutusin === "undefined") {
958998
} else if (schema.type === "object") {
959999
if (schema.properties) {
9601000
pseudoSchema.properties = new Object();
961-
var requiredProperties;
962-
if (schema.hasOwnProperty("required")) {
963-
if (Array.isArray(schema.required)) {
964-
requiredProperties = schema.required;
965-
}
966-
}
9671001
for (var prop in schema.properties) {
9681002
var childProp = name + "." + prop;
9691003
pseudoSchema.properties[prop] = childProp;
9701004
var subSchema = schema.properties[prop];
971-
if (requiredProperties) {
972-
if (containsStr(requiredProperties, prop)) {
1005+
if (schema.requiredProperties) {
1006+
if (containsStr(schema.requiredProperties, prop)) {
9731007
subSchema.required = true;
9741008
} else {
9751009
subSchema.required = false;

0 commit comments

Comments
 (0)