monitor/src/app/services/stakeholder.service.ts

55 lines
2.0 KiB
TypeScript

import {Injectable} from "@angular/core";
import {HttpClient, HttpErrorResponse} from "@angular/common/http";
import {Observable} from "rxjs";
import {Indicator, Stakeholder} from "../utils/entities/stakeholder";
import {map} from "rxjs/operators";
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
@Injectable()
export class StakeholderService {
constructor(private http: HttpClient) {
}
getStakeholder(alias: string): Observable<Stakeholder> {
return this.http.get<any>('./assets/stakeholders.json').pipe(map(json => {
let stakeholder = json.stakeholders.filter(stakeholder => stakeholder.alias === alias)[0];
if (stakeholder) {
stakeholder.topics = stakeholder.topics.filter(topic => topic.isActive && topic.isPublic);
return stakeholder;
} else {
throw new HttpErrorResponse({
error: {
message: 'No Stakeholder has been found',
status: 404
}
})
}
}));
}
getIndicator(id: string): Observable<Indicator> {
return this.http.get<any>('./assets/stakeholders.json').pipe(map(json => {
return json.indicators.filter(indicator => indicator.id === id)[0];
}))
}
getIndicators(ids: string[]): Observable<Indicator[]> {
return this.http.get<any>('./assets/stakeholders.json').pipe(map(json => {
return json.indicators.filter(indicator => ids.indexOf(indicator.id) !== -1);
}))
}
getNumber(properties: EnvProperties, url: string, jsonPath: string[], stakeholder: Stakeholder): Observable<any> {
const statsUrl = url.replace('{index_shortName}', stakeholder.index_shortName).
replace('{index_id}', stakeholder.index_id).
replace('{index_name}', stakeholder.index_name);
return this.http.get<any>(properties.statisticsAPIURL + statsUrl).pipe(map(response => {
jsonPath.forEach(field => {
response = response[field];
});
return response;
}));
}
}