src/app/components/policy-guide/docs/compliance/compliance-dashboard/compliance-dashboard.component.ts
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { Agency, ClientService } from '../../../../../services/client';
import { StatusService } from '../../../../../services/status';
import { Subscription } from 'rxjs/Subscription';
import { SeoService } from '../../../../../services/seo';
@Component({
selector: 'compliance-dashboard',
template: require('./compliance-dashboard.template.html')
})
export class ComplianceDashboardComponent implements OnInit, OnDestroy {
agencyIds: string[] = [];
public statuses = [];
public updated;
private statusesSub: Subscription;
constructor(
private clientService: ClientService,
private statusService: StatusService
) {
}
ngOnInit() {
this.getAgencyIds();
this.getStatuses();
}
ngOnDestroy() {
if (this.statusesSub) this.statusesSub.unsubscribe();
}
getAgencyIds() {
this.clientService.getAgencies().subscribe(
(agencies: Agency[]) => {
this.agencyIds = agencies.map(agency => agency.acronym);
}
);
}
_setRequirementStatuses(agencyRequirements) {
let requirements = [];
let overallStatus = 'noncompliant';
for (let requirement in agencyRequirements) {
if (agencyRequirements.hasOwnProperty(requirement)) {
const rValue = agencyRequirements[requirement];
let requirementStatus = 'noncompliant';
if (rValue >= 1) {
requirementStatus = 'compliant';
} else if (rValue >= 0.25 && rValue < 1) {
requirementStatus = 'partial';
}
if (requirement !== 'overallCompliance') {
requirements.push({ text: requirement, status: requirementStatus });
} else {
overallStatus = requirementStatus;
}
}
}
return { requirements, overallStatus };
}
_getCodePath(status) {
if (this.agencyIds.find(x => x === status)) {
return '/explore-code/agencies/' + status;
}
return null;
}
getStatuses() {
this.statusesSub = this.clientService.getStatuses().
subscribe((result) => {
if (result) {
for (let statusAgency in result.statuses) {
if (result.statuses.hasOwnProperty(statusAgency) &&
result.statuses[statusAgency].metadata.agency.complianceDashboard) {
let agencyStatus = result.statuses[statusAgency];
const {requirements, overallStatus} = this._setRequirementStatuses(agencyStatus.requirements);
this.statuses.push({
id: statusAgency,
agency: {
id: result.statuses[statusAgency].metadata.agency.id,
name: result.statuses[statusAgency].metadata.agency.name,
overall: overallStatus,
codePath: this._getCodePath(status)
},
requirements: requirements
});
this.updated = result.timestamp;
}
}
this.statuses = this.statuses.sort((a, b) => {
return a.agency.id - b.agency.id;
});
} else {
console.log('Error.');
}
});
}
getIcon(status) {
return `assets/img/logos/agencies/${status.id}.png`;
}
}