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 544867a83a54bf256da267ec949984a1577a2e28..fae8371bba93f2853aad8e1805328067ad6abef9 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 @@ -919,14 +919,18 @@ var FormUtil = new function() { } return termCode; } - + this.getFieldForPropertyType = function(propertyType, timestampValue) { + return this.getFieldForPropertyType(propertyType, timestampValue, false); + } + + this.getFieldForPropertyType = function(propertyType, timestampValue, isMultiValue) { var $component = null; if (propertyType.dataType === "BOOLEAN") { $component = this._getBoolean2Field(propertyType.code, propertyType.description, propertyType.mandatory); } else if (propertyType.dataType === "CONTROLLEDVOCABULARY") { var vocabulary = profile.getVocabularyByCode(propertyType.vocabulary.code); - $component = this._getDropDownFieldForVocabulary(propertyType.code, vocabulary.terms, propertyType.description, propertyType.mandatory); + $component = this._getDropDownFieldForVocabulary(propertyType.code, vocabulary.terms, propertyType.description, propertyType.mandatory, isMultiValue); } else if (propertyType.dataType === "HYPERLINK") { $component = this._getInputField("url", propertyType.code, propertyType.description, null, propertyType.mandatory); } else if (propertyType.dataType === "INTEGER") { @@ -1040,16 +1044,27 @@ var FormUtil = new function() { this.getDropDownForTerms = function(id, terms, alt, isRequired) { return this._getDropDownFieldForVocabulary(id, terms, alt, isRequired); } - + this._getDropDownFieldForVocabulary = function(code, terms, alt, isRequired) { - var $component = $("<select>", {'placeholder' : alt, 'class' : 'form-control'}); + return this._getDropDownFieldForVocabulary(code, terms, alt, isRequired, false); + } + + this._getDropDownFieldForVocabulary = function(code, terms, alt, isRequired, isMultiValue) { + var $component = $("<select>", {'placeholder' : alt, 'class' : 'form-control'}); + if(isMultiValue) { + $component.attr('multiple', 'multiple'); + } $component.attr('id', this.prepareId(code)); if (isRequired) { $component.attr('required', ''); } - - $component.append($("<option>").attr('value', '').attr('selected', '').attr('disabled', '').text(alt)); + + var labelOption = $("<option>").attr('value', '').attr('disabled', '').text(alt); + if(!isMultiValue) { + labelOption = labelOption.attr('selected', ''); + } + $component.append(labelOption); $component.append($("<option>").attr('value', '').text('(empty)')); var $options = []; for(var i = 0; i < terms.length; i++) { 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 78ac43ea3703abdd4c04c9b7acc85445f4c8ee69..daf87f76d6f99d03b0c278100326e783bb16a0a0 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 @@ -578,13 +578,19 @@ function ExperimentFormView(experimentFormController, experimentFormModel) { if(propertyType.code === "$DEFAULT_OBJECT_TYPE") { $component = FormUtil.getSampleTypeDropdown(propertyType.code, false, null, null, IdentifierUtil.getSpaceCodeFromIdentifier(this._experimentFormModel.experiment.identifier), true); } else { - $component = FormUtil.getFieldForPropertyType(propertyType, value); + $component = FormUtil.getFieldForPropertyType(propertyType, value, propertyTypeV3.isMultiValue()); } if(this._experimentFormModel.mode === FormMode.EDIT) { if(propertyType.dataType === "BOOLEAN") { FormUtil.setFieldValue(propertyType, $component, value); } else if(propertyType.dataType === "TIMESTAMP" || propertyType.dataType === "DATE") { + } else if(propertyType.dataType === "CONTROLLEDVOCABULARY") { + if(value) { + var valueArray = value.split(','); + valueArray = valueArray.map(function(item){ return item.trim(); }); + $component.val(valueArray); + } } else { $component.val(value); } @@ -592,31 +598,66 @@ function ExperimentFormView(experimentFormController, experimentFormModel) { $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) { - return function(jsEvent, newValue) { - var propertyTypeCode = null; - propertyTypeCode = propertyType.code; - _this._experimentFormModel.isFormDirty = true; - var field = $(this); - if(propertyType.dataType === "BOOLEAN") { - _this._experimentFormModel.experiment.properties[propertyTypeCode] = FormUtil.getBooleanValue(field); - } else if (propertyType.dataType === "TIMESTAMP" || propertyType.dataType === "DATE") { - var timeValue = $($(field.children()[0]).children()[0]).val(); - var isValidValue = Util.isDateValid(timeValue, propertyType.dataType === "DATE"); - if(!isValidValue.isValid) { - Util.showUserError(isValidValue.error); - } else { - _this._experimentFormModel.experiment.properties[propertyTypeCode] = timeValue; - } - } else { - if(newValue !== undefined && newValue !== null) { - _this._experimentFormModel.experiment.properties[propertyTypeCode] = Util.getEmptyIfNull(newValue); - } else { - _this._experimentFormModel.experiment.properties[propertyTypeCode] = Util.getEmptyIfNull(field.val()); - } - } - } - } + var changeEvent = function(propertyType, isMultiValue) { + return function(jsEvent, newValue) { + var propertyTypeCode = null; + propertyTypeCode = propertyType.code; + _this._experimentFormModel.isFormDirty = true; + var field = $(this); + if(propertyType.dataType === "BOOLEAN") { + _this._experimentFormModel.experiment.properties[propertyTypeCode] = FormUtil.getBooleanValue(field); + } else if (propertyType.dataType === "TIMESTAMP" || propertyType.dataType === "DATE") { + var timeValue = $($(field.children()[0]).children()[0]).val(); + var isValidValue = Util.isDateValid(timeValue, propertyType.dataType === "DATE"); + if(!isValidValue.isValid) { + Util.showUserError(isValidValue.error); + } else { + _this._experimentFormModel.experiment.properties[propertyTypeCode] = timeValue; + } + } else { + if(newValue !== undefined && newValue !== null) { + _this._experimentFormModel.experiment.properties[propertyTypeCode] = Util.getEmptyIfNull(newValue); + } else { + var lastSelected = Util.getEmptyIfNull($('option', this).filter(':selected:last').val()); + var dataLast = field.data('last'); + if(propertyType.dataType === "CONTROLLEDVOCABULARY" && isMultiValue) { + var props = _this._experimentFormModel.experiment.properties[propertyTypeCode]; + if (field.val()) { + if(props !== undefined) { + if(props != '' && field.val().includes('')) { + _this._experimentFormModel.experiment.properties[propertyTypeCode] = ''; + field.val([]); + } else { + if(props == '' && field.val().includes('')) { + var removedEmpty = field.val().filter(x => x != ''); + _this._experimentFormModel.experiment.properties[propertyTypeCode] = removedEmpty; + field.val(removedEmpty); + } else { + _this._experimentFormModel.experiment.properties[propertyTypeCode] = Util.getEmptyIfNull(field.val()); + } + } + } else { + if(field.val().includes('')) { + _this._experimentFormModel.experiment.properties[propertyTypeCode] = ''; + field.val([]); + } else { + _this._experimentFormModel.experiment.properties[propertyTypeCode] = field.val(); + } + } + } else { + _this._experimentFormModel.experiment.properties[propertyTypeCode] = Util.getEmptyIfNull(field.val()); + } + + + + } else { + _this._experimentFormModel.experiment.properties[propertyTypeCode] = Util.getEmptyIfNull(field.val()); + } + field.data('last', field.val()); + } + } + } + } //Avoid modifications in properties managed by scripts if(propertyType.managed || propertyType.dinamic) { @@ -650,7 +691,7 @@ function ExperimentFormView(experimentFormController, experimentFormModel) { } 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);