import { HttpClient } from '@angular/common/http'; import { Inject, Injectable } from '@angular/core'; import { select, Store } from '@ngrx/store'; import { Observable } from 'rxjs'; import { LoadReferenceDataAction } from '../actions/core.action'; import * as fromCore from '../reducers/root-reducer'; import { map } from 'rxjs/operators'; import { ReferenceData } from '../../shared/models/reference-data'; import { Entity } from '../../shared/models/entity'; import { TypedReferenceData } from '../../shared/models/typed-reference-data'; import { mapValues, map as _map, get } from 'lodash'; import { CaseDetails } from '../models/case-details'; import { LoadCaseDetailsAction } from '../actions/case-details.action'; import { Environment } from '../../shared/interfaces/environment.interface'; @Injectable() export class CoreService { referenceData: Observable<{ [type: string]: ReferenceData[] }>; caseDetails: Observable; constructor(private http: HttpClient, private store: Store, @Inject('environment') private environment: Environment) { this.referenceData = this.store.pipe( select(fromCore.getReferenceDataEntities), map((referenceData: { [type: string]: TypedReferenceData }) => { return mapValues(referenceData, (data: TypedReferenceData) => data.referenceData); })); this.caseDetails = this.store.pipe(select(fromCore.getSelectedCaseDetails)); } dispatchLoadReferenceData(url: string): void { this.store.dispatch(new LoadReferenceDataAction(url)); } dispatchLoadCaseDetails(payload: number): void { this.store.dispatch(new LoadCaseDetailsAction(payload)); } loadReferenceData(url: string): Observable[]> { return this.http.get(`${this.environment.userQueryService}/lookupData${url}`) .pipe(map((data: any) => { return _map(data, (referenceData: any, type: string) => { return { type, referenceData }; }); })); } getCaseDetails(payload: number): Observable { return this.http.get(`${this.environment.assessmentQueryService}Assessment/Case/${payload}`).pipe( map((data: unknown) => { return new CaseDetails(get(data, 'responseObject')); }), ); } }