UNPKG

@spartacus/storefront

Version:

Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.

54 lines 6.64 kB
import { Inject, Injectable, Optional } from '@angular/core'; import { combineLatest, of } from 'rxjs'; import { map, switchMap } from 'rxjs/operators'; import { JSONLD_PRODUCT_BUILDER } from '../tokens'; import * as i0 from "@angular/core"; import * as i1 from "../../../../../cms-components/product/current-product.service"; /** * Adds the minimal structured data for the product, see https://schema.org/product. * The actual data collection is delegated to `JsonLdBuilder`s, which can be injected * using the `JSONLD_PRODUCT_BUILDER` token. */ export class ProductSchemaBuilder { constructor(currentProduct, builders) { this.currentProduct = currentProduct; this.builders = builders; } build() { return this.currentProduct.getProduct().pipe(switchMap((product) => { if (product) { return combineLatest(this.collect(product)).pipe(map((res) => Object.assign({}, ...res))); } return of({}); })); } collect(product) { if (!product || !product.code) { return []; } const builders = this.builders ? this.builders.map((builder) => builder.build(product)) : []; return [ of({ '@context': 'http://schema.org', '@type': 'Product', }), ...builders, ]; } } ProductSchemaBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ProductSchemaBuilder, deps: [{ token: i1.CurrentProductService }, { token: JSONLD_PRODUCT_BUILDER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); ProductSchemaBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ProductSchemaBuilder, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ProductSchemaBuilder, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.CurrentProductService }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [JSONLD_PRODUCT_BUILDER] }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zY2hlbWEuYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0b3JlZnJvbnRsaWIvY21zLXN0cnVjdHVyZS9zZW8vc3RydWN0dXJlZC1kYXRhL2J1aWxkZXJzL3Byb2R1Y3QvcHJvZHVjdC1zY2hlbWEuYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0QsT0FBTyxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7OztBQUVuRDs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUNVLGNBQXFDLEVBR25DLFFBQWtDO1FBSHBDLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUduQyxhQUFRLEdBQVIsUUFBUSxDQUEwQjtJQUMzQyxDQUFDO0lBRUosS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQzFDLFNBQVMsQ0FBQyxDQUFDLE9BQWdCLEVBQUUsRUFBRTtZQUM3QixJQUFJLE9BQU8sRUFBRTtnQkFDWCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM5QyxHQUFHLENBQUMsQ0FBQyxHQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FDOUMsQ0FBQzthQUNIO1lBQ0QsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFUyxPQUFPLENBQUMsT0FBZ0I7UUFDaEMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDN0IsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRO1lBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsT0FBTztZQUNMLEVBQUUsQ0FBQztnQkFDRCxVQUFVLEVBQUUsbUJBQW1CO2dCQUMvQixPQUFPLEVBQUUsU0FBUzthQUNuQixDQUFDO1lBQ0YsR0FBRyxRQUFRO1NBQ1osQ0FBQztJQUNKLENBQUM7O2lIQW5DVSxvQkFBb0IsdURBSXJCLHNCQUFzQjtxSEFKckIsb0JBQW9CLGNBRm5CLE1BQU07MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBSUksUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcm9kdWN0IH0gZnJvbSAnQHNwYXJ0YWN1cy9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEN1cnJlbnRQcm9kdWN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2Ntcy1jb21wb25lbnRzL3Byb2R1Y3QvY3VycmVudC1wcm9kdWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSnNvbkxkQnVpbGRlciwgU2NoZW1hQnVpbGRlciB9IGZyb20gJy4uL3NjaGVtYS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSlNPTkxEX1BST0RVQ1RfQlVJTERFUiB9IGZyb20gJy4uL3Rva2Vucyc7XG5cbi8qKlxuICogQWRkcyB0aGUgbWluaW1hbCBzdHJ1Y3R1cmVkIGRhdGEgZm9yIHRoZSBwcm9kdWN0LCBzZWUgaHR0cHM6Ly9zY2hlbWEub3JnL3Byb2R1Y3QuXG4gKiBUaGUgYWN0dWFsIGRhdGEgY29sbGVjdGlvbiBpcyBkZWxlZ2F0ZWQgdG8gYEpzb25MZEJ1aWxkZXJgcywgd2hpY2ggY2FuIGJlIGluamVjdGVkXG4gKiB1c2luZyB0aGUgYEpTT05MRF9QUk9EVUNUX0JVSUxERVJgIHRva2VuLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdFNjaGVtYUJ1aWxkZXIgaW1wbGVtZW50cyBTY2hlbWFCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjdXJyZW50UHJvZHVjdDogQ3VycmVudFByb2R1Y3RTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChKU09OTERfUFJPRFVDVF9CVUlMREVSKVxuICAgIHByb3RlY3RlZCBidWlsZGVyczogSnNvbkxkQnVpbGRlcjxQcm9kdWN0PltdXG4gICkge31cblxuICBidWlsZCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQcm9kdWN0LmdldFByb2R1Y3QoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChwcm9kdWN0OiBQcm9kdWN0KSA9PiB7XG4gICAgICAgIGlmIChwcm9kdWN0KSB7XG4gICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QodGhpcy5jb2xsZWN0KHByb2R1Y3QpKS5waXBlKFxuICAgICAgICAgICAgbWFwKChyZXM6IHt9W10pID0+IE9iamVjdC5hc3NpZ24oe30sIC4uLnJlcykpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbGxlY3QocHJvZHVjdDogUHJvZHVjdCk6IE9ic2VydmFibGU8YW55PltdIHtcbiAgICBpZiAoIXByb2R1Y3QgfHwgIXByb2R1Y3QuY29kZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBidWlsZGVycyA9IHRoaXMuYnVpbGRlcnNcbiAgICAgID8gdGhpcy5idWlsZGVycy5tYXAoKGJ1aWxkZXIpID0+IGJ1aWxkZXIuYnVpbGQocHJvZHVjdCkpXG4gICAgICA6IFtdO1xuICAgIHJldHVybiBbXG4gICAgICBvZih7XG4gICAgICAgICdAY29udGV4dCc6ICdodHRwOi8vc2NoZW1hLm9yZycsXG4gICAgICAgICdAdHlwZSc6ICdQcm9kdWN0JyxcbiAgICAgIH0pLFxuICAgICAgLi4uYnVpbGRlcnMsXG4gICAgXTtcbiAgfVxufVxuIl19