import { NgModule, ModuleWithProviders } from '@angular/core'; import { CommonModule } from '@angular/common'; import { HttpClientModule } from '@angular/common/http'; import { CrdsContentBlockComponent } from './crds-content-block.component'; import { CrdsContentBlockService } from './crds-content-block.service'; import { ICrdsContentBlockConfig } from './crds-content-block.config'; import { SafeHtmlPipe } from './pipes/safe-html.pipe'; import { HttpLink } from 'apollo-angular/http'; import { InMemoryCache } from '@apollo/client/core'; import { APOLLO_NAMED_OPTIONS, NamedOptions } from 'apollo-angular'; export function createApollo(httpLink: HttpLink, config: ICrdsContentBlockConfig): NamedOptions { return { contentBlockClient: { link: httpLink.create({ uri: config.endpoint }), cache: new InMemoryCache(), } }; } @NgModule({ declarations: [CrdsContentBlockComponent, SafeHtmlPipe], providers: [CrdsContentBlockService], exports: [CrdsContentBlockComponent, CommonModule], imports: [HttpClientModule], bootstrap: [CrdsContentBlockComponent] }) export class CrdsContentBlockModule { public static forRoot(config: ICrdsContentBlockConfig): ModuleWithProviders { return { ngModule: CrdsContentBlockModule, providers: [ CrdsContentBlockService, { provide: 'Config', useValue: config }, { provide: APOLLO_NAMED_OPTIONS, useFactory: createApollo, deps: [HttpLink, 'Config'], }, ] }; } }