-
-
-export class PolicyInstanceComponent implements OnInit, AfterViewInit {
- 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 policySvc: PolicyService,
- private dialog: MatDialog,
- private errorDialogService: ErrorDialogService,
- 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('')
+export class PolicyInstanceComponent implements OnInit {
+ public slice: number = 1000;
+ @Input() policyTypeSchema: PolicyTypeSchema;
+ darkMode: boolean;
+ instanceDataSource: MatTableDataSource<PolicyInstance>;
+ policyInstanceForm: FormGroup;
+ private policyInstanceSubject = new BehaviorSubject<PolicyInstance[]>([]);
+ policyInstances: PolicyInstance[] = [];
+ private loadingSubject$ = new BehaviorSubject<boolean>(false);
+ public loading$ = this.loadingSubject$.asObservable();
+ public truncated = false;
+
+ constructor(
+ private policySvc: PolicyService,
+ private dialog: MatDialog,
+ 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.getPolicyInstances();
+ this.policyInstanceSubject.subscribe((data) => {
+ this.instanceDataSource = new MatTableDataSource<PolicyInstance>(data);
+
+ 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.policyInstanceForm.valueChanges.subscribe((value) => {
+ const filter = {
+ ...value,
+ id: value.id.trim().toLowerCase(),
+ } as string;
+ this.instanceDataSource.filter = filter;
+ });
+
+ this.ui.darkModeState.subscribe((isDark) => {
+ this.darkMode = isDark;
+ });
+ }
+
+ getPolicyInstances() {
+ this.policyInstances = [] as PolicyInstance[];
+ this.loadingSubject$.next(true);
+ this.policySvc
+ .getPolicyInstancesByType(this.policyTypeSchema.id)
+ .pipe(
+ map((data) => {
+ if (data.policy_ids.length > this.slice) {
+ this.truncated = true;
+ data.policy_ids = data.policy_ids.slice(0, this.slice);
+ }
+ return data;
+ }),
+ mergeMap((policyIds) =>
+ forkJoin(
+ policyIds.policy_ids.map((id) => {
+ return forkJoin([
+ this.policySvc.getPolicyInstance(id),
+ this.policySvc.getPolicyStatus(id),
+ ]);