JSON Forms improvements.
This commit is contained in:
parent
c8b5b2f132
commit
a4559f9114
@ -82,6 +82,7 @@ function JsonForm($compile, $templateCache, $mdColorPicker) {
|
|||||||
val = undefined;
|
val = undefined;
|
||||||
}
|
}
|
||||||
selectOrSet(key, scope.model, val);
|
selectOrSet(key, scope.model, val);
|
||||||
|
scope.formProps.model = scope.model;
|
||||||
},
|
},
|
||||||
onColorClick: function(event, key, val) {
|
onColorClick: function(event, key, val) {
|
||||||
scope.showColorPicker(event, val);
|
scope.showColorPicker(event, val);
|
||||||
|
|||||||
@ -27,39 +27,90 @@ class ThingsboardRcSelect extends React.Component {
|
|||||||
this.onDeselect = this.onDeselect.bind(this);
|
this.onDeselect = this.onDeselect.bind(this);
|
||||||
this.onBlur = this.onBlur.bind(this);
|
this.onBlur = this.onBlur.bind(this);
|
||||||
this.onFocus = this.onFocus.bind(this);
|
this.onFocus = this.onFocus.bind(this);
|
||||||
let emptyValue = this.props.form.schema.type === 'array'? [] : null;
|
|
||||||
this.state = {
|
this.state = {
|
||||||
currentValue: this.props.value || emptyValue,
|
currentValue: this.keyToCurrentValue(this.props.value, this.props.form.schema.type === 'array'),
|
||||||
items: this.props.form.items,
|
items: this.props.form.items,
|
||||||
focused: false
|
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) {
|
onSelect(value, option) {
|
||||||
if(this.props.form.schema.type === 'array') {
|
if(this.props.form.schema.type === 'array') {
|
||||||
let v = this.state.currentValue;
|
let v = this.state.currentValue;
|
||||||
v.push(value);
|
v.push(this.keyToCurrentValue(value.key, false));
|
||||||
this.setState({
|
this.setState({
|
||||||
currentValue: v
|
currentValue: v
|
||||||
});
|
});
|
||||||
this.props.onChangeValidate(v);
|
this.props.onChangeValidate(this.arrayValues(v));
|
||||||
} else {
|
} else {
|
||||||
this.setState({currentValue: value});
|
this.setState({currentValue: this.keyToCurrentValue(value.key, false)});
|
||||||
this.props.onChangeValidate({target: {value: value}});
|
this.props.onChangeValidate({target: {value: value.key}});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onDeselect(value, option) {
|
onDeselect(value, option) {
|
||||||
if (this.props.form.schema.type === 'array') {
|
if (this.props.form.schema.type === 'array') {
|
||||||
let v = this.state.currentValue;
|
let v = this.state.currentValue;
|
||||||
let index = v.indexOf(value);
|
let index = this.keyIndex(v, value.key);
|
||||||
if (index > -1) {
|
if (index > -1) {
|
||||||
v.splice(index, 1);
|
v.splice(index, 1);
|
||||||
}
|
}
|
||||||
this.setState({
|
this.setState({
|
||||||
currentValue: v
|
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}
|
combobox={this.props.form.combobox}
|
||||||
disabled={this.props.form.readonly}
|
disabled={this.props.form.readonly}
|
||||||
value={this.state.currentValue}
|
value={this.state.currentValue}
|
||||||
|
labelInValue={true}
|
||||||
onSelect={this.onSelect}
|
onSelect={this.onSelect}
|
||||||
onDeselect={this.onDeselect}
|
onDeselect={this.onDeselect}
|
||||||
onFocus={this.onFocus}
|
onFocus={this.onFocus}
|
||||||
|
|||||||
@ -63,11 +63,15 @@ class ThingsboardSchemaForm extends React.Component {
|
|||||||
|
|
||||||
this.onChange = this.onChange.bind(this);
|
this.onChange = this.onChange.bind(this);
|
||||||
this.onColorClick = this.onColorClick.bind(this);
|
this.onColorClick = this.onColorClick.bind(this);
|
||||||
|
this.hasConditions = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
onChange(key, val) {
|
onChange(key, val) {
|
||||||
//console.log('SchemaForm.onChange', key, val);
|
//console.log('SchemaForm.onChange', key, val);
|
||||||
this.props.onModelChange(key, val);
|
this.props.onModelChange(key, val);
|
||||||
|
if (this.hasConditions) {
|
||||||
|
this.forceUpdate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onColorClick(event, key, val) {
|
onColorClick(event, key, val) {
|
||||||
@ -81,8 +85,11 @@ class ThingsboardSchemaForm extends React.Component {
|
|||||||
console.log('Invalid field: \"' + form.key[0] + '\"!');
|
console.log('Invalid field: \"' + form.key[0] + '\"!');
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if(form.condition && eval(form.condition) === false) {
|
if(form.condition) {
|
||||||
return null;
|
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}/>
|
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