UNPKG

@spartacus/storefront

Version:

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

65 lines 8.22 kB
import { Inject, Injectable, PLATFORM_ID } from '@angular/core'; import { DOCUMENT, isPlatformBrowser } from '@angular/common'; import { DeferLoadingStrategy } from '@spartacus/core'; import * as i0 from "@angular/core"; import * as i1 from "../../services/cms-components.service"; export class PageSlotService { constructor(cmsComponentsService, platformId, document) { this.cmsComponentsService = cmsComponentsService; this.platformId = platformId; this.document = document; this.resolvePrerenderedSlots(); } /** * Finds all slots visible in the SSR pre-rendered DOM */ resolvePrerenderedSlots() { if (isPlatformBrowser(this.platformId)) { this.prerenderedSlots = Array.from(this.document.querySelectorAll('cx-page-slot')) .filter((el) => el.getBoundingClientRect().top < this.document.documentElement.clientHeight) .map((el) => el.getAttribute('position')); } } /** * Indicates if certain slot should be rendered instantly. * * It's especially useful when transitioning from SSR to CSR application, * where we don't want to apply deferring logic to slots that are visible * to avoid unnecessary flickering. */ shouldNotDefer(slot) { var _a; if ((_a = this.prerenderedSlots) === null || _a === void 0 ? void 0 : _a.includes(slot)) { this.prerenderedSlots.splice(this.prerenderedSlots.indexOf(slot), 1); return true; } return false; } /** * Returns the defer options for the given component. If the wrapping * page slot is prerendered, we would ignore the defer options altogether. */ getComponentDeferOptions(slot, componentType) { if (this.shouldNotDefer(slot)) { return { deferLoading: DeferLoadingStrategy.INSTANT }; } const deferLoading = this.cmsComponentsService.getDeferLoadingStrategy(componentType); return { deferLoading }; } } PageSlotService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: PageSlotService, deps: [{ token: i1.CmsComponentsService }, { token: PLATFORM_ID }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); PageSlotService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: PageSlotService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: PageSlotService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.CmsComponentsService }, { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1zbG90LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yZWZyb250bGliL2Ntcy1zdHJ1Y3R1cmUvcGFnZS9zbG90L3BhZ2Utc2xvdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQU12RCxNQUFNLE9BQU8sZUFBZTtJQUcxQixZQUNZLG9CQUEwQyxFQUNyQixVQUFlLEVBQ2xCLFFBQVE7UUFGMUIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUFLO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQUE7UUFFcEMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ08sdUJBQXVCO1FBQy9CLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUMvQztpQkFDRSxNQUFNLENBQ0wsQ0FBQyxFQUFXLEVBQUUsRUFBRSxDQUNkLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUc7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FDN0M7aUJBQ0EsR0FBRyxDQUFDLENBQUMsRUFBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDdEQ7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsY0FBYyxDQUFDLElBQVk7O1FBQ3pCLElBQUksTUFBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckUsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QixDQUN0QixJQUFZLEVBQ1osYUFBcUI7UUFFckIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDdkQ7UUFDRCxNQUFNLFlBQVksR0FDaEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDOzs0R0F6RFUsZUFBZSxzREFLaEIsV0FBVyxhQUNYLFFBQVE7Z0hBTlAsZUFBZSxjQUZkLE1BQU07MkZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQU1JLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5ULCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbnRlcnNlY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vbGF5b3V0L2xvYWRpbmcvaW50ZXJzZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IERlZmVyTG9hZGluZ1N0cmF0ZWd5IH0gZnJvbSAnQHNwYXJ0YWN1cy9jb3JlJztcbmltcG9ydCB7IENtc0NvbXBvbmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY21zLWNvbXBvbmVudHMuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlU2xvdFNlcnZpY2Uge1xuICBwcm90ZWN0ZWQgcHJlcmVuZGVyZWRTbG90czogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNtc0NvbXBvbmVudHNTZXJ2aWNlOiBDbXNDb21wb25lbnRzU2VydmljZSxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcm90ZWN0ZWQgcGxhdGZvcm1JZDogYW55LFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByb3RlY3RlZCBkb2N1bWVudFxuICApIHtcbiAgICB0aGlzLnJlc29sdmVQcmVyZW5kZXJlZFNsb3RzKCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYWxsIHNsb3RzIHZpc2libGUgaW4gdGhlIFNTUiBwcmUtcmVuZGVyZWQgRE9NXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZVByZXJlbmRlcmVkU2xvdHMoKTogdm9pZCB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHRoaXMucHJlcmVuZGVyZWRTbG90cyA9IEFycmF5LmZyb20oXG4gICAgICAgIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnY3gtcGFnZS1zbG90JylcbiAgICAgIClcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZWw6IEVsZW1lbnQpID0+XG4gICAgICAgICAgICBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgPFxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgICAgIClcbiAgICAgICAgLm1hcCgoZWw6IEVsZW1lbnQpID0+IGVsLmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBjZXJ0YWluIHNsb3Qgc2hvdWxkIGJlIHJlbmRlcmVkIGluc3RhbnRseS5cbiAgICpcbiAgICogSXQncyBlc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIHRyYW5zaXRpb25pbmcgZnJvbSBTU1IgdG8gQ1NSIGFwcGxpY2F0aW9uLFxuICAgKiB3aGVyZSB3ZSBkb24ndCB3YW50IHRvIGFwcGx5IGRlZmVycmluZyBsb2dpYyB0byBzbG90cyB0aGF0IGFyZSB2aXNpYmxlXG4gICAqIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGZsaWNrZXJpbmcuXG4gICAqL1xuICBzaG91bGROb3REZWZlcihzbG90OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5wcmVyZW5kZXJlZFNsb3RzPy5pbmNsdWRlcyhzbG90KSkge1xuICAgICAgdGhpcy5wcmVyZW5kZXJlZFNsb3RzLnNwbGljZSh0aGlzLnByZXJlbmRlcmVkU2xvdHMuaW5kZXhPZihzbG90KSwgMSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRlZmVyIG9wdGlvbnMgZm9yIHRoZSBnaXZlbiBjb21wb25lbnQuIElmIHRoZSB3cmFwcGluZ1xuICAgKiBwYWdlIHNsb3QgaXMgcHJlcmVuZGVyZWQsIHdlIHdvdWxkIGlnbm9yZSB0aGUgZGVmZXIgb3B0aW9ucyBhbHRvZ2V0aGVyLlxuICAgKi9cbiAgZ2V0Q29tcG9uZW50RGVmZXJPcHRpb25zKFxuICAgIHNsb3Q6IHN0cmluZyxcbiAgICBjb21wb25lbnRUeXBlOiBzdHJpbmdcbiAgKTogSW50ZXJzZWN0aW9uT3B0aW9ucyB7XG4gICAgaWYgKHRoaXMuc2hvdWxkTm90RGVmZXIoc2xvdCkpIHtcbiAgICAgIHJldHVybiB7IGRlZmVyTG9hZGluZzogRGVmZXJMb2FkaW5nU3RyYXRlZ3kuSU5TVEFOVCB9O1xuICAgIH1cbiAgICBjb25zdCBkZWZlckxvYWRpbmcgPVxuICAgICAgdGhpcy5jbXNDb21wb25lbnRzU2VydmljZS5nZXREZWZlckxvYWRpbmdTdHJhdGVneShjb21wb25lbnRUeXBlKTtcbiAgICByZXR1cm4geyBkZWZlckxvYWRpbmcgfTtcbiAgfVxufVxuIl19