* limitations under the License.
* ========================LICENSE_END===================================
*/
-import { Component, OnInit, ViewChild } from '@angular/core';
-import { MatDialog } from '@angular/material/dialog';
-import { MatSort } from '@angular/material/sort';
import { animate, state, style, transition, trigger } from '@angular/animations';
+import { Component, OnInit } from '@angular/core';
+import { MatDialog } from '@angular/material/dialog';
+
+import { BehaviorSubject, Observable } from 'rxjs';
-import { PolicyService } from '../services/policy/policy.service';
-import { PolicyType } from '../interfaces/policy.types';
+import { NoTypePolicyInstanceDialogComponent } from './no-type-policy-instance-dialog.component';
+import { PolicyTypeSchema } from '../interfaces/policy.types';
import { PolicyTypeDataSource } from './policy-type.datasource';
import { getPolicyDialogProperties } from './policy-instance-dialog.component';
import { PolicyInstanceDialogComponent } from './policy-instance-dialog.component';
-import { NotificationService } from '../services/ui/notification.service';
-import { BehaviorSubject, Observable } from 'rxjs';
import { UiService } from '../services/ui/ui.service';
class PolicyTypeInfo {
- constructor(public type: PolicyType) { }
+ constructor(public type: PolicyTypeSchema) { }
isExpanded: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
}
})
export class PolicyControlComponent implements OnInit {
-
- policyTypesDataSource: PolicyTypeDataSource;
- @ViewChild(MatSort, { static: true }) sort: MatSort;
-
policyTypeInfo = new Map<string, PolicyTypeInfo>();
darkMode: boolean;
constructor(
- private policySvc: PolicyService,
+ private policyTypesDataSource: PolicyTypeDataSource,
private dialog: MatDialog,
- private notificationService: NotificationService,
private ui: UiService) { }
ngOnInit() {
- this.policyTypesDataSource = new PolicyTypeDataSource(this.policySvc, this.sort, this.notificationService);
- this.policyTypesDataSource.loadTable();
+ this.policyTypesDataSource.getPolicyTypes();
this.ui.darkModeState.subscribe((isDark) => {
this.darkMode = isDark;
});
}
- createPolicyInstance(policyType: PolicyType): void {
- const dialogRef = this.dialog.open(PolicyInstanceDialogComponent, getPolicyDialogProperties(policyType, null, this.darkMode));
- const info: PolicyTypeInfo = this.getPolicyTypeInfo(policyType);
+ createPolicyInstance(policyTypeSchema: PolicyTypeSchema): void {
+ let dialogRef;
+ if (this.isSchemaEmpty(policyTypeSchema)) {
+ dialogRef = this.dialog.open(NoTypePolicyInstanceDialogComponent,
+ getPolicyDialogProperties(policyTypeSchema, null, this.darkMode));
+ } else {
+ dialogRef = this.dialog.open(PolicyInstanceDialogComponent,
+ getPolicyDialogProperties(policyTypeSchema, null, this.darkMode));
+ }
+ const info: PolicyTypeInfo = this.getPolicyTypeInfo(policyTypeSchema);
dialogRef.afterClosed().subscribe(
- (result: any) => {
+ (_) => {
info.isExpanded.next(info.isExpanded.getValue());
}
);
}
- toggleListInstances(policyType: PolicyType): void {
- const info = this.getPolicyTypeInfo(policyType);
+ toggleListInstances(policyTypeSchema: PolicyTypeSchema): void {
+ const info = this.getPolicyTypeInfo(policyTypeSchema);
info.isExpanded.next(!info.isExpanded.getValue());
}
- getPolicyTypeInfo(policyType: PolicyType): PolicyTypeInfo {
- let info: PolicyTypeInfo = this.policyTypeInfo.get(policyType.name);
+ private isSchemaEmpty(policyTypeSchema: PolicyTypeSchema): boolean {
+ return Object.keys(policyTypeSchema.schemaObject).length === 0;
+ }
+
+ getPolicyTypeInfo(policyTypeSchema: PolicyTypeSchema): PolicyTypeInfo {
+ let info: PolicyTypeInfo = this.policyTypeInfo.get(policyTypeSchema.name);
if (!info) {
- info = new PolicyTypeInfo(policyType);
- this.policyTypeInfo.set(policyType.name, info);
+ info = new PolicyTypeInfo(policyTypeSchema);
+ this.policyTypeInfo.set(policyTypeSchema.name, info);
}
return info;
}
- getName(policyType: PolicyType): string {
- if (policyType.schemaObject.title) { return policyType.schemaObject.title; }
- return policyType.name;
+ getDisplayName(policyTypeSchema: PolicyTypeSchema): string {
+ if (policyTypeSchema.schemaObject.title) {
+ return policyTypeSchema.schemaObject.title;
+ }
+ return '< No type >';
+ }
+
+ isInstancesShown(policyTypeSchema: PolicyTypeSchema): boolean {
+ return this.getPolicyTypeInfo(policyTypeSchema).isExpanded.getValue();
}
- isInstancesShown(policyType: PolicyType): boolean {
- return this.getPolicyTypeInfo(policyType).isExpanded.getValue();
+ getExpandedObserver(policyTypeSchema: PolicyTypeSchema): Observable<boolean> {
+ return this.getPolicyTypeInfo(policyTypeSchema).isExpanded.asObservable();
}
- getExpandedObserver(policyType: PolicyType): Observable<boolean> {
- return this.getPolicyTypeInfo(policyType).isExpanded.asObservable();
+ refreshTables() {
+ this.policyTypesDataSource.getPolicyTypes();
}
}