import { Injectable } from '@angular/core'; import {HttpClient, HttpHeaders} from '@angular/common/http'; import {LocalStorageService} from 'angular-2-local-storage'; import {Observable} from 'rxjs'; import {ErrorComponent} from '../error/error.component'; import {ModalService} from '@inst-iot/bosch-angular-ui-components'; @Injectable({ providedIn: 'root' }) export class ApiService { private host = '/api'; constructor( private http: HttpClient, private storage: LocalStorageService, private modalService: ModalService ) { } get(url, f: (data?: T, err?) => void = () => {}) { this.requestErrorHandler(this.http.get(this.host + url, this.authOptions()), f); } post(url, data = null, f: (data?: T, err?) => void = () => {}) { this.requestErrorHandler(this.http.post(this.host + url, data, this.authOptions()), f); } put(url, data = null, f: (data?: T, err?) => void = () => {}) { this.requestErrorHandler(this.http.put(this.host + url, data, this.authOptions()), f); } delete(url, f: (data?: T, err?) => void = () => {}) { this.requestErrorHandler(this.http.delete(this.host + url, this.authOptions()), f); } private requestErrorHandler(observable: Observable, f: (data?: T, err?) => void) { observable.subscribe(data => { f(data, undefined); }, err => { if (f.length === 2) { f(undefined, err); } else { const modalRef = this.modalService.openComponent(ErrorComponent); modalRef.instance.message = 'Network request failed!'; } }); } private authOptions() { const auth = this.storage.get('basicAuth'); if (auth) { return {headers: new HttpHeaders({Authorization: 'Basic ' + auth})}; } else { return {}; } } }