Testing in Policy Control Component
[portal/nonrtric-controlpanel.git] / webapp-frontend / src / app / policy / policy-type / policy-type.component.ts
1 /*-
2  * ========================LICENSE_START=================================
3  * O-RAN-SC
4  * %%
5  * Copyright (C) 2021 Nordix Foundation
6  * %%
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ========================LICENSE_END===================================
19  */
20
21 import { Component, Input, OnInit, OnChanges, SimpleChanges} from "@angular/core";
22 import { BehaviorSubject } from "rxjs";
23 import { PolicyType, PolicyTypeSchema } from "@interfaces/policy.types";
24 import { PolicyService } from "@app/services/policy/policy.service";
25 import "@policy/policy-control.component";
26
27 class PolicyTypeInfo {
28   constructor(public type: PolicyTypeSchema) {}
29
30   isExpanded: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
31 }
32
33 @Component({
34   selector: "nrcp-policy-type",
35   templateUrl: "./policy-type.component.html",
36   styleUrls: ["./policy-type.component.scss"],
37 })
38 export class PolicyTypeComponent implements OnInit, OnChanges {
39   @Input() policyTypeId: string;
40   @Input() minimiseTrigger: boolean;
41
42   isVisible: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
43
44   policyTypeInfo: PolicyTypeInfo;
45   policyType: string;
46   policyDescription: string;
47
48   constructor(private policyService: PolicyService) {}
49
50   ngOnInit(): void {
51     this.loadTypeInfo();
52     this.isVisible.next(false);
53   }
54
55   ngOnChanges(changes: SimpleChanges): void {
56     if(changes['minimiseTrigger']){
57       this.isVisible.next(false);
58     }
59   }
60
61   public loadTypeInfo() {
62     if (this.policyTypeId && this.policyTypeId !== "") {
63       this.policyService
64         .getPolicyType(this.policyTypeId)
65         .subscribe((policyType: PolicyType) => {
66           const policyTypeSchema = this.getSchemaObject(policyType);
67           this.policyTypeInfo = new PolicyTypeInfo(policyTypeSchema);
68           this.policyType = this.policyTypeId;
69           this.policyDescription = policyTypeSchema.schemaObject.description;
70         });
71     } else {
72       const noType = {
73         policy_schema: JSON.parse('{}'),
74       } as PolicyType;
75       const noTypeSchema = this.getSchemaObject(noType);
76       this.policyTypeInfo = new PolicyTypeInfo(noTypeSchema);
77       this.policyType = "< No Type >";
78       this.policyDescription = "Type with no schema";
79     }
80 }
81
82   private getSchemaObject(policyType: PolicyType) {
83     const policyTypeSchema = {} as PolicyTypeSchema;
84     policyTypeSchema.id = this.policyTypeId;
85     policyTypeSchema.schemaObject = policyType.policy_schema;
86     policyTypeSchema.name = policyType.policy_schema.title;
87     return policyTypeSchema;
88   }
89
90   public toggleVisible() {
91     this.isVisible.next(!this.isVisible.value);
92   }
93 }