From 79a597b46fe8847a70926473b7faa965f95e334d Mon Sep 17 00:00:00 2001
From: Maiykol <hartung.michael@outlook.com>
Date: Wed, 23 Jun 2021 15:38:33 +0200
Subject: [PATCH] add group name to groupName

---
 .../info-tile/info-tile.component.html        |  6 +--
 src/app/config.ts                             | 37 +++++++-------
 src/app/interfaces.ts                         |  3 ++
 src/app/main-network.ts                       |  8 +---
 .../explorer-page/explorer-page.component.ts  | 48 +++++++++++++++----
 src/index.html                                |  7 ++-
 6 files changed, 68 insertions(+), 41 deletions(-)

diff --git a/src/app/components/info-tile/info-tile.component.html b/src/app/components/info-tile/info-tile.component.html
index 43201efb..50881477 100644
--- a/src/app/components/info-tile/info-tile.component.html
+++ b/src/app/components/info-tile/info-tile.component.html
@@ -1,6 +1,6 @@
 <div *ngIf="wrapper">
   <div>
-    <p *ngIf="wrapper.data.label" [ngClass]="{'text-normal':smallStyle}">
+    <p *ngIf="wrapper.data.detailShowLabel && wrapper.data.label" [ngClass]="{'text-normal':smallStyle}">
       <b><span>Label:</span></b>
       <span class="is-capitalized"> {{ wrapper.data.label }}</span>
     </p>
@@ -18,9 +18,9 @@
         <span class="is-capitalized"> {{ wrapper.data.drugId }}</span>
       </a>
     </p>
-    <p *ngIf="wrapper.data.group" [ngClass]="{'text-normal':smallStyle}">
+    <p *ngIf="wrapper.data.groupName" [ngClass]="{'text-normal':smallStyle}">
       <b><span>Group:</span></b>
-      <span class="is-capitalized"> {{ wrapper.data.group }}</span>
+      <span class="is-capitalized"> {{ wrapper.data.groupName }}</span>
     </p>
     <p *ngIf="wrapper.data.uniprotAc" [ngClass]="{'text-normal':smallStyle}">
       <b><span>Access:</span></b>
diff --git a/src/app/config.ts b/src/app/config.ts
index b284320c..ef3e4405 100644
--- a/src/app/config.ts
+++ b/src/app/config.ts
@@ -1,21 +1,14 @@
-// export interface NodeGroup {
-//   fill: string;
-// }
-//
-// export interface EdgeGroup {
-//   color: string;
-// }
-
 export interface NodeGroup {
-  name: string;
+  groupName: string;
   color: string;
   shape: 'circle' | 'triangle' | 'star' | 'square' | 'image';
-  type: 'gene' | 'protein' | 'drug';
+  type?: string;
   image?: string;
+  detailShowLabel?: boolean;
 }
 
 export interface EdgeGroup {
-  name: string;
+  groupName: string;
   color: string;
   // see https://visjs.github.io/vis-network/docs/network/edges.html
   dashes?: false | Array<number>; 
@@ -54,6 +47,10 @@ export interface IConfig {
   identifier?: Identifier;
 }
 
+/**
+ * Provide default values
+ */
+
 export const defaultConfig: IConfig = {
   legendUrl: '', // 'https://exbio.wzw.tum.de/covex/assets/leg1.png' show legend image if set, otherwise default legend
   legendClass: 'legend',
@@ -77,19 +74,21 @@ export const defaultConfig: IConfig = {
   interactionProteinProtein: 'STRING',
   nodeGroups: {
     default: {
-      name: 'Default Group',
+      // this default group is used for default node group values
+      groupName: 'Default Node Group',
       color: 'yellow',
       shape: 'triangle',
       type: 'protein',
+      detailShowLabel: false,
     },
-    protein: {
-      name: 'Resulting Proteins',
+    default_protein: {
+      groupName: 'Resulting Proteins',
       color: 'red',
       shape: 'circle',
       type: 'protein',
     },
-    drug: {
-      name: 'Possible Drugs',
+    default_drug: {
+      groupName: 'Possible Drugs',
       color: 'green',
       shape: 'star',
       type: 'drug',
@@ -97,8 +96,10 @@ export const defaultConfig: IConfig = {
   },
   edgeGroups: {
     default: {
-      name: 'Edgy edges',
-      color: 'black'
+      // this default group is used for default edge group values
+      groupName: 'Default Edge Group',
+      color: 'black',
+      dashes: false
     }
   },
 };
diff --git a/src/app/interfaces.ts b/src/app/interfaces.ts
index 07763545..bed1808d 100644
--- a/src/app/interfaces.ts
+++ b/src/app/interfaces.ts
@@ -8,6 +8,7 @@ export interface Node {
   uniprotAc?: string;
   ensg?: Array<string>;
   group?: string;
+  groupName?: string;
   color?: string;
   shape?: string;
   interactions?: Node[];
@@ -172,6 +173,7 @@ export interface Wrapper {
     color?: string;
     interactions?: any;
     group?: string;
+    groupName?: string;
     uniprotAc?: string;
     expressionLevel?: number;
     x?: number;
@@ -181,6 +183,7 @@ export interface Wrapper {
     inTrial?: boolean;
     inLiterature?: boolean;
     trialLinks?: string[];
+    detailShowLabel?: boolean;
   };
 }
 
diff --git a/src/app/main-network.ts b/src/app/main-network.ts
index 869a372e..d6f1a124 100644
--- a/src/app/main-network.ts
+++ b/src/app/main-network.ts
@@ -53,13 +53,6 @@ export class ProteinNetwork {
     }
     let node = JSON.parse(JSON.stringify(config.nodeGroups[group]));
 
-    // remove group name
-    delete node.name
-
-    // node.name is actually group name since it comes from the group configuration
-    // this property is already stored in the wrapper object
-    // instead, node.name should reflect the actual node name
-    // "node.name = customNode.name";
     // update the node with custom node properties, including values fetched from backend
     node = {
       ... node,
@@ -67,6 +60,7 @@ export class ProteinNetwork {
     }
 
     // label is only used for network visualization
+    console.log(customNode)
     node.label = customNode.label ? customNode.label : customNode.id;
 
     if (node.image) {
diff --git a/src/app/pages/explorer-page/explorer-page.component.ts b/src/app/pages/explorer-page/explorer-page.component.ts
index 5cba20c5..0cb43607 100644
--- a/src/app/pages/explorer-page/explorer-page.component.ts
+++ b/src/app/pages/explorer-page/explorer-page.component.ts
@@ -13,7 +13,6 @@ import {
   Tissue
 } from '../../interfaces';
 import {ProteinNetwork} from '../../main-network';
-import {HttpClient} from '@angular/common/http';
 import {AnalysisService} from '../../services/analysis/analysis.service';
 import {OmnipathControllerService} from '../../services/omnipath-controller/omnipath-controller.service';
 import html2canvas from 'html2canvas';
@@ -38,6 +37,7 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit {
 
   private networkJSON = '{"nodes": [], "edges": []}';
 
+  // set default config on init
   public myConfig: IConfig = JSON.parse(JSON.stringify(defaultConfig));
 
   @Input()
@@ -53,11 +53,17 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit {
     for (const key of Object.keys(configObj)) {
       if (key === 'nodeGroups' ) {
         this.setConfigNodeGroup(key, configObj[key]);
+        // dont set the key here, will be set in function
+        continue;
       } else if (key === 'edgeGroups') {
         this.setConfigEdgeGroup(key, configObj[key])
+        // dont set the key here, will be set in function
+        continue;
       }
       else if (key === 'interactions') {
         this.getInteractions();
+        // dont set the key here, will be set in function
+        continue;
       } else if (key === 'showLeftSidebar') {
         if (configObj[key]) {
           // shrink main column
@@ -343,30 +349,54 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit {
   }
 
     /**
-   * Function to set the node group attribute in config
-   * Handles setting defaults
+   * Function to set the node group attribute in config 
+   * Validates input NodeGroups and handles setting defaults
    * @param key 
    * @param values 
    */
-  public setConfigNodeGroup(key: string, values: Array<NodeGroup>) {
-    this.myConfig[key] = {...this.myConfig[key], ...values};
+  public setConfigNodeGroup(key: string, nodeGroups: Array<NodeGroup>) {
+    console.log(Object.keys(nodeGroups).length)
+    if (nodeGroups === undefined || !Object.keys(nodeGroups).length) {
+      // if node groups are not set or empty, use default edge group(s)
+      this.myConfig[key] = defaultConfig.nodeGroups;
+      // stop if nodeGroups do not contain any information
+      return
+    }
+    // make sure all keys are set
+    Object.entries(nodeGroups).forEach(([key, value]) => {
+      if (!('detailShowLabel' in value)) {
+        // use detailShowLabel default value if not set
+        value['detailShowLabel'] = defaultConfig.nodeGroups.default.detailShowLabel;
+      }
+    })
+    
+    // override default edge groups
+    this.myConfig[key] = nodeGroups;
+    console.log(nodeGroups)
   }
 
   /**
    * Function to set the edge group attribute in config
-   * Handles setting defaults
+   * Validates input EdgeGroups and handles setting defaults
    * @param key 
    * @param values 
    */
   public setConfigEdgeGroup(key: string, edgeGroups: Array<EdgeGroup>) {
+    if (edgeGroups === undefined || !edgeGroups.length) {
+      // if edge groups are not set or empty, use default edge group(s)
+      this.myConfig[key] = defaultConfig.edgeGroups;
+      // stop if edgeGroups do not contain any information
+      return
+    }
     // make sure all keys are set
     Object.entries(edgeGroups).forEach(([key, value]) => {
       if (!('dashes' in value)) {
-        // dashes defaults to 'false' if not set
-        value['dashes'] = false;
+        // use dashes default value if not set
+        value['dashes'] = defaultConfig.edgeGroups.default.dashes;
       }
     })
-    this.myConfig[key] = {...this.myConfig[key], ...edgeGroups};
+    // override default node groups
+    this.myConfig[key] = edgeGroups;
   }
 
   public toCanvas() {
diff --git a/src/index.html b/src/index.html
index 70da15eb..5b34b758 100644
--- a/src/index.html
+++ b/src/index.html
@@ -38,10 +38,9 @@
 
   <network-expander id="netexp1"
                     config='{
-                      "nodeGroups": {"0.5": {"type": "gene", "color": "rgb(204, 255, 51)", "name": "0.5", "shape": "circle"}, "patient_group": {"type": "patient", "color": "red", "name": "patient group", "shape": "circle"}, "2.0": {"type": "gene", "color": "rgb(51, 204, 51)", "name": "2.0", "shape": "circle"}, "-2.0": {"type": "gene", "color": "rgb(255, 0, 0)", "name": "-2.0", "shape": "circle"}},
-                      "edgeGroups": {"dashes": {"color": "black", "name": "Custom Group", "dashes": [1, 2]}}, 
-                      "identifier": "symbol",
-                      "legendUrl": "https://exbio.wzw.tum.de/covex/assets/leg1.png"
+                      "nodeGroups": {"0.5": {"type": "gene", "color": "rgb(204, 255, 51)", "groupName": "0.5", "shape": "circle"}, "patient_group": {"type": "patient", "color": "red", "groupName": "patient group", "shape": "circle"}},
+                      "edgeGroups": {"dashes": {"color": "black", "groupName": "Dashes Group", "dashes": [1, 2]}}, 
+                      "identifier": "symbol"
                     }'
                     network='{
                       "nodes": [{"id": "TP53", "group": "0.5"}, {"id": "C5", "group": "0.5"}, {"id": "Patient", "group": "patient_group"}, {"label": "PTEN", "id": "PTEN", "group": 0.5}],
-- 
GitLab