X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-frontend%2Fsrc%2Fapp%2Fpolicy%2Fpolicy-instance%2Fpolicy-instance.component.ts;h=700e929728ff1dd1fa0b7ec836898cc6d16387cd;hb=b5b007356c7bd5bf9f4b99be9d748310dcf3987e;hp=0f34c43a87e1a96ff17cdb4f0dc4ad0fd5885733;hpb=800ab849929561945135745ba64ac563f816f333;p=portal%2Fnonrtric-controlpanel.git diff --git a/webapp-frontend/src/app/policy/policy-instance/policy-instance.component.ts b/webapp-frontend/src/app/policy/policy-instance/policy-instance.component.ts index 0f34c43..700e929 100644 --- a/webapp-frontend/src/app/policy/policy-instance/policy-instance.component.ts +++ b/webapp-frontend/src/app/policy/policy-instance/policy-instance.component.ts @@ -18,21 +18,29 @@ * ========================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 = new BehaviorSubject(false); +} @Component({ selector: 'nrcp-policy-instance', @@ -42,10 +50,13 @@ import { UiService } from '../../services/ui/ui.service'; export class PolicyInstanceComponent implements OnInit, AfterViewInit { - instanceDataSource: PolicyInstanceDataSource; + policyInstanceDataSource: PolicyInstanceDataSource; @Input() policyTypeSchema: PolicyTypeSchema; @Input() expanded: Observable; @ViewChild(MatSort, { static: true }) sort: MatSort; + policyTypeInfo = new Map(); + instanceDataSource: MatTableDataSource = new MatTableDataSource(); + policyInstanceForm: FormGroup; darkMode: boolean; constructor( @@ -55,23 +66,58 @@ export class PolicyInstanceComponent implements OnInit, AfterViewInit { 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(); } } @@ -87,7 +133,7 @@ export class PolicyInstanceComponent implements OnInit, AfterViewInit { PolicyInstanceDialogComponent, getPolicyDialogProperties(this.policyTypeSchema, instance, this.darkMode)).afterClosed().subscribe( (_: any) => { - this.instanceDataSource.getPolicyInstances(); + this.policyInstanceDataSource.getPolicyInstances(); } ); }, @@ -98,7 +144,11 @@ export class PolicyInstanceComponent implements OnInit, AfterViewInit { } hasInstances(): boolean { - return this.instanceDataSource.rowCount > 0; + return this.policyInstanceDataSource.rowCount > 0; + } + + nbInstances(): number { + return this.policyInstanceDataSource.policyInstances.length; } toLocalTime(utcTime: string): string { @@ -108,6 +158,17 @@ export class PolicyInstanceComponent implements OnInit, AfterViewInit { } + 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?') @@ -120,7 +181,7 @@ export class PolicyInstanceComponent implements OnInit, AfterViewInit { 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); @@ -132,4 +193,17 @@ export class PolicyInstanceComponent implements OnInit, AfterViewInit { } }); } + + 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(); + } }