import { Injectable } from '@angular/core'; import {ApiService} from './api.service'; import {HttpClient} from '@angular/common/http'; import {BehaviorSubject, Observable} from 'rxjs'; import { CreateUltrasoundObservationsRequest, ObservationTable, CreateRegularObservationsRequest, ScanningObservationTable, } from '@nspop/gm-web-facade-api'; @Injectable({ providedIn: 'root' }) export class ObservationService extends ApiService { constructor(httpClient: HttpClient) { super('/observation', httpClient); } // Inner subjects - for manually publishing updates to subscribers private innerUltrasoundObservationTable: BehaviorSubject = new BehaviorSubject(undefined); private innerClinicalObservationTable: BehaviorSubject = new BehaviorSubject(undefined); // Observables (from inner subjects) - subscribe to these to get updated info! public ultrasoundObservationTable$: Observable = this.innerUltrasoundObservationTable.asObservable(); public clinicalObservationTable$: Observable = this.innerClinicalObservationTable.asObservable(); // Refresh methods - these are the ones that actually call the server and manually publishes new data public refresh(): void { this.refreshUltrasoundObservationTable(); this.refreshClinicalObservationTable(); } public refreshUltrasoundObservationTable(): void { this.getUltrasoundObservationTable().subscribe((table: ScanningObservationTable) => { this.innerUltrasoundObservationTable.next(table); }); } public refreshClinicalObservationTable(): void { this.getClinicalObservationTable().subscribe((table: ObservationTable) => { this.innerClinicalObservationTable.next(table); }); } // Overriding api.service methods createUltrasoundObservations(observations: CreateUltrasoundObservationsRequest): Observable { return this.extendUrlAndCall('/scan', () => super.create(observations)); } createRegularObservations(observations: CreateRegularObservationsRequest): Observable { return this.extendUrlAndCall('/regular', () => super.create(observations)); } getUltrasoundObservationTable(): Observable { return this.extendUrlAndCall('/table/scan', () => super.getAll()); } getClinicalObservationTable(): Observable { return this.extendUrlAndCall('/table/clinical', () => super.getAll()); } }