Allow to store and retrieve combobox multivalues with commas

This commit is contained in:
George Kalampokis 2021-06-14 14:21:27 +03:00
parent add23dab2f
commit dcf88479bd
2 changed files with 27 additions and 3 deletions

View File

@ -17,6 +17,7 @@ import org.json.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.Collection;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -239,6 +240,18 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
logger.error(e.getMessage(), e); logger.error(e.getMessage(), e);
} }
} else if (this.value instanceof Collection) {
Collection valueCollection = (Collection) this.value;
StringBuilder valueBuilder = new StringBuilder();
valueBuilder.append("[");
for (int i = 0; i < valueCollection.size(); i++) {
valueBuilder.append(parseString(valueCollection.stream().toArray()[i]));
if (i < valueCollection.size() - 1) {
valueBuilder.append(", ");
}
}
valueBuilder.append("]");
fieldValues.put(this.id, valueBuilder.toString());
} else { } else {
fieldValues.put(this.id, this.value.toString()); fieldValues.put(this.id, this.value.toString());
} }
@ -251,4 +264,13 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin
public void toMap(Map<String, Object> fieldValues, int index) { public void toMap(Map<String, Object> fieldValues, int index) {
fieldValues.put(this.id, this.value); fieldValues.put(this.id, this.value);
} }
private String parseString(Object value) {
if (value instanceof String) {
if (((String)value).contains(",")) {
return "\"" + value + "\"";
}
}
return value.toString();
}
} }

View File

@ -106,7 +106,9 @@ export class FormFieldComponent extends BaseComponent implements OnInit {
if (this.form.get('data').value.multiList) { if (this.form.get('data').value.multiList) {
const originalValue = <string>this.form.get('value').value; const originalValue = <string>this.form.get('value').value;
if (originalValue !== null && typeof originalValue === 'string') { if (originalValue !== null && typeof originalValue === 'string') {
let values = (<string>this.form.get('value').value).slice(1, -1).split(', '); let values = (<string>this.form.get('value').value).slice(1, -1).split(', ').filter((value) => !value.includes('"'));
let specialValue = (<string>this.form.get('value').value).split('"').filter((value) => !value.startsWith('[') && !value.endsWith(']') && !values.includes(value));
specialValue.forEach(value => values.push(value));
if (!originalValue.startsWith('[') && !originalValue.endsWith(']')) { if (!originalValue.startsWith('[') && !originalValue.endsWith(']')) {
values = undefined; values = undefined;
values = [originalValue]; values = [originalValue];
@ -385,8 +387,8 @@ export class FormFieldComponent extends BaseComponent implements OnInit {
parseTags() { parseTags() {
try{ try{
let stringValue = this.form.get('value').value; let stringValue = this.form.get('value').value;
if (typeof stringValue === 'string') { if (typeof stringValue === 'string') {
stringValue = (<string>stringValue).replace(new RegExp('{', 'g'), '{"').replace(new RegExp('=', 'g'), '":"').replace(new RegExp(',', 'g'), '",').replace(new RegExp(', ', 'g'), ', "').replace(new RegExp('}', 'g'), '"}'); stringValue = (<string>stringValue).replace(new RegExp('{', 'g'), '{"').replace(new RegExp('=', 'g'), '":"').replace(new RegExp(',', 'g'), '",').replace(new RegExp(', ', 'g'), ', "').replace(new RegExp('}', 'g'), '"}');