security-c4po/security-c4po-angular/src/app/pentest-overview/pentest-table/pentest-table.component.ts

76 lines
2.4 KiB
TypeScript

import {Component, OnDestroy, OnInit} from '@angular/core';
import {NbGetters, NbTreeGridDataSource, NbTreeGridDataSourceBuilder} from '@nebular/theme';
import {Pentest, PentestEntry, transformPentestsToEntries} from '@shared/models/pentest.model';
import {PentestService} from '@shared/services/pentest.service';
import {Store} from '@ngxs/store';
import {ProjectState} from '@shared/stores/project-state/project-state';
import {untilDestroyed} from 'ngx-take-until-destroy';
import {catchError, switchMap} from 'rxjs/operators';
import {of} from 'rxjs';
import {getTitleKeyForRefNumber} from '@shared/functions/categories/get-title-key-for-ref-number.function';
@Component({
selector: 'app-pentest-table',
templateUrl: './pentest-table.component.html',
styleUrls: ['./pentest-table.component.scss']
})
export class PentestTableComponent implements OnInit, OnDestroy {
columns: Array<PentestColumns> = [PentestColumns.TEST_ID, PentestColumns.TITLE, PentestColumns.STATUS, PentestColumns.FINDINGS];
dataSource: NbTreeGridDataSource<PentestEntry>;
private data: PentestEntry[] = [];
getters: NbGetters<PentestEntry, PentestEntry> = {
dataGetter: (node: PentestEntry) => node,
childrenGetter: (node: PentestEntry) => node.childEntries || undefined,
expandedGetter: (node: PentestEntry) => !!node.expanded,
};
constructor(
private store: Store,
private pentestService: PentestService,
private dataSourceBuilder: NbTreeGridDataSourceBuilder<PentestEntry>
) {
this.dataSource = dataSourceBuilder.create(this.data, this.getters);
}
ngOnInit(): void {
this.loadPentestData();
}
loadPentestData(): void {
this.store.select(ProjectState.selectedCategory).pipe(
switchMap(category => this.pentestService.loadPentests(category)),
catchError(_ => of(null)),
untilDestroyed(this)
).subscribe({
next: (pentests: Pentest[]) => {
this.data = transformPentestsToEntries(pentests);
this.dataSource.setData(this.data, this.getters);
},
error: error => {
console.error(error);
}
});
}
// HTML only
getTitle(refNumber: string): string {
return getTitleKeyForRefNumber(refNumber);
}
ngOnDestroy(): void {
// This method must be present when using ngx-take-until-destroy
// even when empty
}
}
enum PentestColumns {
TEST_ID = 'testId',
TITLE = 'title',
STATUS = 'status',
FINDINGS = 'findings'
}