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