diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormView.js index 671e3c4f8097b39e99bae978848b1fbfd716fed8..309c6bd08b6cce0c3d761eff61d540557d4eb55b 100644 --- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormView.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormView.js @@ -801,7 +801,7 @@ function DataSetFormView(dataSetFormController, dataSetFormModel) { $fieldset.append($controlGroup); } } else if(propertyType.dataType === "SAMPLE") { - var $component = new SampleField(false, '', false, value, true); + var $component = new SampleField(false, '', false, value, true, propertyTypeV3.isMultiValue()); $controlGroup = FormUtil.getFieldForComponentWithLabel($component, propertyType.label); $fieldset.append($controlGroup); } else { @@ -820,10 +820,10 @@ function DataSetFormView(dataSetFormController, dataSetFormModel) { $controlGroup.append($controlLabel); $controlGroup.append($controls); - var $component = FormUtil.getFieldForPropertyType(propertyType, value); + var $component = FormUtil.getFieldForPropertyType(propertyType, value, propertyTypeV3.isMultiValue()); //Update model - var changeEvent = function(propertyType) { + var changeEvent = function(propertyType, isMultiValue) { return function(jsEvent, newValue) { var propertyTypeCode = null; propertyTypeCode = propertyType.code; @@ -843,7 +843,39 @@ function DataSetFormView(dataSetFormController, dataSetFormModel) { if(newValue !== undefined && newValue !== null) { _this._setDataSetProperty(propertyTypeCode, Util.getEmptyIfNull(newValue)); } else { - _this._setDataSetProperty(propertyTypeCode, Util.getEmptyIfNull(field.val())); + var lastSelected = Util.getEmptyIfNull($('option', this).filter(':selected:last').val()); + var dataLast = field.data('last'); + if(propertyType.dataType === "CONTROLLEDVOCABULARY" && isMultiValue) { + var props = _this._getDataSetProperty(propertyTypeCode); + if (field.val()) { + if(props !== undefined) { + if(props != '' && field.val().includes('')) { + _this._setDataSetProperty(propertyTypeCode, ''); + field.val([]); + } else { + if(props == '' && field.val().includes('')) { + var removedEmpty = field.val().filter(x => x != ''); + _this._setDataSetProperty(propertyTypeCode, removedEmpty); + field.val(removedEmpty); + } else { + _this._setDataSetProperty(propertyTypeCode, Util.getEmptyIfNull(field.val())); + } + } + } else { + if(field.val().includes('')) { + _this._setDataSetProperty(propertyTypeCode, ''); + field.val([]); + } else { + _this._setDataSetProperty(propertyTypeCode, field.val()); + } + } + } else { + _this._setDataSetProperty(propertyTypeCode, Util.getEmptyIfNull(field.val())); + } + } else { + _this._setDataSetProperty(propertyTypeCode, Util.getEmptyIfNull(field.val())); + } + field.data('last', field.val()); } } } @@ -854,7 +886,18 @@ function DataSetFormView(dataSetFormController, dataSetFormModel) { if(propertyType.dataType === "BOOLEAN") { FormUtil.setFieldValue(propertyType, $component, value); } else if(propertyType.dataType === "TIMESTAMP" || propertyType.dataType === "DATE") { - } else { + } else if(propertyTypeV3.isMultiValue()) { + if(value) { + var valueArray; + if(Array.isArray(value)) { + valueArray = value; + } else { + valueArray = value.split(','); + valueArray = valueArray.map(function(item){ return item.trim(); }); + } + $component.val(valueArray); + } + } else { $component.val(value); } } else { @@ -893,7 +936,7 @@ function DataSetFormView(dataSetFormController, dataSetFormModel) { } else if(propertyType.dataType === "TIMESTAMP" || propertyType.dataType === "DATE") { $component.on("dp.change", changeEvent(propertyType)); } else { - $component.change(changeEvent(propertyType)); + $component.change(changeEvent(propertyType, propertyTypeV3.isMultiValue())); } $controls.append($component); @@ -1019,6 +1062,13 @@ function DataSetFormView(dataSetFormController, dataSetFormModel) { } } + this._getDataSetProperty = function(key) { + if(!this._dataSetFormModel.dataSetV3) { + this._dataSetFormModel.dataSetV3 = { properties : {} }; + } + this._dataSetFormModel.dataSetV3.properties[key]; + } + this._setDataSetProperty = function(key, val) { if(!this._dataSetFormModel.dataSetV3) { this._dataSetFormModel.dataSetV3 = { properties : {} }; diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js index e623ef6f987caf7faf7fe9d04a99cd873e001a82..7407f66fc52e6c6e186f6982991e9da6acb48222 100644 --- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js @@ -741,7 +741,6 @@ function SampleFormView(sampleFormController, sampleFormModel) { continue; } } else { - // var $component = FormUtil.getFieldForPropertyType(propertyType, value); var $component = FormUtil.getFieldForPropertyType(propertyType, value, propertyTypeV3.isMultiValue()); //Update values if is into edit mode @@ -787,7 +786,6 @@ function SampleFormView(sampleFormController, sampleFormModel) { if(newValue !== undefined && newValue !== null) { _this._sampleFormModel.sample.properties[propertyTypeCode] = Util.getEmptyIfNull(newValue); } else { - // _this._sampleFormModel.sample.properties[propertyTypeCode] = Util.getEmptyIfNull(field.val()); var lastSelected = Util.getEmptyIfNull($('option', this).filter(':selected:last').val()); var dataLast = field.data('last'); if(propertyType.dataType === "CONTROLLEDVOCABULARY" && isMultiValue) {