diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js index 6e4f50e345e09e7c2cff4c1c616b89382d88fa1c..d662e829df234724be5d2a5adea5f063223216b3 100644 --- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js @@ -872,6 +872,9 @@ var FormUtil = new function() { } if(text) { + if(typeof(text) != 'string') { // Array case + text = text.join(", "); + } text = text.replace(/(?:\r\n|\r|\n)/g, '\n'); //Normalise carriage returns } diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js index 8e21aeedef73f8593a4a2fa79e84d37d9b80dc17..1778f402aa8de553dd3bffc398e091d40a377283 100644 --- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js @@ -565,7 +565,7 @@ function ExperimentFormView(experimentFormController, experimentFormModel) { $controlGroup = FormUtil.getFieldForComponentWithLabel($component, propertyType.label); } } 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); } else { $controlGroup = FormUtil.createPropertyField(propertyType, value); @@ -587,10 +587,15 @@ function ExperimentFormView(experimentFormController, experimentFormModel) { } else if(propertyType.dataType === "TIMESTAMP" || propertyType.dataType === "DATE") { } else if(propertyTypeV3.isMultiValue()) { if(value) { - var valueArray = value.split(','); - valueArray = valueArray.map(function(item){ return item.trim(); }); - $component.val(valueArray); - } + 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); } 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 fa2e86a0b1074b017b299c28cd15d8e4e672adac..e623ef6f987caf7faf7fe9d04a99cd873e001a82 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 @@ -732,7 +732,7 @@ function SampleFormView(sampleFormController, sampleFormModel) { $controlGroup = FormUtil.getFieldForComponentWithLabel($component, propertyType.label, null, null, semanticAnnotations); } } 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, null, null, semanticAnnotations); } else { // The base case paints the property value as a label $controlGroup = FormUtil.createPropertyField(propertyType, value, semanticAnnotations); @@ -741,13 +741,25 @@ function SampleFormView(sampleFormController, sampleFormModel) { continue; } } else { - var $component = FormUtil.getFieldForPropertyType(propertyType, value); + // var $component = FormUtil.getFieldForPropertyType(propertyType, value); + var $component = FormUtil.getFieldForPropertyType(propertyType, value, propertyTypeV3.isMultiValue()); //Update values if is into edit mode if(this._sampleFormModel.mode === FormMode.EDIT || loadFromTemplate) { if(propertyType.dataType === "BOOLEAN") { FormUtil.setFieldValue(propertyType, $component, value); } else if(propertyType.dataType === "TIMESTAMP" || propertyType.dataType === "DATE") { + } 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); } @@ -755,7 +767,7 @@ function SampleFormView(sampleFormController, sampleFormModel) { $component.val(""); //HACK-FIX: Not all browsers show the placeholder in Bootstrap 3 if you don't set an empty value. } - var changeEvent = function(propertyType) { + var changeEvent = function(propertyType, isMultiValue) { return function(jsEvent, newValue) { var propertyTypeCode = null; propertyTypeCode = propertyType.code; @@ -775,7 +787,40 @@ 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()); + // _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) { + var props = _this._sampleFormModel.sample.properties[propertyTypeCode]; + if (field.val()) { + if(props !== undefined) { + if(props != '' && field.val().includes('')) { + _this._sampleFormModel.sample.properties[propertyTypeCode] = ''; + field.val([]); + } else { + if(props == '' && field.val().includes('')) { + var removedEmpty = field.val().filter(x => x != ''); + _this._sampleFormModel.sample.properties[propertyTypeCode] = removedEmpty; + field.val(removedEmpty); + } else { + _this._sampleFormModel.sample.properties[propertyTypeCode] = Util.getEmptyIfNull(field.val()); + } + } + } else { + if(field.val().includes('')) { + _this._sampleFormModel.sample.properties[propertyTypeCode] = ''; + field.val([]); + } else { + _this._sampleFormModel.sample.properties[propertyTypeCode] = field.val(); + } + } + } else { + _this._sampleFormModel.sample.properties[propertyTypeCode] = Util.getEmptyIfNull(field.val()); + } + } else { + _this._sampleFormModel.sample.properties[propertyTypeCode] = Util.getEmptyIfNull(field.val()); + } + field.data('last', field.val()); } } } @@ -813,7 +858,7 @@ function SampleFormView(sampleFormController, sampleFormModel) { } 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())); } $controlGroup = FormUtil.getFieldForComponentWithLabel($component, propertyType.label, null, null, semanticAnnotations); diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/SampleField.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/SampleField.js index c2d7d1d3c175ab200fcf06e680a4a16888de96da..90731cf706c84104782a5e8aed25d36de898cb83 100644 --- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/SampleField.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/SampleField.js @@ -29,11 +29,23 @@ function SampleField(isRequired, var initialised = false; var storedParams = null; var changeListener = null; - var initialValue = initialValue ? initialValue.split(',').map(x => x.trim()) : initialValue; var isSingleValue = true; if (isMultiValue) { isSingleValue = false; } + this.getInitialValue = function(value) { + if(value) { + if(Array.isArray(value)) { + return value; + } else { + return initialValue.split(',').map(x => x.trim()); + } + } else { + return value; + } + } + var initialValue = this.getInitialValue(initialValue); + // // Form API