@spartacus/core
Version:
Spartacus - the core framework
67 lines • 10.9 kB
JavaScript
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==