JSON Forms improvements.
This commit is contained in:
parent
c8b5b2f132
commit
a4559f9114
@ -82,6 +82,7 @@ function JsonForm($compile, $templateCache, $mdColorPicker) {
|
||||
val = undefined;
|
||||
}
|
||||
selectOrSet(key, scope.model, val);
|
||||
scope.formProps.model = scope.model;
|
||||
},
|
||||
onColorClick: function(event, key, val) {
|
||||
scope.showColorPicker(event, val);
|
||||
|
||||
@ -27,39 +27,90 @@ class ThingsboardRcSelect extends React.Component {
|
||||
this.onDeselect = this.onDeselect.bind(this);
|
||||
this.onBlur = this.onBlur.bind(this);
|
||||
this.onFocus = this.onFocus.bind(this);
|
||||
let emptyValue = this.props.form.schema.type === 'array'? [] : null;
|
||||
this.state = {
|
||||
currentValue: this.props.value || emptyValue,
|
||||
currentValue: this.keyToCurrentValue(this.props.value, this.props.form.schema.type === 'array'),
|
||||
items: this.props.form.items,
|
||||
focused: false
|
||||
};
|
||||
}
|
||||
|
||||
keyToCurrentValue(key, isArray) {
|
||||
var currentValue = isArray ? [] : null;
|
||||
if (isArray) {
|
||||
var keys = key;
|
||||
if (keys) {
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
currentValue.push({key: keys[i], label: this.labelFromKey(keys[i])});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
currentValue = {key: key, label: this.labelFromKey(key)};
|
||||
}
|
||||
return currentValue;
|
||||
}
|
||||
|
||||
labelFromKey(key) {
|
||||
let label = key || '';
|
||||
if (key) {
|
||||
for (var i=0;i<this.props.form.items.length;i++) {
|
||||
var item = this.props.form.items[i];
|
||||
if (item.value === key) {
|
||||
label = item.label;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return label;
|
||||
}
|
||||
|
||||
arrayValues(items) {
|
||||
var v = [];
|
||||
if (items) {
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
v.push(items[i].key);
|
||||
}
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
keyIndex(values, key) {
|
||||
var index = -1;
|
||||
if (values) {
|
||||
for (var i = 0; i < values.length; i++) {
|
||||
if (values[i].key === key) {
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
onSelect(value, option) {
|
||||
if(this.props.form.schema.type === 'array') {
|
||||
let v = this.state.currentValue;
|
||||
v.push(value);
|
||||
v.push(this.keyToCurrentValue(value.key, false));
|
||||
this.setState({
|
||||
currentValue: v
|
||||
});
|
||||
this.props.onChangeValidate(v);
|
||||
this.props.onChangeValidate(this.arrayValues(v));
|
||||
} else {
|
||||
this.setState({currentValue: value});
|
||||
this.props.onChangeValidate({target: {value: value}});
|
||||
this.setState({currentValue: this.keyToCurrentValue(value.key, false)});
|
||||
this.props.onChangeValidate({target: {value: value.key}});
|
||||
}
|
||||
}
|
||||
|
||||
onDeselect(value, option) {
|
||||
if (this.props.form.schema.type === 'array') {
|
||||
let v = this.state.currentValue;
|
||||
let index = v.indexOf(value);
|
||||
let index = this.keyIndex(v, value.key);
|
||||
if (index > -1) {
|
||||
v.splice(index, 1);
|
||||
}
|
||||
this.setState({
|
||||
currentValue: v
|
||||
});
|
||||
this.props.onChangeValidate(v);
|
||||
this.props.onChangeValidate(this.arrayValues(v));
|
||||
}
|
||||
}
|
||||
|
||||
@ -105,6 +156,7 @@ class ThingsboardRcSelect extends React.Component {
|
||||
combobox={this.props.form.combobox}
|
||||
disabled={this.props.form.readonly}
|
||||
value={this.state.currentValue}
|
||||
labelInValue={true}
|
||||
onSelect={this.onSelect}
|
||||
onDeselect={this.onDeselect}
|
||||
onFocus={this.onFocus}
|
||||
|
||||
@ -63,11 +63,15 @@ class ThingsboardSchemaForm extends React.Component {
|
||||
|
||||
this.onChange = this.onChange.bind(this);
|
||||
this.onColorClick = this.onColorClick.bind(this);
|
||||
this.hasConditions = false;
|
||||
}
|
||||
|
||||
onChange(key, val) {
|
||||
//console.log('SchemaForm.onChange', key, val);
|
||||
this.props.onModelChange(key, val);
|
||||
if (this.hasConditions) {
|
||||
this.forceUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
onColorClick(event, key, val) {
|
||||
@ -81,9 +85,12 @@ class ThingsboardSchemaForm extends React.Component {
|
||||
console.log('Invalid field: \"' + form.key[0] + '\"!');
|
||||
return null;
|
||||
}
|
||||
if(form.condition && eval(form.condition) === false) {
|
||||
if(form.condition) {
|
||||
this.hasConditions = true;
|
||||
if (eval(form.condition) === false) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return <Field model={model} form={form} key={index} onChange={onChange} onColorClick={onColorClick} mapper={mapper} builder={this.builder}/>
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user