Commit 424b799e authored by Boris Kocherov's avatar Boris Kocherov

render_array() use schema.minItems for display all required items

parent da8c0b3d
...@@ -374,6 +374,17 @@ ...@@ -374,6 +374,17 @@
}); });
} }
function checkSchemaArrOneChoise(schema_arr) {
if (schema_arr.length === 1) {
if (schema_arr[0].type instanceof Array) {
return schema_arr[0].type.length <= 1;
} else {
return true;
}
}
return false;
}
function convertExpandedProperties2array(properties) { function convertExpandedProperties2array(properties) {
var property_name, var property_name,
arr = [], arr = [],
...@@ -628,13 +639,9 @@ ...@@ -628,13 +639,9 @@
} }
function render_array(gadget, schema, json_document, root, path, schema_path) { function render_array(gadget, schema, json_document, root, path, schema_path) {
var queue = RSVP.Queue(), var div,
div,
div_input, div_input,
input, input;
item_schema,
i,
maxItems = schema.maxItems;
div = document.createElement("div"); div = document.createElement("div");
div.setAttribute("class", "subfield"); div.setAttribute("class", "subfield");
div.title = schema.description; div.title = schema.description;
...@@ -648,13 +655,55 @@ ...@@ -648,13 +655,55 @@
} }
} }
item_schema = schema.items; function div_append(child) {
if (child) {
div_input.appendChild(child);
}
}
// XXX add failback rendering if json_document not array
// input = render_textarea(schema, default_value, "array");
return expandSchema(gadget, schema.items, schema_path + '/items')
.push(function (schema_arr) {
var queue = RSVP.Queue(),
i,
minItems = schema.minItems || 0,
len = 0;
// XXX rewrite loading document for anyOf schema
if (json_document) {
for (i = 0; i < json_document.length; i = i + 1) {
queue queue
.push(function () { .push(
return expandSchema(gadget, item_schema, schema_path + '/items'); addSubForm.bind(gadget, {
gadget: gadget,
parent_type: 'array',
schema_path: schema_path + '/items',
schema_part: schema_arr,
default_dict: json_document[i]
}) })
.push(function (schema_arr) { )
return render_schema_selector(gadget, "add item to array", .push(div_append);
}
len = json_document.length;
}
if (checkSchemaArrOneChoise(schema_arr) && minItems > len) {
for (i = 0; i < (minItems - len); i += 1) {
queue
.push(
addSubForm.bind(gadget, {
gadget: gadget,
parent_type: 'array',
schema_path: schema_arr[0].schema_path,
schema_part: schema_arr[0].schema
})
)
.push(div_append);
}
}
queue.push(render_schema_selector.bind(gadget,
gadget, "add item to array",
schema_arr, function (value) { schema_arr, function (value) {
return addSubForm({ return addSubForm({
gadget: gadget, gadget: gadget,
...@@ -664,36 +713,18 @@ ...@@ -664,36 +713,18 @@
schema_part: value.schema schema_part: value.schema
}) })
.push(element_append); .push(element_append);
}); }));
return queue;
}) })
.push(function (element) { .push(function (element) {
// var maxItems = schema.maxItems;
input = element; input = element;
// XXX update on every add/delete item // XXX update on every add/delete item
input.hidden = maxItems !== undefined && json_document.length >= maxItems; // input.hidden = maxItems !== undefined && json_document.length >= maxItems;
div_input.appendChild(input); div_input.appendChild(input);
div.appendChild(div_input); div.appendChild(div_input);
root.appendChild(div); root.appendChild(div);
}); });
// XXX rewrite loading document for anyOf schema
if (json_document) {
for (i = 0; i < json_document.length; i = i + 1) {
queue
.push(
addSubForm.bind(gadget, {
gadget: gadget,
parent_type: 'array',
schema_path: schema_path + '/items',
schema_part: item_schema,
default_dict: json_document[i]
})
)
.push(element_append);
}
}
// XXX add failback rendering if json_document not array
// input = render_textarea(schema, default_value, "array");
return queue;
} }
function render_field(gadget, key, path, json_field, default_value, root, schema_path, options) { function render_field(gadget, key, path, json_field, default_value, root, schema_path, options) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment