From c79bebb3ed7f0009d384bc5e31bdcc4280777241 Mon Sep 17 00:00:00 2001
From: Oleksandr Husak <oleksandr.husak@mailbox.tu-dresden.de>
Date: Mon, 11 Apr 2022 13:31:29 +0200
Subject: [PATCH] iterative marker color

---
 .../chart-timeline.component.ts               | 14 +++++----
 src/app/components/map/map.component.ts       | 23 ++++++++-------
 src/app/components/table/table.component.html | 29 ++++++++++++++++++-
 src/app/components/table/table.component.ts   |  4 +--
 src/app/model/base-model.ts                   |  3 +-
 src/environments/environment.ts               | 24 ++++++++++-----
 6 files changed, 67 insertions(+), 30 deletions(-)

diff --git a/src/app/components/chart-timeline/chart-timeline.component.ts b/src/app/components/chart-timeline/chart-timeline.component.ts
index 57cab72..3f56f04 100644
--- a/src/app/components/chart-timeline/chart-timeline.component.ts
+++ b/src/app/components/chart-timeline/chart-timeline.component.ts
@@ -16,8 +16,8 @@ import {
   ChartComponent 
 } from 'ng-apexcharts';
 
-import { MarkerColorMap } from 'src/environments/environment';
-import {NotificationType, Object, PositionUpdate, validateTypeObject} from 'src/app/model/base-model';
+import { getMarkerConfig } from 'src/environments/environment';
+import { Object, PositionUpdate, validateTypeObject} from 'src/app/model/base-model';
 
 export type ChartOptions = {
   series: ApexAxisChartSeries;
@@ -99,10 +99,12 @@ export class ChartTimelineComponent implements OnInit {
     } 
 
     // --- Marker
-    if (name in MarkerColorMap) {
-      var markerConf = MarkerColorMap[name]
-      this.chartOptions.series[idx]["color"] = markerConf?.circle
-    }
+    // if (name in MarkerColorMap) {
+    //   var markerConf = MarkerColorMap[name]
+    //   this.chartOptions.series[idx]["color"] = markerConf?.circle
+    // }
+    var markerConf = getMarkerConfig(idx+1) // 0 is root
+    this.chartOptions.series[idx]["color"] = markerConf?.circle
 
     // --- Add new data
     obj.zoneDescriptors.forEach(zone => {
diff --git a/src/app/components/map/map.component.ts b/src/app/components/map/map.component.ts
index 01c3e68..bf19265 100644
--- a/src/app/components/map/map.component.ts
+++ b/src/app/components/map/map.component.ts
@@ -5,7 +5,7 @@ import * as L from "leaflet";
 import 'leaflet-arrowheads';
 import { IMqttMessage, MqttService } from 'ngx-mqtt';
 
-import { environment, MarkerColorMap } from 'src/environments/environment';
+import { environment, getMarkerConfig} from 'src/environments/environment';
 import {Position, PositionUpdate, RelativePos, WGS84, validateTypePosition, validateTypeObject} from 'src/app/model/base-model';
 
 
@@ -94,10 +94,6 @@ export class MapComponent implements OnInit {
       props = `<p><h3>${key}</h3></p>`
     }
 
-    // Rotaion
-    let quter = desc.orientation
-
-
     this.addMarker(key, pos, props, desc.extractedAttributes?.theta)
   }
 
@@ -122,13 +118,18 @@ export class MapComponent implements OnInit {
     } else {
       var globPos = L.latLng([point.latitude, point.longitude]);
     }
-
+ 
     // --- Marker
-    if (key in MarkerColorMap) {
-      var markerConf = MarkerColorMap[key]
-    } else {
-      var markerConf = MarkerColorMap['Default']
-    }
+    let serialNum = Object.keys(this.markOverlays).length - 1 // because this point already exists
+    console.log(this.markOverlays)
+    console.log("serialNum ", serialNum)
+    var markerConf = getMarkerConfig(serialNum)
+
+    // if (key in MarkerColorMap) {
+    //   var markerConf = MarkerColorMap[key]
+    // } else {
+    //   var markerConf = MarkerColorMap['Default']
+    // }
       
     let marker = L.marker(globPos, {
       icon: L.icon({
diff --git a/src/app/components/table/table.component.html b/src/app/components/table/table.component.html
index 4cfcaf8..f10305d 100644
--- a/src/app/components/table/table.component.html
+++ b/src/app/components/table/table.component.html
@@ -44,11 +44,38 @@
             </th>
             <td mat-cell *matCellDef="let element">
                 <span *ngFor="let dim of (element.position.point | keyvalue)">
-                    {{dim.key}}: {{dim.value}}
+                    {{dim.key}}: {{dim.value}} <br>
+                </span>
+                <span *ngIf="element?.extractedAttributes">
+                    theta: {{element?.extractedAttributes?.theta}}
                 </span>
             </td>
         </ng-container>
 
+        <!-- Battery -->
+        <ng-container matColumnDef="battery">
+            <th mat-header-cell *matHeaderCellDef>
+                <mat-icon aria-hidden="false" aria-label="battery">battery_5_bar</mat-icon> <br> Battery 
+            </th>
+            <td mat-cell *matCellDef="let element"> {{element?.extractedAttributes?.batteryChargeLevel}}%</td>
+        </ng-container>
+
+        <!-- Items -->
+        <ng-container matColumnDef="loadedItems">
+            <th mat-header-cell *matHeaderCellDef>
+                <mat-icon aria-hidden="false" aria-label="items">feed</mat-icon> Items
+            </th>
+            <td mat-cell *matCellDef="let element"> {{element?.extractedAttributes?.loadedItems}}</td>
+        </ng-container>
+
+        <!-- Errors -->
+        <ng-container matColumnDef="errors">
+            <th mat-header-cell *matHeaderCellDef>
+                <mat-icon aria-hidden="false" aria-label="errors">error</mat-icon> Errors
+            </th>
+            <td mat-cell *matCellDef="let element"> {{element?.extractedAttributes?.errors}}</td>
+        </ng-container>
+
         <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
         <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
 
diff --git a/src/app/components/table/table.component.ts b/src/app/components/table/table.component.ts
index b0b4844..0bebc46 100644
--- a/src/app/components/table/table.component.ts
+++ b/src/app/components/table/table.component.ts
@@ -18,7 +18,7 @@ export class TableComponent implements OnInit {
 
   private subsPosition: Subscription;
 
-  displayedColumns: string[] = ['agent', 'type', 'time', 'zone', 'position'];
+  displayedColumns: string[] = ['agent', 'type', 'time', 'zone', 'position', 'battery', 'loadedItems', 'errors'];
 
 
   // testMessages: PositionUpdate[] = [
@@ -37,7 +37,7 @@ export class TableComponent implements OnInit {
     this.subsPosition = this._mqttService.observe('ipos/client/position').subscribe((message: IMqttMessage) => {
       try {
         let upd: PositionUpdate = JSON.parse(message.payload.toString())
-        upd.objects.forEach(obj => validateTypeObject(obj));
+        // upd.objects.forEach(obj => validateTypeObject(obj));
         this.dataSource.push(...upd.objects);
         this.table?.renderRows();
       } catch(e) {
diff --git a/src/app/model/base-model.ts b/src/app/model/base-model.ts
index 681dbd7..475efd8 100644
--- a/src/app/model/base-model.ts
+++ b/src/app/model/base-model.ts
@@ -73,13 +73,12 @@ interface ExtAttribute {
 
 export function validateTypePosition(obj: any) {
     if (!isPosition(obj)) {
-        throw new TypeError("Object is not Position")  
+        throw new TypeError("Unvalid Position")  
     }
 }
   
 export function validateTypeObject(obj: any) {
     if (!isObject(obj)) {
-        console.log(obj)
         throw new TypeError("Unvalid Object: " + Object.keys(obj))  
     }
 }
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index c12e511..373238d 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -35,20 +35,28 @@ export const MQTTconfig: IMqttServiceOptions = {
 //   path: '/mqtt'
 // };
 
-export const MarkerColorMap: { [key: string]: MarkerColor } = {
-  "ROOT": {"marker": "red", "circle": "#d32f2f"},
-  "Employee1": {"marker": "green", "circle": "#008632"},
-  "Employee2": {"marker": "blue", "circle": "#0076EE"},
-  "Employee3": {"marker": "violet", "circle": "#9700ee"},
-  "Employee4": {"marker": "yellow", "circle": "#eee600"},
-  "Default": {"marker": "grey", "circle": "#606060"},
-}
+export const MarkerColorList: MarkerColor[]  = [
+  {"marker": "red", "circle": "#d32f2f"},
+  {"marker": "green", "circle": "#008632"},
+  {"marker": "blue", "circle": "#0076EE"},
+  {"marker": "violet", "circle": "#9700ee"},
+  {"marker": "yellow", "circle": "#eee600"},
+  {"marker": "grey", "circle": "#606060"},
+]
 
 interface MarkerColor {
   marker: string
   circle: string
 }
 
+export function getMarkerConfig(counter: number) {
+  let idx = counter
+
+  if (MarkerColorList.length <= counter) {
+    idx = counter - MarkerColorList.length
+  }
+  return MarkerColorList[idx]
+}
 
 /*
  * For easier debugging in development mode, you can import the following file
-- 
GitLab