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`
diff --git a/src/core/webcomponents/sample/sample-variant-stats-browser.js b/src/core/webcomponents/sample/sample-variant-stats-browser.js index f1f07339ef..f965f7afcc 100644 --- a/src/core/webcomponents/sample/sample-variant-stats-browser.js +++ b/src/core/webcomponents/sample/sample-variant-stats-browser.js @@ -97,9 +97,16 @@ export default class SampleVariantStatsBrowser extends LitElement { } sampleObserver() { - if (this.sample?.qualityControl?.variantMetrics.variantStats?.length) { + console.log("this.sample", this.sample) + if (this.sample?.qualityControl?.variantMetrics?.variantStats?.length) { + + console.error("old data model") this.selectVariantStats("ALL", this.sample.qualityControl.variantMetrics.variantStats[0]); } + if (this.sample?.qualityControl?.variant?.variantStats?.length) { + console.error("new data model") + this.selectVariantStats("ALL", this.sample.qualityControl.variant.variantStats[0]); + } } sampleIdObserver() { @@ -438,9 +445,7 @@ export default class SampleVariantStatsBrowser extends LitElement { Load
diff --git a/src/core/webcomponents/variant/interpretation/variant-interpreter-browser-rd.js b/src/core/webcomponents/variant/interpretation/variant-interpreter-browser-rd.js index 10b5607434..1c03335fe7 100644 --- a/src/core/webcomponents/variant/interpretation/variant-interpreter-browser-rd.js +++ b/src/core/webcomponents/variant/interpretation/variant-interpreter-browser-rd.js @@ -59,6 +59,9 @@ class VariantInterpreterBrowserRd extends LitElement { }, config: { type: Object + }, + settings: { + type: Object } }; } @@ -90,6 +93,9 @@ class VariantInterpreterBrowserRd extends LitElement { } updated(changedProperties) { + if (changedProperties.has("settings") || changedProperties.has("config")) { + this.settingsObserver(); + } if (changedProperties.has("opencgaSession")) { this.clinicalAnalysisManager = new ClinicalAnalysisManager(this.clinicalAnalysis, this.opencgaSession); } @@ -102,9 +108,12 @@ class VariantInterpreterBrowserRd extends LitElement { if (changedProperties.has("query")) { this.queryObserver(); } - if (changedProperties.has("config")) { - this._config = {...this.getDefaultConfig(), ...this.config}; - } + } + + settingsObserver() { + this._config = {...this.getDefaultConfig(), ...this.config}; + this._config.filter = UtilsNew.mergeFilters(this._config?.filter, this.settings.filters); + this.requestUpdate(); } queryObserver() { @@ -121,6 +130,8 @@ class VariantInterpreterBrowserRd extends LitElement { } clinicalAnalysisObserver() { + console.log("clinicalAnalysisObserver") + this.clinicalAnalysisManager = new ClinicalAnalysisManager(this.clinicalAnalysis, this.opencgaSession); // If sample is not defined and proband exists then we set the default samples @@ -180,7 +191,7 @@ class VariantInterpreterBrowserRd extends LitElement { this.savedVariants = this.clinicalAnalysis?.interpretation?.primaryFindings?.map(v => v.id); } - this._config = {...this.getDefaultConfig(), ...this.config}; + //this._config = {...this.getDefaultConfig(), ...this.config}; this.requestUpdate(); } @@ -339,7 +350,7 @@ class VariantInterpreterBrowserRd extends LitElement { id: "file-quality", title: "Quality Filters", tooltip: "VCF file based FILTER and QUAL filters", - showDepth: application.appConfig === "opencb" + // showDepth: false }, { id: "cohort", diff --git a/src/core/webcomponents/variant/interpretation/variant-interpreter-browser.js b/src/core/webcomponents/variant/interpretation/variant-interpreter-browser.js index 12c7a64708..5f2d48a0ad 100644 --- a/src/core/webcomponents/variant/interpretation/variant-interpreter-browser.js +++ b/src/core/webcomponents/variant/interpretation/variant-interpreter-browser.js @@ -190,6 +190,7 @@ class VariantInterpreterBrowser extends LitElement { .clinicalAnalysis="${this.clinicalAnalysis}" .query="${this.query}" .cellbaseClient="${this.cellbaseClient}" + .settings="${variantInterpreterBrowserRdSettings}" @clinicalAnalysisUpdate="${this.onClinicalAnalysisUpdate}" @samplechange="${this.onSampleChange}"> diff --git a/src/core/webcomponents/variant/opencga-variant-filter.js b/src/core/webcomponents/variant/opencga-variant-filter.js index f8ea8d4594..947376276c 100644 --- a/src/core/webcomponents/variant/opencga-variant-filter.js +++ b/src/core/webcomponents/variant/opencga-variant-filter.js @@ -307,7 +307,9 @@ export default class OpencgaVariantFilter extends LitElement { const id = section.title.replace(/ /g, ""); const collapsed = section.collapsed ? "" : "in"; - return html` + // whole section is hidden if there are no filters to show + if (section?.fields?.length) { + return html`
- ${section.fields && section.fields.length && section.fields.map(field => html` - ${this._isFilterVisible(field) ? - this._createSubSection(field) : - null - }` - )} + ${section.fields.map(field => html`${this._isFilterVisible(field) ? this._createSubSection(field) : ""}`)}
`; + } } _createSubSection(subsection) {