import {Inject, Injectable, LOCALE_ID} from '@angular/core'; import {HttpClient} from '@angular/common/http'; import {AppConfig} from '../shared/app.config'; import {Observable, of} from 'rxjs'; import {catchError, switchMap} from 'rxjs/operators'; @Injectable({ providedIn: 'root', }) export class SchemaService { constructor(private httpClient: HttpClient, private appConfig: AppConfig, @Inject(LOCALE_ID) private locale) { } ApiEndpoint() { return this.appConfig.getConfig('apiEndPoint'); } /** Takes decoded schema url id */ public getSchema(id): Observable { const encodedId = encodeURIComponent(id); return this.httpClient.get(`${this.ApiEndpoint()}/api/v1/schema/${encodedId}`); } public getSchemaLayout(schemaUrl: string, locale: string): Observable { const encodedId = encodeURIComponent(schemaUrl); return this.httpClient.get(`${this.ApiEndpoint()}/api/v1/schema/${encodedId}/layout/${locale}`); } public getSchemaAndLayout(schemaUrl: string, locale: string = this.locale): Observable<{schemaJson: any, schemaLayout: any}> { return this.getSchema(schemaUrl).pipe( switchMap( schemaJson => this.getSchemaLayout(schemaUrl, locale) .pipe(catchError(err => { return of(undefined); })), (schemaJson, schemaLayout) => { return ({schemaJson, schemaLayout}); } )); } }