import {Inject, Injectable} from '@angular/core'; import {CrdsContentBlockConfig} from './crds-content-block.config'; import {Observable} from 'rxjs'; import {catchError, map} from 'rxjs/operators'; import {ContentBlock} from './model/content-block'; import {Apollo, ApolloBase} from 'apollo-angular'; import {gql} from '@apollo/client/core'; export const GET_COPY = gql` query contentBlocks($category: [String\!]) { contentBlocks(filters: { category: $category }) { content title legacy_id } }`; @Injectable({ providedIn: 'root' }) export class CrdsContentBlockService { private apollo: ApolloBase; constructor(private apolloProvider: Apollo, @Inject('Config') private config: CrdsContentBlockConfig) { this.apollo = apolloProvider.use('contentBlockClient'); } static handleError(error: any) { console.log(error); return [[]]; } getContentBlocks(): Observable { return this.apollo.query({ query: GET_COPY, variables: { category: this.config.categories } }).pipe(map(results => { return results.data.contentBlocks.map(i => { const c = new ContentBlock(); Object.assign(c, i ); return c; }); }), catchError(CrdsContentBlockService.handleError)); } getContent(contentBlockTitle): Observable { return this.getContentBlocks().pipe( map(contentBlockWrapper => { return contentBlockWrapper.find(c => c.title && c.title === contentBlockTitle); }) ); } public getContentById(contentBlockId: number): Observable { return this.getContentBlocks().pipe( map(contentBlock => contentBlock.find(c => c.id && c.id === contentBlockId)) ); } }