X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-frontend%2Fsrc%2Fapp%2Fpolicy%2Fno-type-policy-editor%2Fno-type-policy-editor.component.ts;h=ece01751b3a29a50011b891a5d4bb9412c395753;hb=HEAD;hp=f167adae7b62cee4728b76f8bd29caea7d2994ef;hpb=b3f6966f626c9d58e443280ff3ce17e44a2873e4;p=portal%2Fnonrtric-controlpanel.git diff --git a/webapp-frontend/src/app/policy/no-type-policy-editor/no-type-policy-editor.component.ts b/webapp-frontend/src/app/policy/no-type-policy-editor/no-type-policy-editor.component.ts index f167ada..ece0175 100644 --- a/webapp-frontend/src/app/policy/no-type-policy-editor/no-type-policy-editor.component.ts +++ b/webapp-frontend/src/app/policy/no-type-policy-editor/no-type-policy-editor.component.ts @@ -17,63 +17,91 @@ // limitations under the License. // ========================LICENSE_END=================================== // / -// -import { Component, Input, OnInit } from '@angular/core'; -import { AbstractControl, ControlContainer, FormBuilder, FormControl, FormGroup, FormGroupDirective, ValidatorFn, Validators } from '@angular/forms'; +import { Component, Input, OnInit, Output } from "@angular/core"; +import { + AbstractControl, + ControlContainer, + FormControl, + FormGroup, + FormGroupDirective, + ValidatorFn, + Validators, +} from "@angular/forms"; +import { EventEmitter } from "@angular/core"; @Component({ - selector: 'nrcp-no-type-policy-editor', - templateUrl: './no-type-policy-editor.component.html', - styleUrls: ['./no-type-policy-editor.component.scss'], - viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] + selector: "nrcp-no-type-policy-editor", + templateUrl: "./no-type-policy-editor.component.html", + styleUrls: ["./no-type-policy-editor.component.scss"], + viewProviders: [ + { provide: ControlContainer, useExisting: FormGroupDirective }, + ], }) export class NoTypePolicyEditorComponent implements OnInit { + @Input() policyJson: string = null; + @Output() validJson: EventEmitter = new EventEmitter(); - @Input() instanceForm: FormGroup; - @Input() policyJson: string; + instanceForm: FormGroup = new FormGroup({}); - constructor( - private formBuilder: FormBuilder) { } + constructor() {} ngOnInit(): void { + let initialJson: string; + if (this.policyJson) { + initialJson = formatJsonString(this.policyJson); + } else { + initialJson = "{}"; + } this.instanceForm.addControl( - 'policyJsonTextArea', new FormControl(this.policyJson, [ + "policyJsonTextArea", + new FormControl(initialJson, [ Validators.required, - jsonValidator() + this.jsonValidator(), ]) - ) + ); } get policyJsonTextArea(): AbstractControl { - return this.instanceForm ? this.instanceForm.get('policyJsonTextArea') : null; + return this.instanceForm + ? this.instanceForm.get("policyJsonTextArea") + : null; } formatJsonInput(): void { - this.policyJson = formatJsonString(JSON.parse(this.policyJsonTextArea.value)); + let jsonBefore: string = this.policyJsonTextArea.value; + let jsonAfter = formatJsonString(JSON.parse(jsonBefore)); + this.policyJsonTextArea.setValue(jsonAfter); } -} -export function formatJsonString(jsonToFormat: any): string { - return JSON.stringify(jsonToFormat, null, 2); -} - -export function jsonValidator(): ValidatorFn { - return (control: AbstractControl): { [key: string]: any } | null => { - const notValid = !isJsonValid(control.value); - return notValid ? { 'invalidJson': { value: control.value } } : null; - }; -} + jsonValidator(): ValidatorFn { + return (control: AbstractControl): { [key: string]: any } | null => { + const notValid = !this.isJsonValid(control.value); + this.handleJsonChangeEvent(notValid, control.value); + return notValid ? { invalidJson: { value: control.value } } : null; + }; + } -export function isJsonValid(json: string): boolean { - try { - if (json != null) { - JSON.parse(json); - return true; - } else { - return false; + handleJsonChangeEvent(notValid: boolean, newValue: string): void { + let json = newValue; + if (notValid) { + json = null; } - } catch (jsonError) { - return false; + this.validJson.emit(json); + } + + isJsonValid(json: string): boolean { + let valid = false as boolean; + try { + if (json != null) { + JSON.parse(json); + valid = true; + } + } catch (jsonError) {} + return valid; } } + +export function formatJsonString(jsonToFormat: any): string { + return JSON.stringify(jsonToFormat, null, 2); +}