From 892fc9896dc6b86c7abb67163fba29b2d3342e62 Mon Sep 17 00:00:00 2001
From: antonioaltamura <antonioaltamura7@gmail.com>
Date: Fri, 25 Jun 2021 16:06:52 +0200
Subject: [PATCH] variant-interpreter-browser-rd.js external setting in
 progress. mergeConfigById() added in utilsNew.js #152, opencb/iva#236

---
 src/core/utilsNew.js                          | 46 +++++++++++++++----
 .../variant-interpreter-browser-rd.js         |  5 +-
 2 files changed, 41 insertions(+), 10 deletions(-)

diff --git a/src/core/utilsNew.js b/src/core/utilsNew.js
index 5a39c564e9..fe36d8a425 100644
--- a/src/core/utilsNew.js
+++ b/src/core/utilsNew.js
@@ -396,11 +396,11 @@ export default class UtilsNew {
     }
 
     /**
-     * Hydrates `external` array with `internal` data.
+     * Hydrates `external` array of objects with `internal` one.
      *
      * @param internal
      * @param external
-     * @return {Array} hydrated array
+     * @returns {Array} hydrated array
      */
     static mergeConfigArray(internal, external) {
         // console.log("internal, external", internal, external)
@@ -422,9 +422,9 @@ export default class UtilsNew {
      * @deprecated
      * It merges external filter list with internal one. It support reorganisation of sections.
      *
-     * @param internal
-     * @param external
-     * @return {Array} hydrated array
+     * @param internal {Array}
+     * @param external {Array}
+     * @returns {Array} hydrated array
      */
     static mergeFiltersOld(internal, external) {
         // console.log("internal, external", internal, external)
@@ -432,7 +432,7 @@ export default class UtilsNew {
             // flattening the whole list of fields
             const allFields = internal.sections.flatMap(section => section);
             const sections = external.sections.map(section => {
-                //const internalSection = internal.sections.find(s => s.id === section.id);
+                // const internalSection = internal.sections.find(s => s.id === section.id);
                 // hydrates all the fields of each external section from the pool of fields.
                 const fields = UtilsNew.mergeConfigArray(allFields, section.fields);
                 return {...external, fields: fields};
@@ -445,9 +445,9 @@ 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
+     * @param internal {Array} Filter object
+     * @param external {Array} Simplified filter object
+     * @returns {Array} hydrated array
      */
     static mergeFilters(internal, external) {
         // console.log("internal, external", internal, external)
@@ -467,4 +467,32 @@ export default class UtilsNew {
         return internal;
     }
 
+    /**
+     * Hydrates `external` array with `internal` data.
+     * `external` is a plain list of IDs.
+     *
+     * @param internal {Array} Array of objects
+     * @param external {Array} List of IDs
+     * @returns {Array} hydrated array
+     */
+    static mergeConfigById(internal, external) {
+        // console.log("internal, external", internal, external)
+        if (external?.length) {
+            return external.map(id => {
+                const obj = internal.find(e => id === e.id);
+                if (!obj) {
+                    console.error(`Config Merge failed. ${id} not found in internal config`);
+                } else {
+                    return {...obj};
+                }
+            });
+        }
+        console.warn("external config not available");
+        return internal;
+    }
+
+    static mergeTable(internal, external) {
+
+    }
+
 }
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 1c03335fe7..33af13dcdc 100644
--- a/src/core/webcomponents/variant/interpretation/variant-interpreter-browser-rd.js
+++ b/src/core/webcomponents/variant/interpretation/variant-interpreter-browser-rd.js
@@ -112,7 +112,10 @@ class VariantInterpreterBrowserRd extends LitElement {
 
     settingsObserver() {
         this._config = {...this.getDefaultConfig(), ...this.config};
-        this._config.filter = UtilsNew.mergeFilters(this._config?.filter, this.settings.filters);
+        // merge filters
+        this._config.filter = UtilsNew.mergeFilters(this._config?.filter, this.settings.menu.filters);
+        // merge details tab
+        this._config.filter.detail.items = UtilsNew.mergeConfigById(this._config.filter.detail.items, this.settings.details);
         this.requestUpdate();
     }