File

projects/core/src/cms/page/base-page-meta.resolver.ts

Index

Properties
Methods

Constructor

constructor(cmsService: CmsService, translation: TranslationService, routingPageMetaResolver: RoutingPageMetaResolver, router: Router, pageLinkService: PageLinkService)
Parameters :
Name Type Optional
cmsService CmsService No
translation TranslationService No
routingPageMetaResolver RoutingPageMetaResolver No
router Router No
pageLinkService PageLinkService No

Methods

resolveBreadcrumbs
resolveBreadcrumbs()

Resolves a single breadcrumb item to the home page for each ContentPage. The home page label is resolved from the translation service.

resolveCanonicalUrl
resolveCanonicalUrl(options?: CanonicalUrlOptions)
Parameters :
Name Type Optional
options CanonicalUrlOptions Yes
Returns : Observable<string>
resolveDescription
resolveDescription()
resolveRobots
resolveRobots()
resolveTitle
resolveTitle()

Properties

Protected breadcrumb$
Type : Observable<BreadcrumbMeta[]>
Default value : combineLatest([ this.homeBreadcrumb$, defer(() => this.routingPageMetaResolver?.resolveBreadcrumbs()), ]).pipe( map((breadcrumbs) => breadcrumbs.flat()), shareReplay({ bufferSize: 1, refCount: true }) )

All the resolved breadcrumbs (including those from Angular child routes).

Protected description$
Type : Observable<string | undefined>
Default value : this.page$.pipe( map((p) => p.description) )
Protected homeBreadcrumb$
Type : Observable<BreadcrumbMeta[]>
Default value : this.translation .translate('common.home') .pipe(map((label) => [{ label: label, link: '/' }] as BreadcrumbMeta[]))

Breadcrumb for the home page.

Protected page$
Type : Observable<Page>
Default value : defer(() => this.cmsService.getCurrentPage() ).pipe(filter((p) => Boolean(p)))

Helper to provide access to the current CMS page

Protected robots$
Type : Observable<PageRobotsMeta[]>
Default value : this.page$.pipe( map((page) => page.robots || []) )
Protected title$
Type : Observable<string | undefined>
Default value : this.page$.pipe( map((p) => p.title) )
import { Injectable } from '@angular/core';
import { NavigationEnd, Router } from '@angular/router';
import { combineLatest, defer, Observable } from 'rxjs';
import { filter, map, shareReplay, startWith } from 'rxjs/operators';
import { TranslationService } from '../../i18n/translation.service';
import { CmsService } from '../facade/cms.service';
import { BreadcrumbMeta, Page, PageRobotsMeta } from '../model/page.model';
import { CanonicalUrlOptions } from './config/page-meta.config';
import {
  CanonicalPageResolver,
  PageBreadcrumbResolver,
  PageDescriptionResolver,
  PageRobotsResolver,
  PageTitleResolver,
} from './page.resolvers';
import { PageLinkService } from './routing/page-link.service';
import { RoutingPageMetaResolver } from './routing/routing-page-meta.resolver';

@Injectable({
  providedIn: 'root',
})
export class BasePageMetaResolver
  implements
    PageTitleResolver,
    PageDescriptionResolver,
    PageBreadcrumbResolver,
    PageRobotsResolver,
    CanonicalPageResolver
{
  constructor(
    protected cmsService: CmsService,
    protected translation: TranslationService,
    protected routingPageMetaResolver: RoutingPageMetaResolver,
    protected router: Router,
    protected pageLinkService: PageLinkService
  ) {}

  /**
   * Helper to provide access to the current CMS page
   */
  protected page$: Observable<Page> = defer(() =>
    this.cmsService.getCurrentPage()
  ).pipe(filter((p) => Boolean(p)));

  protected title$: Observable<string | undefined> = this.page$.pipe(
    map((p) => p.title)
  );

  protected description$: Observable<string | undefined> = this.page$.pipe(
    map((p) => p.description)
  );

  protected robots$: Observable<PageRobotsMeta[]> = this.page$.pipe(
    map((page) => page.robots || [])
  );

  /**
   * Breadcrumb for the home page.
   */
  protected homeBreadcrumb$: Observable<BreadcrumbMeta[]> = this.translation
    .translate('common.home')
    .pipe(map((label) => [{ label: label, link: '/' }] as BreadcrumbMeta[]));

  /**
   * All the resolved breadcrumbs (including those from Angular child routes).
   */
  protected breadcrumb$: Observable<BreadcrumbMeta[]> = combineLatest([
    this.homeBreadcrumb$,
    defer(() => this.routingPageMetaResolver?.resolveBreadcrumbs()),
  ]).pipe(
    map((breadcrumbs) => breadcrumbs.flat()),
    shareReplay({ bufferSize: 1, refCount: true })
  );

  resolveTitle(): Observable<string | undefined> {
    return this.title$;
  }

  resolveDescription(): Observable<string | undefined> {
    return this.description$;
  }

  /**
   * Resolves a single breadcrumb item to the home page for each `ContentPage`.
   * The home page label is resolved from the translation service.
   */
  resolveBreadcrumbs(): Observable<BreadcrumbMeta[] | undefined> {
    return this.breadcrumb$;
  }

  resolveRobots(): Observable<PageRobotsMeta[]> {
    return this.robots$;
  }

  resolveCanonicalUrl(options?: CanonicalUrlOptions): Observable<string> {
    return this.router.events.pipe(
      filter((ev) => ev instanceof NavigationEnd),
      startWith(null),
      map(() => this.pageLinkService.getCanonicalUrl(options))
    );
  }
}

result-matching ""

    No results matching ""