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 }} - + 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