From a3a8ed661c569293739afd29d11ffa6b75ba1b22 Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Fri, 7 Jan 2022 11:36:41 +0100
Subject: [PATCH] SSDM-12025 : Table Widget : Dropdown filter for Boolean
 properties

---
 .../webapps/eln-lims/html/js/util/FormUtil.js | 34 ++++++++++++++++
 .../AdvancedSearch/AdvancedSearchView.js      | 26 +++---------
 .../views/DataGrid/ExperimentDataGridUtil.js  | 40 +++++++++----------
 .../js/views/DataGrid/SampleDataGridUtil.js   | 40 +++++++++----------
 4 files changed, 78 insertions(+), 62 deletions(-)

diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js
index 28b7244f804..cc7b9eda094 100644
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js
+++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js
@@ -2268,4 +2268,38 @@ var FormUtil = new function() {
 		}
 		return id;
 	}
+
+    this.renderBooleanGridFilter = function(params){
+        return React.createElement(window.NgUiGrid.default.SelectField, {
+            label: 'Filter',
+            variant: 'standard',
+            value: params.value,
+            emptyOption: {},
+            options: [{value: "true"}, {value: "false"}],
+            onChange: params.onChange
+        })
+    }
+
+    this.renderVocabularyGridFilter = function(params, vocabulary){
+        var options = []
+
+        if(vocabulary && vocabulary.terms){
+            vocabulary.terms.forEach(function(term){
+                options.push({
+                    label: term.label,
+                    value: term.code
+                })
+            })
+        }
+
+        return React.createElement(window.NgUiGrid.default.SelectField, {
+            label: 'Filter',
+            variant: 'standard',
+            value: params.value,
+            emptyOption: {},
+            options: options,
+            onChange: params.onChange
+        })
+    }
+
 }
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchView.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchView.js
index d7316343b2a..a71d421f464 100644
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchView.js
+++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchView.js
@@ -1086,28 +1086,14 @@ function AdvancedSearchView(advancedSearchController, advancedSearchModel) {
                     var propertyType = profile.getPropertyType(propertyCode)
                     var renderFilter = null
 
-                    if(propertyType.dataType === "CONTROLLEDVOCABULARY"){
+                    if(propertyType.dataType === "BOOLEAN"){
+                        renderFilter = function(params){
+                            return FormUtil.renderBooleanGridFilter(params);
+                        }
+                    } else if(propertyType.dataType === "CONTROLLEDVOCABULARY"){
                         renderFilter = (function(propertyType){
                             return function(params){
-                                var options = []
-                                        
-                                if(propertyType.vocabulary && propertyType.vocabulary.terms){
-                                    propertyType.vocabulary.terms.forEach(function(term){
-                                        options.push({
-                                            label: term.code,
-                                            value: term.code
-                                        })
-                                    })
-                                }
-
-                                return React.createElement(window.NgUiGrid.default.SelectField, {
-                                    label: 'Filter',
-                                    variant: 'standard',
-                                    value: params.value,
-                                    emptyOption: {},
-                                    options: options,
-                                    onChange: params.onChange
-                                })
+                                return FormUtil.renderVocabularyGridFilter(params, propertyType.vocabulary);
                             }
                         })(propertyType)
                     }
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/ExperimentDataGridUtil.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/ExperimentDataGridUtil.js
index aae527e3b0b..256187f249b 100644
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/ExperimentDataGridUtil.js
+++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/ExperimentDataGridUtil.js
@@ -46,7 +46,21 @@ var ExperimentDataGridUtil = new function() {
 				continue;
 			}
 			var propertyType = profile.getPropertyType(propertyCode);
-			if(propertyType.dataType === "CONTROLLEDVOCABULARY") {
+			if(propertyType.dataType === "BOOLEAN"){
+				var getBooleanColumn = function(propertyType) {
+					return {
+						label : propertyCodesDisplayNames[idx],
+						property : propertyCodes[idx],
+						isExportable: true,
+						filterable : true,
+						sortable : true,
+						renderFilter : function(params) {
+							return FormUtil.renderBooleanGridFilter(params);
+						}
+					};
+				}
+				propertyColumnsToSort.push(getBooleanColumn(propertyType));
+			} else if(propertyType.dataType === "CONTROLLEDVOCABULARY") {
 				var getVocabularyColumn = function(propertyType) {
 					return function() {
 						return {
@@ -57,27 +71,9 @@ var ExperimentDataGridUtil = new function() {
 							render : function(data) {
 								return FormUtil.getVocabularyLabelForTermCode(propertyType, data[propertyType.code]);
 							},
-                            renderFilter: function(params){
-                                var options = []
-                                
-                                if(propertyType.vocabulary && propertyType.vocabulary.terms){
-                                    propertyType.vocabulary.terms.forEach(function(term){
-                                        options.push({
-                                            label: term.label,
-                                            value: term.code
-                                        })
-                                    })
-                                }
-
-                                return React.createElement(window.NgUiGrid.default.SelectField, {
-                                    label: 'Filter',
-                                    variant: 'standard',
-                                    value: params.value,
-                                    emptyOption: {},
-                                    options: options,
-                                    onChange: params.onChange
-                                })
-                            },
+							renderFilter: function(params){
+								return FormUtil.renderVocabularyGridFilter(params, propertyType.vocabulary);
+							},
 							filter : function(data, filter) {
 								return data[propertyType.code] === filter
 							},
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/SampleDataGridUtil.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/SampleDataGridUtil.js
index 990a5c58df9..257952d5c23 100644
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/SampleDataGridUtil.js
+++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/SampleDataGridUtil.js
@@ -133,7 +133,25 @@ var SampleDataGridUtil = new function() {
 					continue;
 				}
 				var propertyType = profile.getPropertyType(propertyCode);
-				if(propertyType.dataType === "CONTROLLEDVOCABULARY") {
+
+				if(propertyType.dataType === "BOOLEAN"){
+					var getBooleanColumn = function(propertyType) {
+						return {
+							label : propertyType.label,
+							property : propertyType.code,
+							isExportable: true,
+							filterable : true,
+							sortable : true,
+							metadata: {
+								dataType: propertyType.dataType
+							},
+							renderFilter : function(params) {
+								return FormUtil.renderBooleanGridFilter(params);
+							}
+						};
+					}
+					propertyColumnsToSort.push(getBooleanColumn(propertyType));
+				} else if(propertyType.dataType === "CONTROLLEDVOCABULARY") {
 					var getVocabularyColumn = function(propertyType) {
 						return function() {
 							return {
@@ -149,25 +167,7 @@ var SampleDataGridUtil = new function() {
 									return FormUtil.getVocabularyLabelForTermCode(propertyType, data[propertyType.code]);
 								},
 								renderFilter: function(params){
-                                    var options = []
-                                    
-                                    if(propertyType.vocabulary && propertyType.vocabulary.terms){
-                                        propertyType.vocabulary.terms.forEach(function(term){
-                                            options.push({
-                                                label: term.label,
-                                                value: term.code
-                                            })
-                                        })
-                                    }
-
-                                    return React.createElement(window.NgUiGrid.default.SelectField, {
-                                        label: 'Filter',
-                                        variant: 'standard',
-                                        value: params.value,
-                                        emptyOption: {},
-                                        options: options,
-                                        onChange: params.onChange
-                                    })
+									return FormUtil.renderVocabularyGridFilter(params, propertyType.vocabulary);
 								},
 								filter : function(data, filter) {
 									var value = FormUtil.getVocabularyLabelForTermCode(propertyType, data[propertyType.code]);
-- 
GitLab