@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
JavaScript
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