import {Injectable} from '@angular/core'; import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse} from '@angular/common/http'; import {Observable, of} from 'rxjs'; // @ts-ignore import * as dataCards from '../assets/data-cards.mock.json'; import {finalize, map} from 'rxjs/operators'; import {JsonTransformerUtil} from './json-transformer.util'; // @ts-ignore import * as userContext from '../assets/user-context.mock.json'; import {ActiveRequests} from '../app/services/active-requests.service'; const urls = [ { url: 'http://mock/api/maternity/data-card', json: dataCards }, { url: 'http://mock/api/usercontext', json: userContext } ]; @Injectable() export class HttpMockRequestInterceptor implements HttpInterceptor { constructor(private activeRequests: ActiveRequests) {} intercept(request: HttpRequest, next: HttpHandler): Observable> { this.activeRequests._registerBlockingRequest(); for (const element of urls) { if (request.url === element.url) { console.log('Loaded from json : ' + request.url); this.activeRequests._unregisterBlockingRequest(); return of(new HttpResponse({ status: 200, body: ((element.json) as any).default })); } } console.log('Intercepted httpCall: ' + request.url); return next.handle(request).pipe( map((event: HttpEvent) => { if (event instanceof HttpResponse) { const replaced = JsonTransformerUtil.transformDates(event.body); return event.clone({body: replaced}); } return event; }), finalize(() => this.activeRequests._unregisterBlockingRequest()) ); } }