X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-frontend%2Fsrc%2Fapp%2Fpolicy-control%2Fpolicy-instance-dialog.component.ts;h=72a2041af9356724f4b932836fec72156c1d4aa4;hb=refs%2Fchanges%2F87%2F5587%2F1;hp=60ffbd3e724760022f98d863c704e9c2c8269cfe;hpb=5372422520d7cfb5760a536cce0da7b15f012eda;p=portal%2Fnonrtric-controlpanel.git diff --git a/webapp-frontend/src/app/policy-control/policy-instance-dialog.component.ts b/webapp-frontend/src/app/policy-control/policy-instance-dialog.component.ts index 60ffbd3..72a2041 100644 --- a/webapp-frontend/src/app/policy-control/policy-instance-dialog.component.ts +++ b/webapp-frontend/src/app/policy-control/policy-instance-dialog.component.ts @@ -23,12 +23,15 @@ import { MatDialogConfig, MatDialogRef, MAT_DIALOG_DATA } from '@angular/materia import { MatMenuTrigger } from '@angular/material/menu'; import { JsonPointer } from 'angular6-json-schema-form'; import * as uuid from 'uuid'; -import { PolicyInstance, PolicyType } from '../interfaces/policy.types'; +import { CreatePolicyInstance, PolicyInstance, PolicyTypeSchema } from '../interfaces/policy.types'; import { PolicyService } from '../services/policy/policy.service'; import { ErrorDialogService } from '../services/ui/error-dialog.service'; import { NotificationService } from './../services/ui/notification.service'; import { UiService } from '../services/ui/ui.service'; import { HttpErrorResponse } from '@angular/common/http'; +import { FormGroup, FormControl, Validators } from '@angular/forms'; +import { ChangeDetectorRef } from '@angular/core'; +import { Ric } from '../interfaces/ric'; @Component({ @@ -49,6 +52,8 @@ import { HttpErrorResponse } from '@angular/common/http'; ], }) export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit { + instanceForm: FormGroup; + formActive = false; isVisible = { @@ -81,14 +86,14 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit { policyTypeName: string; darkMode: boolean; ric: string; - allRics: string[]; + allRics: Ric[]; private fetchRics() { console.log('fetchRics ' + this.policyTypeName); const self: PolicyInstanceDialogComponent = this; this.dataService.getRics(this.policyTypeName).subscribe( { - next(value) { + next(value: Ric[]) { self.allRics = value; console.log(value); }, @@ -100,6 +105,7 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit { } constructor( + private cdr: ChangeDetectorRef, private dataService: PolicyService, private errorService: ErrorDialogService, private notificationService: NotificationService, @@ -110,7 +116,7 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit { this.policyInstanceId = data.instanceId; this.policyTypeName = data.name; this.jsonSchemaObject = data.createSchema; - this.jsonObject = this.parseJson(data.instanceJson); + this.jsonObject = data.instanceJson; this.ric = data.ric; } @@ -120,22 +126,21 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit { this.ui.darkModeState.subscribe((isDark) => { this.darkMode = isDark; }); + this.instanceForm = new FormGroup({ + 'ricSelector': new FormControl(this.ric, [ + Validators.required + ]) + }); if (!this.policyInstanceId) { this.fetchRics(); } - if (this.isSchemaEmpty()) { - // Empty schema, hide form, show json instead - this.isVisible.form = false; - this.isVisible.json = true; - } } ngAfterViewInit() { + this.cdr.detectChanges(); } - private isSchemaEmpty(): boolean { - return Object.keys(this.jsonSchemaObject).length === 0; - } + get ricSelector() { return this.instanceForm.get('ricSelector'); } onSubmit() { if (this.policyInstanceId == null) { @@ -143,10 +148,12 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit { } const policyJson: string = this.prettyLiveFormData; const self: PolicyInstanceDialogComponent = this; - this.dataService.putPolicy(this.policyTypeName, this.policyInstanceId, policyJson, this.ric).subscribe( + let createPolicyInstance = this.createPolicyInstance(policyJson); + this.dataService.putPolicy(createPolicyInstance).subscribe( { - next(value) { - self.notificationService.success('Policy ' + self.policyTypeName + ':' + self.policyInstanceId + ' submitted'); + next(_) { + self.notificationService.success('Policy ' + self.policyTypeName + ':' + self.policyInstanceId + + ' submitted'); }, error(error: HttpErrorResponse) { self.errorService.displayError('Submit failed: ' + error.error); @@ -155,6 +162,16 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit { }); } + private createPolicyInstance(policyJson: string) { + let createPolicyInstance = {} as CreatePolicyInstance; + createPolicyInstance.policy_data = JSON.parse(policyJson); + createPolicyInstance.policy_id = this.policyInstanceId; + createPolicyInstance.policytype_id = this.policyTypeName; + createPolicyInstance.ric_id = (!this.ricSelector.value.ric_id) ? this.ric : this.ricSelector.value.ric_id; + createPolicyInstance.service_id = 'controlpanel'; + return createPolicyInstance; + } + onClose() { this.dialogRef.close(); } @@ -164,9 +181,6 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit { } get prettyLiveFormData(): string { - if (this.isSchemaEmpty()) { - return this.jsonAsString; - } return JSON.stringify(this.liveFormData, null, 2); } @@ -224,12 +238,12 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit { } } -export function getPolicyDialogProperties(policyType: PolicyType, instance: PolicyInstance, darkMode: boolean): MatDialogConfig { - const createSchema = policyType.schemaObject; - const instanceId = instance ? instance.id : null; - const instanceJson = instance ? instance.json : null; - const name = policyType.name; - const ric = instance ? instance.ric : null; +export function getPolicyDialogProperties(policyTypeSchema: PolicyTypeSchema, instance: PolicyInstance, darkMode: boolean): MatDialogConfig { + const createSchema = policyTypeSchema.schemaObject; + const instanceId = instance ? instance.policy_id : null; + const instanceJson = instance ? instance.policy_data : null; + const name = policyTypeSchema.name; + const ric = instance ? instance.ric_id : null; return { maxWidth: '1200px', maxHeight: '900px',