diff --git a/src/core/utilsNew.js b/src/core/utilsNew.js
index 1d79be3436..5a39c564e9 100644
--- a/src/core/utilsNew.js
+++ b/src/core/utilsNew.js
@@ -419,13 +419,14 @@ export default class UtilsNew {
}
/**
- * It merges external filter list with internal one.
+ * @deprecated
+ * It merges external filter list with internal one. It support reorganisation of sections.
*
* @param internal
* @param external
* @return {Array} hydrated array
*/
- static mergeFilters(internal, external) {
+ static mergeFiltersOld(internal, external) {
// console.log("internal, external", internal, external)
if (external) {
// flattening the whole list of fields
@@ -440,4 +441,30 @@ export default class UtilsNew {
}
}
+ /**
+ * It merges external filter list with internal one.
+ * It doesn't support sections reorder and fields reorganisation among sections. Sections are fixed from the internal config.
+ *
+ * @param internal Filter object
+ * @param external Simplified filter object
+ * @return {Array} hydrated array
+ */
+ static mergeFilters(internal, external) {
+ // console.log("internal, external", internal, external)
+ if (external?.length) {
+ const updatedSections = internal.sections.map(section => {
+ const fields = [];
+ for (const ex of external) {
+ const internalField = section.fields.find(field => field.id === ex.id);
+ if (internalField) {
+ fields.push({...internalField, ...ex});
+ }
+ }
+ return {...section, fields: fields};
+ });
+ return {...internal, sections: updatedSections};
+ }
+ return internal;
+ }
+
}
diff --git a/src/core/webcomponents/clinical/opencga-clinical-portal.js b/src/core/webcomponents/clinical/opencga-clinical-portal.js
index 98848f3aa5..a9cae7058a 100644
--- a/src/core/webcomponents/clinical/opencga-clinical-portal.js
+++ b/src/core/webcomponents/clinical/opencga-clinical-portal.js
@@ -157,7 +157,8 @@ export default class OpencgaClinicalPortal extends LitElement {
+ .config="${this._config.reviewCases}"
+ .settings="${OpencgaClinicalReviewCasesSettings}">
diff --git a/src/core/webcomponents/clinical/opencga-clinical-review-cases.js b/src/core/webcomponents/clinical/opencga-clinical-review-cases.js
index c80654b801..7afabedc1d 100644
--- a/src/core/webcomponents/clinical/opencga-clinical-review-cases.js
+++ b/src/core/webcomponents/clinical/opencga-clinical-review-cases.js
@@ -51,6 +51,9 @@ export default class OpencgaClinicalReviewCases extends LitElement {
},
config: {
type: Object
+ },
+ settings: {
+ type: Object
}
};
}
@@ -65,11 +68,16 @@ export default class OpencgaClinicalReviewCases extends LitElement {
connectedCallback() {
super.connectedCallback();
- this.mergeSetting();
+ // settings is a prop, therefore the first render is performed without it
+ this._config = {...this.getDefaultConfig(), ...this.config};
}
updated(changedProperties) {
+ if (changedProperties.has("settings")) {
+ this.settingsObserver();
+ }
+
if (changedProperties.has("opencgaSession")) {
this.opencgaSessionObserver();
}
@@ -79,7 +87,8 @@ export default class OpencgaClinicalReviewCases extends LitElement {
}
opencgaSessionObserver() {
- this.filters = this._config.filter.examples;
+ //console.error(this._config.filter)
+ this.filters = this._config?.filter?.examples;
if (this?.opencgaSession?.study) {
this.checkProjects = true;
this.refreshFilters();
@@ -90,7 +99,7 @@ export default class OpencgaClinicalReviewCases extends LitElement {
}
propertyObserver() {
- this.mergeSetting();
+ this.settingsObserver();
if (UtilsNew.isNotUndefinedOrNull(this.query)) {
this._query = {...this.query};
@@ -98,6 +107,12 @@ export default class OpencgaClinicalReviewCases extends LitElement {
this.requestUpdate();
}
+ settingsObserver() {
+ this._config = {...this.getDefaultConfig(), ...this.config};
+ this._config.filter = UtilsNew.mergeFilters(this._config?.filter, this.settings.filters);
+ this.requestUpdate();
+ }
+
isLoggedIn() {
return !!this?.opencgaSession?.token;
}
@@ -317,11 +332,6 @@ export default class OpencgaClinicalReviewCases extends LitElement {
}
}
- mergeSetting() {
- this._config = {...this.getDefaultConfig(), ...this.config};
- this._config.filter = UtilsNew.mergeFilters(this._config.filter, OpencgaClinicalReviewCasesSettings.filter);
- }
-
// TODO better adapt config to the a dynamic view
getDefaultConfig() {
return {
diff --git a/src/core/webcomponents/commons/filters/file-quality-filter.js b/src/core/webcomponents/commons/filters/file-quality-filter.js
index e37f5d73ac..fb714b1f78 100644
--- a/src/core/webcomponents/commons/filters/file-quality-filter.js
+++ b/src/core/webcomponents/commons/filters/file-quality-filter.js
@@ -98,6 +98,7 @@ export default class FileQualityFilter extends LitElement {
if (changedProperties.has("config")) {
this._config = {...this.getDefaultConfig(), ...this.config};
+ this.requestUpdate();
}
}
@@ -172,7 +173,6 @@ export default class FileQualityFilter extends LitElement {
@change="${this.filterChange}" .checked="${this.filter === "PASS"}" style="margin-right: 5px" data-cy="filter-pass">
Include only PASS variants
-
${this._config.showDepth ? html`