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

Aias00 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 9614041ed7 fix(web-app): clear dependent param value when condition 
not met (#2298) (#4304)
9614041ed7 is described below

commit 9614041ed70ab5a5f163afe5e0e3d23aa1e9e2b5
Author: Deep Shekhar Singh <[email protected]>
AuthorDate: Mon Aug 17 12:54:31 2026 +0530

    fix(web-app): clear dependent param value when condition not met (#2298) 
(#4304)
    
    Signed-off-by: Deep Shekhar Singh <[email protected]>
---
 .../monitor-form/monitor-form.component.html       | 13 ++++-
 .../monitor-form/monitor-form.component.spec.ts    | 57 ++++++++++++++++++++++
 .../monitor/monitor-form/monitor-form.component.ts | 46 +++++++++--------
 3 files changed, 95 insertions(+), 21 deletions(-)

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 61f9a18aad..6fc77d30f2 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
@@ -133,7 +133,18 @@
                 >{{ paramDefine.name }}
               </nz-form-label>
               <nz-form-control nzSpan="8" [nzErrorTip]="'validation.required' 
| i18n">
-                <app-form-field [item]="paramDefine" 
[name]="paramDefine.field" [(ngModel)]="advancedParams[i].paramValue" />
+                <app-form-field
+                  [item]="paramDefine"
+                  [name]="paramDefine.field"
+                  [(ngModel)]="advancedParams[i].paramValue"
+                  (ngModelChange)="
+                    paramDefine.type === 'boolean'
+                      ? onParamBooleanChanged($event, paramDefine.field)
+                      : paramDefine.type === 'radio'
+                      ? onDependChanged($event, paramDefine.field)
+                      : null
+                  "
+                />
               </nz-form-control>
             </nz-form-item>
           </ng-container>
diff --git 
a/web-app/src/app/routes/monitor/monitor-form/monitor-form.component.spec.ts 
b/web-app/src/app/routes/monitor/monitor-form/monitor-form.component.spec.ts
index 0b43dad05e..7603f02c09 100644
--- a/web-app/src/app/routes/monitor/monitor-form/monitor-form.component.spec.ts
+++ b/web-app/src/app/routes/monitor/monitor-form/monitor-form.component.spec.ts
@@ -22,6 +22,8 @@ import { FormsModule } from '@angular/forms';
 import { configureShallowTest } from '@testing';
 
 import { Monitor } from '../../../pojo/Monitor';
+import { Param } from '../../../pojo/Param';
+import { ParamDefine } from '../../../pojo/ParamDefine';
 import { MonitorFormComponent } from './monitor-form.component';
 
 describe('MonitorFormComponent', () => {
@@ -42,4 +44,59 @@ describe('MonitorFormComponent', () => {
   it('should create', () => {
     expect(component).toBeTruthy();
   });
+
+  it('should reset dependent paramValue to null and set display to false when 
dependency is not met', () => {
+    const payloadDefine = new ParamDefine();
+    payloadDefine.field = 'payload';
+    payloadDefine.name = 'Payload';
+    payloadDefine.type = 'textarea';
+    (payloadDefine as any).depend = {
+      httpMethod: ['POST', 'PUT']
+    };
+
+    const payloadParam = new Param();
+    payloadParam.field = 'payload';
+    payloadParam.paramValue = '{"test": "data"}';
+    payloadParam.display = true;
+
+    component.paramDefines = [];
+    component.params = [];
+    component.sdDefines = [];
+    component.sdParams = [];
+    component.advancedParamDefines = [payloadDefine];
+    component.advancedParams = [payloadParam];
+
+    component.onDependChanged('GET', 'httpMethod');
+
+    expect(payloadParam.display).toBeFalse();
+    expect(payloadParam.paramValue).toBeNull();
+    expect(component.hasAdvancedParams).toBeFalse();
+  });
+
+  it('should set display to true when dependency is met', () => {
+    const payloadDefine = new ParamDefine();
+    payloadDefine.field = 'payload';
+    payloadDefine.name = 'Payload';
+    payloadDefine.type = 'textarea';
+    (payloadDefine as any).depend = {
+      httpMethod: ['POST', 'PUT']
+    };
+
+    const payloadParam = new Param();
+    payloadParam.field = 'payload';
+    payloadParam.paramValue = null;
+    payloadParam.display = false;
+
+    component.paramDefines = [];
+    component.params = [];
+    component.sdDefines = [];
+    component.sdParams = [];
+    component.advancedParamDefines = [payloadDefine];
+    component.advancedParams = [payloadParam];
+
+    component.onDependChanged('POST', 'httpMethod');
+
+    expect(payloadParam.display).toBeTrue();
+    expect(component.hasAdvancedParams).toBeTrue();
+  });
 });
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 715e664fbe..e695d1dd88 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
@@ -76,19 +76,18 @@ export class MonitorFormComponent implements OnChanges {
     }
 
     if (changes.advancedParams && changes.advancedParams.currentValue !== 
changes.advancedParams.previousValue) {
-      for (const advancedParam of changes.advancedParams.currentValue) {
-        if (advancedParam.display !== false) {
-          this.hasAdvancedParams = true;
-          break;
-        }
-      }
+      this.hasAdvancedParams = this.advancedParams?.some(param => 
param.display !== false) ?? false;
     }
     if (changes.paramDefines && changes.paramDefines.currentValue !== 
changes.paramDefines.previousValue) {
       changes.paramDefines.currentValue.forEach((paramDefine: any) => {
+        const paramVal =
+          this.paramValueMap?.get(paramDefine.field)?.paramValue ??
+          this.params?.find(p => p.field === paramDefine.field)?.paramValue ??
+          paramDefine.defaultValue;
         if (paramDefine.type == 'radio') {
-          
this.onDependChanged(this.paramValueMap?.get(paramDefine.field)?.paramValue, 
paramDefine.field);
+          this.onDependChanged(paramVal, paramDefine.field);
         } else if (paramDefine.type == 'boolean') {
-          
this.onParamBooleanChanged(this.paramValueMap?.get(paramDefine.field)?.paramValue,
 paramDefine.field);
+          this.onParamBooleanChanged(paramVal, paramDefine.field);
         }
       });
     }
@@ -232,39 +231,46 @@ export class MonitorFormComponent implements OnChanges {
   }
 
   onDependChanged(dependValue: string, dependField: string) {
-    this.paramDefines.forEach((paramDefine, index) => {
-      if (paramDefine.depend) {
-        let fieldValues = new 
Map(Object.entries(paramDefine.depend)).get(dependField);
+    this.paramDefines?.forEach((paramDefine, index) => {
+      if (paramDefine.depend && this.params && this.params[index]) {
+        const 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;
+          } else {
+            this.params[index].display = false;
+            this.params[index].paramValue = null;
           }
         }
       }
     });
-    this.sdDefines.forEach((paramDefine, index) => {
-      if (paramDefine.depend) {
-        let fieldValues = new 
Map(Object.entries(paramDefine.depend)).get(dependField);
+    this.sdDefines?.forEach((paramDefine, index) => {
+      if (paramDefine.depend && this.sdParams && this.sdParams[index]) {
+        const fieldValues = new 
Map(Object.entries(paramDefine.depend)).get(dependField);
         if (fieldValues) {
-          this.sdParams[index].display = false;
           if (fieldValues.map(String).includes(dependValue)) {
             this.sdParams[index].display = true;
+          } else {
+            this.sdParams[index].display = false;
+            this.sdParams[index].paramValue = null;
           }
         }
       }
     });
-    this.advancedParamDefines.forEach((advancedParamDefine, index) => {
-      if (advancedParamDefine.depend) {
-        let fieldValues = new 
Map(Object.entries(advancedParamDefine.depend)).get(dependField);
+    this.advancedParamDefines?.forEach((advancedParamDefine, index) => {
+      if (advancedParamDefine.depend && this.advancedParams && 
this.advancedParams[index]) {
+        const 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;
+          } else {
+            this.advancedParams[index].display = false;
+            this.advancedParams[index].paramValue = null;
           }
         }
       }
     });
+    this.hasAdvancedParams = this.advancedParams?.some(param => param.display 
!== false) ?? false;
   }
 
   //start grafana


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

Reply via email to