Change prefix to match application name
[portal/nonrtric-controlpanel.git] / webapp-frontend / src / app / policy-control / policy-instance.component.ts
index adc6a6d..94cdb05 100644 (file)
 import { MatSort } from '@angular/material';
 import { Component, OnInit, ViewChild, Input, AfterViewInit } from '@angular/core';
 import { MatDialog } from '@angular/material/dialog';
-import { PolicyType } from '../interfaces/policy.types';
+import { PolicyTypeSchema } from '../interfaces/policy.types';
 import { PolicyInstanceDataSource } from './policy-instance.datasource';
 import { ErrorDialogService } from '../services/ui/error-dialog.service';
 import { NotificationService } from '../services/ui/notification.service';
 import { PolicyService } from '../services/policy/policy.service';
 import { ConfirmDialogService } from './../services/ui/confirm-dialog.service';
 import { PolicyInstance } from '../interfaces/policy.types';
+import { NoTypePolicyInstanceDialogComponent } from './no-type-policy-instance-dialog.component';
 import { PolicyInstanceDialogComponent } from './policy-instance-dialog.component';
 import { getPolicyDialogProperties } from './policy-instance-dialog.component';
 import { HttpErrorResponse, HttpResponse } from '@angular/common/http';
@@ -35,7 +36,7 @@ import { Observable } from 'rxjs';
 import { UiService } from '../services/ui/ui.service';
 
 @Component({
-    selector: 'rd-policy-instance',
+    selector: 'nrcp-policy-instance',
     templateUrl: './policy-instance.component.html',
     styleUrls: ['./policy-instance.component.scss']
 })
@@ -43,7 +44,7 @@ import { UiService } from '../services/ui/ui.service';
 
 export class PolicyInstanceComponent implements OnInit, AfterViewInit {
     instanceDataSource: PolicyInstanceDataSource;
-    @Input() policyType: PolicyType;
+    @Input() policyTypeSchema: PolicyTypeSchema;
     @Input() expanded: Observable<boolean>;
     @ViewChild(MatSort, { static: true }) sort: MatSort;
     darkMode: boolean;
@@ -58,7 +59,7 @@ export class PolicyInstanceComponent implements OnInit, AfterViewInit {
     }
 
     ngOnInit() {
-        this.instanceDataSource = new PolicyInstanceDataSource(this.policySvc, this.sort, this.notificationService, this.policyType);
+        this.instanceDataSource = new PolicyInstanceDataSource(this.policySvc, this.sort, this.notificationService, this.policyTypeSchema);
         this.expanded.subscribe((isExpanded: boolean) => this.onExpand(isExpanded));
         this.ui.darkModeState.subscribe((isDark) => {
             this.darkMode = isDark;
@@ -71,19 +72,39 @@ export class PolicyInstanceComponent implements OnInit, AfterViewInit {
 
     private onExpand(isExpanded: boolean) {
         if (isExpanded) {
-            this.instanceDataSource.loadTable();
+            this.instanceDataSource.getPolicyInstances();
         }
     }
 
+    private isSchemaEmpty(): boolean {
+        return this.policyTypeSchema.schemaObject === '{}';
+    }
+
     modifyInstance(instance: PolicyInstance): void {
-        this.policySvc.getPolicy(this.policyType.name, instance.id).subscribe(
+        this.policySvc.getPolicyInstance(instance.policy_id).subscribe(
             (refreshedJson: any) => {
-                instance.json = JSON.stringify(refreshedJson);
-                this.dialog.open(PolicyInstanceDialogComponent, getPolicyDialogProperties(this.policyType, instance, this.darkMode));
+                instance = refreshedJson;
+                if (this.isSchemaEmpty()) {
+                    this.dialog.open(
+                        NoTypePolicyInstanceDialogComponent,
+                        getPolicyDialogProperties(this.policyTypeSchema, instance, this.darkMode)).afterClosed().subscribe(
+                            (_: any) => {
+                                this.instanceDataSource.getPolicyInstances();
+                            }
+                        );
+                } else {
+                    this.dialog.open(
+                        PolicyInstanceDialogComponent,
+                        getPolicyDialogProperties(this.policyTypeSchema, instance, this.darkMode)).afterClosed().subscribe(
+                            (_: any) => {
+                                this.instanceDataSource.getPolicyInstances();
+                            }
+                        );
+
+                }
             },
             (httpError: HttpErrorResponse) => {
-                this.notificationService.error('Could not refresh instance ' + httpError.message);
-                this.dialog.open(PolicyInstanceDialogComponent, getPolicyDialogProperties(this.policyType, instance, this.darkMode));
+                this.notificationService.error('Could not refresh instance. Please try again.' + httpError.message);
             }
         );
     }
@@ -105,25 +126,22 @@ export class PolicyInstanceComponent implements OnInit, AfterViewInit {
             .afterClosed().subscribe(
                 (res: any) => {
                     if (res) {
-                        this.policySvc.deletePolicy(this.policyType.name, instance.id)
+                        this.policySvc.deletePolicy(instance.policy_id)
                             .subscribe(
                                 (response: HttpResponse<Object>) => {
                                     switch (response.status) {
-                                        case 200:
+                                        case 204:
                                             this.notificationService.success('Delete succeeded!');
-                                            this.instanceDataSource.loadTable();
+                                            this.instanceDataSource.getPolicyInstances();
                                             break;
                                         default:
-                                            this.notificationService.warn('Delete failed.');
+                                            this.notificationService.warn('Delete failed ' + response.status + ' ' + response.body);
                                     }
                                 },
                                 (error: HttpErrorResponse) => {
-                                    this.errorDialogService.displayError(error.message);
+                                    this.errorDialogService.displayError(error.statusText + ', ' + error.error);
                                 });
                     }
                 });
     }
-
-
-
 }