Merge pull request #15271 from guerler/fix_form_builder

Fix form builder in admin panel
This commit is contained in:
Dannon
2023-01-09 10:40:48 -05:00
committed by GitHub
2 changed files with 17 additions and 14 deletions
+5 -3
View File
@@ -247,12 +247,14 @@ export var Upload = Backbone.View.extend({
return this;
},
_readFile: function (e) {
var self = this;
var file = e.target.files && e.target.files[0];
if (file) {
var reader = new FileReader();
reader.onload = function () {
self.model.set({ wait: false, value: this.result });
reader.onload = () => {
this.model.set({ wait: false, value: reader.result });
if (this.model.get("onchange")) {
this.model.get("onchange")(this.value());
}
};
this.model.set({ wait: true, value: null });
reader.readAsText(file);
+12 -11
View File
@@ -1,4 +1,5 @@
import copy
import csv
import logging
import re
@@ -122,7 +123,7 @@ class Forms(BaseUIController):
{
"name": "type",
"type": "select",
"options": [("None", "none")] + [(ft[1], ft[1]) for ft in fd_types],
"options": [(ft[1], ft[1]) for ft in fd_types],
"label": "Type",
},
{
@@ -130,6 +131,7 @@ class Forms(BaseUIController):
"label": "Import from CSV",
"type": "upload",
"help": "Import fields from CSV-file with the following format: Label, Help, Type, Value, Options, Required=True/False.",
"optional": True,
},
],
}
@@ -139,16 +141,18 @@ class Forms(BaseUIController):
index = 0
if csv_file:
lines = csv_file.splitlines()
for line in lines:
row = line.split(",")
rows = csv.reader(lines)
for row in rows:
if len(row) >= 6:
for column in range(len(row)):
row[column] = str(row[column]).strip('"')
prefix = "fields_%i|" % index
payload[f"{prefix}name"] = "%i_imported_field" % (index + 1)
payload[f"{prefix}label"] = row[0]
payload[f"{prefix}helptext"] = row[1]
payload[f"{prefix}type"] = row[2]
payload[f"{prefix}default"] = row[3]
payload[f"{prefix}selectlist"] = row[4].split(",")
payload[f"{prefix}selectlist"] = row[4]
payload[f"{prefix}required"] = row[5].lower() == "true"
index = index + 1
new_form, message = self.save_form_definition(trans, None, payload)
@@ -168,9 +172,7 @@ class Forms(BaseUIController):
latest_form = form.latest_form
if trans.request.method == "GET":
fd_types = sorted(trans.app.model.FormDefinition.types.__members__.items())
ff_types = [
(t.__name__.replace("Field", ""), t.__name__) for t in trans.model.FormDefinition.supported_field_types
]
ff_types = [(t.__name__, t.__name__) for t in trans.model.FormDefinition.supported_field_types]
field_cache = []
field_inputs = [
{
@@ -188,7 +190,7 @@ class Forms(BaseUIController):
"label": "Options",
"help": "*Only for fields which allow multiple selections, provide comma-separated values.",
},
{"name": "required", "label": "Required", "type": "boolean"},
{"name": "required", "label": "Required", "type": "boolean", "value": False},
]
form_dict = {
"title": "Edit form for '%s'" % (util.sanitize_text(latest_form.name)),
@@ -198,7 +200,7 @@ class Forms(BaseUIController):
{
"name": "type",
"type": "select",
"options": [("None", "none")] + [(ft[1], ft[1]) for ft in fd_types],
"options": [(ft[1], ft[1]) for ft in fd_types],
"label": "Type",
"value": latest_form.type,
},
@@ -244,7 +246,6 @@ class Forms(BaseUIController):
field_attributes = ["name", "label", "helptext", "required", "type", "selectlist", "default"]
field_dict = {attr: payload.get(f"{prefix}{attr}") for attr in field_attributes}
field_dict["visible"] = True
field_dict["required"] = field_dict["required"] == "true"
if isinstance(field_dict["selectlist"], str):
field_dict["selectlist"] = field_dict["selectlist"].split(",")
else:
@@ -281,7 +282,7 @@ class Forms(BaseUIController):
desc=current_form["desc"],
fields=current_form["fields"],
form_definition_current=None,
form_type=current_form["type"],
type=current_form["type"],
layout=current_form["layout"],
)
# save changes to the existing form