UNPKG

@spartacus/core

Version:

Spartacus - the core framework

67 lines 10.9 kB
import { Injectable } from '@angular/core'; import { NavigationEnd } from '@angular/router'; import { combineLatest, defer } from 'rxjs'; import { filter, map, shareReplay, startWith } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "../facade/cms.service"; import * as i2 from "../../i18n/translation.service"; import * as i3 from "./routing/routing-page-meta.resolver"; import * as i4 from "@angular/router"; import * as i5 from "./routing/page-link.service"; export class BasePageMetaResolver { constructor(cmsService, translation, routingPageMetaResolver, router, pageLinkService) { this.cmsService = cmsService; this.translation = translation; this.routingPageMetaResolver = routingPageMetaResolver; this.router = router; this.pageLinkService = pageLinkService; /** * Helper to provide access to the current CMS page */ this.page$ = defer(() => this.cmsService.getCurrentPage()).pipe(filter((p) => Boolean(p))); this.title$ = this.page$.pipe(map((p) => p.title)); this.description$ = this.page$.pipe(map((p) => p.description)); this.robots$ = this.page$.pipe(map((page) => page.robots || [])); /** * Breadcrumb for the home page. */ this.homeBreadcrumb$ = this.translation .translate('common.home') .pipe(map((label) => [{ label: label, link: '/' }])); /** * All the resolved breadcrumbs (including those from Angular child routes). */ this.breadcrumb$ = combineLatest([ this.homeBreadcrumb$, defer(() => { var _a; return (_a = this.routingPageMetaResolver) === null || _a === void 0 ? void 0 : _a.resolveBreadcrumbs(); }), ]).pipe(map((breadcrumbs) => breadcrumbs.flat()), shareReplay({ bufferSize: 1, refCount: true })); } resolveTitle() { return this.title$; } resolveDescription() { 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() { return this.breadcrumb$; } resolveRobots() { return this.robots$; } resolveCanonicalUrl(options) { return this.router.events.pipe(filter((ev) => ev instanceof NavigationEnd), startWith(null), map(() => this.pageLinkService.getCanonicalUrl(options))); } } BasePageMetaResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: BasePageMetaResolver, deps: [{ token: i1.CmsService }, { token: i2.TranslationService }, { token: i3.RoutingPageMetaResolver }, { token: i4.Router }, { token: i5.PageLinkService }], target: i0.ɵɵFactoryTarget.Injectable }); BasePageMetaResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: BasePageMetaResolver, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: BasePageMetaResolver, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.CmsService }, { type: i2.TranslationService }, { type: i3.RoutingPageMetaResolver }, { type: i4.Router }, { type: i5.PageLinkService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wYWdlLW1ldGEucmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9jbXMvcGFnZS9iYXNlLXBhZ2UtbWV0YS5yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFrQnJFLE1BQU0sT0FBTyxvQkFBb0I7SUFRL0IsWUFDWSxVQUFzQixFQUN0QixXQUErQixFQUMvQix1QkFBZ0QsRUFDaEQsTUFBYyxFQUNkLGVBQWdDO1FBSmhDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUc1Qzs7V0FFRztRQUNPLFVBQUssR0FBcUIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUNqQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEIsV0FBTSxHQUFtQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDaEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQ3BCLENBQUM7UUFFUSxpQkFBWSxHQUFtQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDdEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQzFCLENBQUM7UUFFUSxZQUFPLEdBQWlDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUMvRCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQ2pDLENBQUM7UUFFRjs7V0FFRztRQUNPLG9CQUFlLEdBQWlDLElBQUksQ0FBQyxXQUFXO2FBQ3ZFLFNBQVMsQ0FBQyxhQUFhLENBQUM7YUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFxQixDQUFDLENBQUMsQ0FBQztRQUUzRTs7V0FFRztRQUNPLGdCQUFXLEdBQWlDLGFBQWEsQ0FBQztZQUNsRSxJQUFJLENBQUMsZUFBZTtZQUNwQixLQUFLLENBQUMsR0FBRyxFQUFFLFdBQUMsT0FBQSxNQUFBLElBQUksQ0FBQyx1QkFBdUIsMENBQUUsa0JBQWtCLEVBQUUsQ0FBQSxFQUFBLENBQUM7U0FDaEUsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUN4QyxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO0lBckNDLENBQUM7SUF1Q0osWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBNkI7UUFDL0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzVCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFZLGFBQWEsQ0FBQyxFQUMzQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ2YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQ3pELENBQUM7SUFDSixDQUFDOztpSEEvRVUsb0JBQW9CO3FIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTsyRkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRlZmVyLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2kxOG4vdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDbXNTZXJ2aWNlIH0gZnJvbSAnLi4vZmFjYWRlL2Ntcy5zZXJ2aWNlJztcbmltcG9ydCB7IEJyZWFkY3J1bWJNZXRhLCBQYWdlLCBQYWdlUm9ib3RzTWV0YSB9IGZyb20gJy4uL21vZGVsL3BhZ2UubW9kZWwnO1xuaW1wb3J0IHsgQ2Fub25pY2FsVXJsT3B0aW9ucyB9IGZyb20gJy4vY29uZmlnL3BhZ2UtbWV0YS5jb25maWcnO1xuaW1wb3J0IHtcbiAgQ2Fub25pY2FsUGFnZVJlc29sdmVyLFxuICBQYWdlQnJlYWRjcnVtYlJlc29sdmVyLFxuICBQYWdlRGVzY3JpcHRpb25SZXNvbHZlcixcbiAgUGFnZVJvYm90c1Jlc29sdmVyLFxuICBQYWdlVGl0bGVSZXNvbHZlcixcbn0gZnJvbSAnLi9wYWdlLnJlc29sdmVycyc7XG5pbXBvcnQgeyBQYWdlTGlua1NlcnZpY2UgfSBmcm9tICcuL3JvdXRpbmcvcGFnZS1saW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGluZ1BhZ2VNZXRhUmVzb2x2ZXIgfSBmcm9tICcuL3JvdXRpbmcvcm91dGluZy1wYWdlLW1ldGEucmVzb2x2ZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQmFzZVBhZ2VNZXRhUmVzb2x2ZXJcbiAgaW1wbGVtZW50c1xuICAgIFBhZ2VUaXRsZVJlc29sdmVyLFxuICAgIFBhZ2VEZXNjcmlwdGlvblJlc29sdmVyLFxuICAgIFBhZ2VCcmVhZGNydW1iUmVzb2x2ZXIsXG4gICAgUGFnZVJvYm90c1Jlc29sdmVyLFxuICAgIENhbm9uaWNhbFBhZ2VSZXNvbHZlclxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY21zU2VydmljZTogQ21zU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRpb246IFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcm91dGluZ1BhZ2VNZXRhUmVzb2x2ZXI6IFJvdXRpbmdQYWdlTWV0YVJlc29sdmVyLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQgcGFnZUxpbmtTZXJ2aWNlOiBQYWdlTGlua1NlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGN1cnJlbnQgQ01TIHBhZ2VcbiAgICovXG4gIHByb3RlY3RlZCBwYWdlJDogT2JzZXJ2YWJsZTxQYWdlPiA9IGRlZmVyKCgpID0+XG4gICAgdGhpcy5jbXNTZXJ2aWNlLmdldEN1cnJlbnRQYWdlKClcbiAgKS5waXBlKGZpbHRlcigocCkgPT4gQm9vbGVhbihwKSkpO1xuXG4gIHByb3RlY3RlZCB0aXRsZSQ6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPiA9IHRoaXMucGFnZSQucGlwZShcbiAgICBtYXAoKHApID0+IHAudGl0bGUpXG4gICk7XG5cbiAgcHJvdGVjdGVkIGRlc2NyaXB0aW9uJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+ID0gdGhpcy5wYWdlJC5waXBlKFxuICAgIG1hcCgocCkgPT4gcC5kZXNjcmlwdGlvbilcbiAgKTtcblxuICBwcm90ZWN0ZWQgcm9ib3RzJDogT2JzZXJ2YWJsZTxQYWdlUm9ib3RzTWV0YVtdPiA9IHRoaXMucGFnZSQucGlwZShcbiAgICBtYXAoKHBhZ2UpID0+IHBhZ2Uucm9ib3RzIHx8IFtdKVxuICApO1xuXG4gIC8qKlxuICAgKiBCcmVhZGNydW1iIGZvciB0aGUgaG9tZSBwYWdlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGhvbWVCcmVhZGNydW1iJDogT2JzZXJ2YWJsZTxCcmVhZGNydW1iTWV0YVtdPiA9IHRoaXMudHJhbnNsYXRpb25cbiAgICAudHJhbnNsYXRlKCdjb21tb24uaG9tZScpXG4gICAgLnBpcGUobWFwKChsYWJlbCkgPT4gW3sgbGFiZWw6IGxhYmVsLCBsaW5rOiAnLycgfV0gYXMgQnJlYWRjcnVtYk1ldGFbXSkpO1xuXG4gIC8qKlxuICAgKiBBbGwgdGhlIHJlc29sdmVkIGJyZWFkY3J1bWJzIChpbmNsdWRpbmcgdGhvc2UgZnJvbSBBbmd1bGFyIGNoaWxkIHJvdXRlcykuXG4gICAqL1xuICBwcm90ZWN0ZWQgYnJlYWRjcnVtYiQ6IE9ic2VydmFibGU8QnJlYWRjcnVtYk1ldGFbXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmhvbWVCcmVhZGNydW1iJCxcbiAgICBkZWZlcigoKSA9PiB0aGlzLnJvdXRpbmdQYWdlTWV0YVJlc29sdmVyPy5yZXNvbHZlQnJlYWRjcnVtYnMoKSksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChicmVhZGNydW1icykgPT4gYnJlYWRjcnVtYnMuZmxhdCgpKSxcbiAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICk7XG5cbiAgcmVzb2x2ZVRpdGxlKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGUkO1xuICB9XG5cbiAgcmVzb2x2ZURlc2NyaXB0aW9uKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb24kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgc2luZ2xlIGJyZWFkY3J1bWIgaXRlbSB0byB0aGUgaG9tZSBwYWdlIGZvciBlYWNoIGBDb250ZW50UGFnZWAuXG4gICAqIFRoZSBob21lIHBhZ2UgbGFiZWwgaXMgcmVzb2x2ZWQgZnJvbSB0aGUgdHJhbnNsYXRpb24gc2VydmljZS5cbiAgICovXG4gIHJlc29sdmVCcmVhZGNydW1icygpOiBPYnNlcnZhYmxlPEJyZWFkY3J1bWJNZXRhW10gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5icmVhZGNydW1iJDtcbiAgfVxuXG4gIHJlc29sdmVSb2JvdHMoKTogT2JzZXJ2YWJsZTxQYWdlUm9ib3RzTWV0YVtdPiB7XG4gICAgcmV0dXJuIHRoaXMucm9ib3RzJDtcbiAgfVxuXG4gIHJlc29sdmVDYW5vbmljYWxVcmwob3B0aW9ucz86IENhbm9uaWNhbFVybE9wdGlvbnMpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgIGZpbHRlcigoZXYpID0+IGV2IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICBtYXAoKCkgPT4gdGhpcy5wYWdlTGlua1NlcnZpY2UuZ2V0Q2Fub25pY2FsVXJsKG9wdGlvbnMpKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==