This is an automated email from the ASF dual-hosted git repository.

gongchao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git


The following commit(s) were added to refs/heads/master by this push:
     new 874f7bdab Optimize the processing logic for Depend-type fields (#2248)
874f7bdab is described below

commit 874f7bdab3aab3e54984f6b9398abec1bdbfcb07
Author: Kerwin Bryant <[email protected]>
AuthorDate: Tue Jul 9 10:52:12 2024 +0800

    Optimize the processing logic for Depend-type fields (#2248)
---
 .../monitor-edit/monitor-edit.component.html       |  1 +
 .../monitor/monitor-edit/monitor-edit.component.ts | 70 +++++-----------------
 .../monitor-form/monitor-form.component.html       |  2 +-
 .../monitor/monitor-form/monitor-form.component.ts | 21 +++++--
 .../monitor/monitor-new/monitor-new.component.ts   | 20 ++++---
 5 files changed, 47 insertions(+), 67 deletions(-)

diff --git 
a/web-app/src/app/routes/monitor/monitor-edit/monitor-edit.component.html 
b/web-app/src/app/routes/monitor/monitor-edit/monitor-edit.component.html
index 922964404..40cb5f49c 100644
--- a/web-app/src/app/routes/monitor/monitor-edit/monitor-edit.component.html
+++ b/web-app/src/app/routes/monitor/monitor-edit/monitor-edit.component.html
@@ -35,6 +35,7 @@
   [paramDefines]="paramDefines"
   [advancedParams]="advancedParams"
   [advancedParamDefines]="advancedParamDefines"
+  [paramValueMap]="paramValueMap"
   [collector]="collector"
   [collectors]="collectors"
   (formCancel)="onCancel()"
diff --git 
a/web-app/src/app/routes/monitor/monitor-edit/monitor-edit.component.ts 
b/web-app/src/app/routes/monitor/monitor-edit/monitor-edit.component.ts
index 72ff1bebe..88a4afeb1 100644
--- a/web-app/src/app/routes/monitor/monitor-edit/monitor-edit.component.ts
+++ b/web-app/src/app/routes/monitor/monitor-edit/monitor-edit.component.ts
@@ -57,7 +57,7 @@ export class MonitorEditComponent implements OnInit {
   params!: Param[];
   advancedParamDefines!: ParamDefine[];
   advancedParams!: Param[];
-  paramValueMap = new Map<String, Param>();
+  paramValueMap!: Map<String, Param>;
   monitor = new Monitor();
   collectors!: Collector[];
   collector: string = '';
@@ -79,13 +79,15 @@ export class MonitorEditComponent implements OnInit {
       .pipe(
         switchMap((message: Message<any>) => {
           if (message.code === 0) {
+            let paramValueMap = new Map<String, Param>();
             this.monitor = message.data.monitor;
             this.collector = message.data.collector == null ? '' : 
message.data.collector;
             this.titleSvc.setTitleByI18n(`monitor.app.${this.monitor.app}`);
             if (message.data.params != null) {
               message.data.params.forEach((item: Param) => {
-                this.paramValueMap.set(item.field, item);
+                paramValueMap.set(item.field, item);
               });
+              this.paramValueMap = paramValueMap;
             }
             this.detected = false;
             if (this.monitor.tags == undefined) {
@@ -102,10 +104,10 @@ export class MonitorEditComponent implements OnInit {
       .pipe(
         switchMap(message => {
           if (message.code === 0) {
-            this.params = [];
-            this.advancedParams = [];
-            this.paramDefines = [];
-            this.advancedParamDefines = [];
+            let params: Param[] = [];
+            let advancedParams: Param[] = [];
+            let paramDefines: ParamDefine[] = [];
+            let advancedParamDefines: ParamDefine[] = [];
             message.data.forEach(define => {
               let param = this.paramValueMap.get(define.field);
               if (param === undefined) {
@@ -144,11 +146,11 @@ export class MonitorEditComponent implements OnInit {
               }
               define.name = 
this.i18nSvc.fanyi(`monitor.app.${this.monitor.app}.param.${define.field}`);
               if (define.hide) {
-                this.advancedParams.push(param);
-                this.advancedParamDefines.push(define);
+                advancedParams.push(param);
+                advancedParamDefines.push(define);
               } else {
-                this.params.push(param);
-                this.paramDefines.push(define);
+                params.push(param);
+                paramDefines.push(define);
               }
               if (
                 define.field == 'host' &&
@@ -158,8 +160,10 @@ export class MonitorEditComponent implements OnInit {
                 this.hostName = define.name;
               }
             });
-            this.onPageInit();
-            this.detectDepend();
+            this.params = [...params];
+            this.advancedParams = [...advancedParams];
+            this.paramDefines = [...paramDefines];
+            this.advancedParamDefines = [...advancedParamDefines];
           } else {
             console.warn(message.msg);
           }
@@ -182,48 +186,6 @@ export class MonitorEditComponent implements OnInit {
       );
   }
 
-  onPageInit() {
-    this.paramDefines.forEach((paramDefine, index) => {
-      this.params[index].display = true;
-    });
-    this.advancedParamDefines.forEach((advancedParamDefine, index) => {
-      this.advancedParams[index].display = true;
-    });
-  }
-
-  detectDepend() {
-    this.paramDefines.forEach((paramDefine, index) => {
-      if (paramDefine.type == 'radio') {
-        
this.onDependChanged(this.paramValueMap.get(paramDefine.field)?.paramValue, 
paramDefine.field);
-      }
-    });
-  }
-
-  onDependChanged(dependValue: string, dependField: string) {
-    this.paramDefines.forEach((paramDefine, index) => {
-      if (paramDefine.depend) {
-        let fieldValues = new 
Map(Object.entries(paramDefine.depend)).get(dependField);
-        if (fieldValues) {
-          this.params[index].display = false;
-          if (fieldValues.map(String).includes(dependValue)) {
-            this.params[index].display = true;
-          }
-        }
-      }
-    });
-    this.advancedParamDefines.forEach((advancedParamDefine, index) => {
-      if (advancedParamDefine.depend) {
-        let fieldValues = new 
Map(Object.entries(advancedParamDefine.depend)).get(dependField);
-        if (fieldValues) {
-          this.advancedParams[index].display = false;
-          if (fieldValues.map(String).includes(dependValue)) {
-            this.advancedParams[index].display = true;
-          }
-        }
-      }
-    });
-  }
-
   onSubmit(info: any) {
     let addMonitor = {
       detected: this.detected,
diff --git 
a/web-app/src/app/routes/monitor/monitor-form/monitor-form.component.html 
b/web-app/src/app/routes/monitor/monitor-form/monitor-form.component.html
index c44f49a3e..2cbb02005 100644
--- a/web-app/src/app/routes/monitor/monitor-form/monitor-form.component.html
+++ b/web-app/src/app/routes/monitor/monitor-form/monitor-form.component.html
@@ -45,7 +45,7 @@
 
       <ng-container *ngFor="let paramDefine of paramDefines; let i = index">
         <app-form-item
-          *ngIf="params[i].display && paramDefine.field !== 'host'"
+          *ngIf="params[i].display !== false && paramDefine.field !== 'host'"
           [item]="paramDefine"
           [(value)]="params[i].paramValue"
           (valueChange)="
diff --git 
a/web-app/src/app/routes/monitor/monitor-form/monitor-form.component.ts 
b/web-app/src/app/routes/monitor/monitor-form/monitor-form.component.ts
index 45906dd01..c2b963ca6 100644
--- a/web-app/src/app/routes/monitor/monitor-form/monitor-form.component.ts
+++ b/web-app/src/app/routes/monitor/monitor-form/monitor-form.component.ts
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { Component, EventEmitter, Input, Output, OnChanges, SimpleChanges } 
from '@angular/core';
 import { FormGroup } from '@angular/forms';
 
 import { Collector } from '../../../pojo/Collector';
@@ -29,7 +29,7 @@ import { ParamDefine } from '../../../pojo/ParamDefine';
   templateUrl: './monitor-form.component.html',
   styleUrls: ['./monitor-form.component.less']
 })
-export class MonitorFormComponent {
+export class MonitorFormComponent implements OnChanges {
   @Input() monitor!: any;
   @Input() loading!: boolean;
   @Input() loadingTip!: string;
@@ -40,6 +40,7 @@ export class MonitorFormComponent {
   @Input() advancedParams!: Param[];
   @Input() paramDefines!: ParamDefine[];
   @Input() advancedParamDefines!: ParamDefine[];
+  @Input() paramValueMap!: Map<String, Param>;
 
   @Output() readonly formSubmit = new EventEmitter<any>();
   @Output() readonly formCancel = new EventEmitter<any>();
@@ -48,6 +49,18 @@ export class MonitorFormComponent {
 
   constructor() {}
 
+  ngOnChanges(changes: SimpleChanges) {
+    if (changes.paramDefines && changes.paramDefines.currentValue !== 
changes.paramDefines.previousValue) {
+      changes.paramDefines.currentValue.forEach((paramDefine: any) => {
+        if (paramDefine.type == 'radio') {
+          
this.onDependChanged(this.paramValueMap?.get(paramDefine.field)?.paramValue, 
paramDefine.field);
+        } else if (paramDefine.type == 'boolean') {
+          
this.onParamBooleanChanged(this.paramValueMap?.get(paramDefine.field)?.paramValue,
 paramDefine.field);
+        }
+      });
+    }
+  }
+
   onDetect(formGroup: FormGroup) {
     if (formGroup.invalid) {
       Object.values(formGroup.controls).forEach(control => {
@@ -87,8 +100,8 @@ export class MonitorFormComponent {
       });
       return;
     }
-    this.monitor.host = this.monitor.host.trim();
-    this.monitor.name = this.monitor.name.trim();
+    this.monitor.host = this.monitor.host?.trim();
+    this.monitor.name = this.monitor.name?.trim();
     // todo 暂时单独设置host属性值
     this.params.forEach(param => {
       if (param.field === 'host') {
diff --git 
a/web-app/src/app/routes/monitor/monitor-new/monitor-new.component.ts 
b/web-app/src/app/routes/monitor/monitor-new/monitor-new.component.ts
index 3b3ff37b9..b9c896222 100644
--- a/web-app/src/app/routes/monitor/monitor-new/monitor-new.component.ts
+++ b/web-app/src/app/routes/monitor/monitor-new/monitor-new.component.ts
@@ -83,10 +83,10 @@ export class MonitorNewComponent implements OnInit {
       .pipe(
         switchMap((message: Message<ParamDefine[]>) => {
           if (message.code === 0) {
-            this.params = [];
-            this.advancedParams = [];
-            this.paramDefines = [];
-            this.advancedParamDefines = [];
+            let params: Param[] = [];
+            let advancedParams: Param[] = [];
+            let paramDefines: ParamDefine[] = [];
+            let advancedParamDefines: ParamDefine[] = [];
             message.data.forEach(define => {
               let param = new Param();
               param.field = define.field;
@@ -113,11 +113,11 @@ export class MonitorNewComponent implements OnInit {
               }
               define.name = 
this.i18nSvc.fanyi(`monitor.app.${this.monitor.app}.param.${define.field}`);
               if (define.hide) {
-                this.advancedParams.push(param);
-                this.advancedParamDefines.push(define);
+                advancedParams.push(param);
+                advancedParamDefines.push(define);
               } else {
-                this.params.push(param);
-                this.paramDefines.push(define);
+                params.push(param);
+                paramDefines.push(define);
               }
               if (
                 define.field == 'host' &&
@@ -127,6 +127,10 @@ export class MonitorNewComponent implements OnInit {
                 this.hostName = define.name;
               }
             });
+            this.params = [...params];
+            this.advancedParams = [...advancedParams];
+            this.paramDefines = [...paramDefines];
+            this.advancedParamDefines = [...advancedParamDefines];
           } else {
             console.warn(message.msg);
           }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to