* ========================LICENSE_END===================================
*/
-import { MatSort } from '@angular/material/sort';
+import { MatSort, Sort } from '@angular/material/sort';
import { Component, OnInit, ViewChild, Input, AfterViewInit } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
-import { PolicyTypeSchema } 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 { 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 { PolicyInstanceDialogComponent } from '../policy-instance-dialog/policy-instance-dialog.component';
import { getPolicyDialogProperties } from '../policy-instance-dialog/policy-instance-dialog.component';
import { HttpErrorResponse, HttpResponse } from '@angular/common/http';
-import { Observable } from 'rxjs';
-import { UiService } from '../../services/ui/ui.service';
+import { BehaviorSubject, Observable } from 'rxjs';
+import { UiService } from '@services/ui/ui.service';
+import { FormControl, FormGroup } from '@angular/forms';
+import { MatTableDataSource } from '@angular/material/table';
+
+class PolicyTypeInfo {
+ constructor(public type: PolicyTypeSchema) { }
+
+ isExpanded: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
+}
@Component({
selector: 'nrcp-policy-instance',
export class PolicyInstanceComponent implements OnInit, AfterViewInit {
- instanceDataSource: PolicyInstanceDataSource;
+ policyInstanceDataSource: PolicyInstanceDataSource;
@Input() policyTypeSchema: PolicyTypeSchema;
@Input() expanded: Observable<boolean>;
@ViewChild(MatSort, { static: true }) sort: MatSort;
+ policyTypeInfo = new Map<string, PolicyTypeInfo>();
+ instanceDataSource: MatTableDataSource<PolicyInstance> = new MatTableDataSource<PolicyInstance>();
+ policyInstanceForm: FormGroup;
darkMode: boolean;
constructor(
private notificationService: NotificationService,
private confirmDialogService: ConfirmDialogService,
private ui: UiService) {
+ this.policyInstanceForm = new FormGroup({
+ id: new FormControl(''),
+ target: new FormControl(''),
+ owner: new FormControl(''),
+ lastModified: new FormControl('')
+ })
}
ngOnInit() {
- this.instanceDataSource = new PolicyInstanceDataSource(this.policySvc, this.sort, this.policyTypeSchema);
+ this.policyInstanceDataSource = new PolicyInstanceDataSource(this.policySvc, this.sort, this.notificationService, this.policyTypeSchema.id);
this.expanded.subscribe((isExpanded: boolean) => this.onExpand(isExpanded));
+
+ this.policyInstanceDataSource.connect().subscribe((data) => {
+ this.instanceDataSource.data = data;
+ })
+
+ this.policyInstanceForm.valueChanges.subscribe(value => {
+ const filter = {...value, id: value.id.trim().toLowerCase()} as string;
+ this.instanceDataSource.filter = filter;
+ });
+
+ this.instanceDataSource.filterPredicate = ((data: PolicyInstance, filter) => {
+ return this.isDataIncluding(data.policy_id, filter.id)
+ && this.isDataIncluding(data.ric_id, filter.target)
+ && this.isDataIncluding(data.service_id, filter.owner)
+ && this.isDataIncluding(data.lastModified, filter.lastModified);
+ }) as (data: PolicyInstance, filter: any) => boolean;
+
this.ui.darkModeState.subscribe((isDark) => {
this.darkMode = isDark;
});
}
+ compare(a: any, b: any, isAsc: boolean) {
+ return (a < b ? -1 : 1) * (isAsc ? 1 : -1);
+ }
+
+ stopSort(event: any){
+ event.stopPropagation();
+ }
+
+ isDataIncluding(data: string, filter: string) : boolean {
+ return !filter || data.toLowerCase().includes(filter);
+ }
+
ngAfterViewInit() {
- this.instanceDataSource.sort = this.sort;
+ this.policyInstanceDataSource.sort = this.sort;
}
private onExpand(isExpanded: boolean) {
if (isExpanded) {
- this.instanceDataSource.getPolicyInstances();
+ this.policyInstanceDataSource.getPolicyInstances();
}
}
PolicyInstanceDialogComponent,
getPolicyDialogProperties(this.policyTypeSchema, instance, this.darkMode)).afterClosed().subscribe(
(_: any) => {
- this.instanceDataSource.getPolicyInstances();
+ this.policyInstanceDataSource.getPolicyInstances();
}
);
},
}
hasInstances(): boolean {
- return this.instanceDataSource.rowCount > 0;
+ return this.policyInstanceDataSource.rowCount > 0;
+ }
+
+ nbInstances(): number {
+ return this.policyInstanceDataSource.policyInstances.length;
}
toLocalTime(utcTime: string): string {
}
+ createPolicyInstance(policyTypeSchema: PolicyTypeSchema): void {
+ let dialogRef = this.dialog.open(PolicyInstanceDialogComponent,
+ getPolicyDialogProperties(policyTypeSchema, null, this.darkMode));
+ const info: PolicyTypeInfo = this.getPolicyTypeInfo(policyTypeSchema);
+ dialogRef.afterClosed().subscribe(
+ (_) => {
+ info.isExpanded.next(info.isExpanded.getValue());
+ }
+ );
+ }
+
deleteInstance(instance: PolicyInstance): void {
this.confirmDialogService
.openConfirmDialog('Are you sure you want to delete this policy instance?')
switch (response.status) {
case 204:
this.notificationService.success('Delete succeeded!');
- this.instanceDataSource.getPolicyInstances();
+ this.policyInstanceDataSource.getPolicyInstances();
break;
default:
this.notificationService.warn('Delete failed ' + response.status + ' ' + response.body);
}
});
}
+
+ getPolicyTypeInfo(policyTypeSchema: PolicyTypeSchema): PolicyTypeInfo {
+ let info: PolicyTypeInfo = this.policyTypeInfo.get(policyTypeSchema.name);
+ if (!info) {
+ info = new PolicyTypeInfo(policyTypeSchema);
+ this.policyTypeInfo.set(policyTypeSchema.name, info);
+ }
+ return info;
+ }
+
+ refreshTable() {
+ this.policyInstanceDataSource.getPolicyInstances();
+ }
}