File

projects/storefrontlib/cms-structure/page/component/services/cms-injector.service.ts

Description

Used to prepare injector for CMS components.

Injector will take into account configured providers and provides CmsComponentData for specified component's uid

Index

Methods

Constructor

constructor(cmsComponentsService: CmsComponentsService, injector: Injector)
Parameters :
Name Type Optional
cmsComponentsService CmsComponentsService No
injector Injector No

Methods

Public getInjector
getInjector(type: string, uid: string, parentInjector?: Injector)
Parameters :
Name Type Optional
type string No
uid string No
parentInjector Injector Yes
Returns : Injector
import { Injectable, Injector } from '@angular/core';
import { CmsComponentsService } from '../../../services/cms-components.service';
import { CmsComponentData } from '../../model/cms-component-data';
import { ComponentDataProvider } from './component-data.provider';

/**
 * Used to prepare injector for CMS components.
 *
 * Injector will take into account configured providers and provides CmsComponentData
 * for specified component's uid
 */
@Injectable({
  providedIn: 'root',
})
export class CmsInjectorService {
  constructor(
    protected cmsComponentsService: CmsComponentsService,
    protected injector: Injector
  ) {}

  public getInjector(
    type: string,
    uid: string,
    parentInjector?: Injector
  ): Injector {
    const configProviders =
      this.cmsComponentsService.getMapping(type)?.providers ?? [];
    return Injector.create({
      providers: [
        {
          provide: CmsComponentData,
          useFactory: (dataProvider: ComponentDataProvider) => ({
            uid,
            data$: dataProvider.get(uid, type),
          }),
          deps: [ComponentDataProvider],
        },
        ...configProviders,
      ],
      parent: parentInjector ?? this.injector,
    });
  }
}

result-matching ""

    No results matching ""