UNPKG

@spartacus/storefront

Version:

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

57 lines 7.32 kB
import { isPlatformServer } from '@angular/common'; import { Inject, Injectable, PLATFORM_ID } from '@angular/core'; import { DeferLoadingStrategy } from '@spartacus/core'; import { of } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "../config/layout-config"; import * as i2 from "./intersection.service"; /** * The defer loading serivce is used to defer loading of DOM elements * until the elements are required for the user experience. */ export class DeferLoaderService { constructor(platformId, config, intersectionService) { this.platformId = platformId; this.config = config; this.intersectionService = intersectionService; this.globalLoadStrategy = config.deferredLoading ? config.deferredLoading.strategy : DeferLoadingStrategy.INSTANT; } /** * Defer loading till the element intersects the viewport. * * We evaluate whether we instantly load the element for different reasons: * - we run in SSR mode * - there's no global strategy given * - the global loading strategy is set to INSTANT loading, * and the loading strategy in the given is not set to DEFER * - the loading strategy in the given options is set to INSTANT */ load(element, options) { if (this.shouldLoadInstantly((options || {}).deferLoading)) { return of(true); } else { return this.intersectionService.isIntersected(element, options); } } shouldLoadInstantly(elementLoadingStrategy) { return (isPlatformServer(this.platformId) || elementLoadingStrategy === DeferLoadingStrategy.INSTANT || (elementLoadingStrategy !== DeferLoadingStrategy.DEFER && this.globalLoadStrategy === DeferLoadingStrategy.INSTANT)); } } DeferLoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: DeferLoaderService, deps: [{ token: PLATFORM_ID }, { token: i1.LayoutConfig }, { token: i2.IntersectionService }], target: i0.ɵɵFactoryTarget.Injectable }); DeferLoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: DeferLoaderService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: DeferLoaderService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }, { type: i1.LayoutConfig }, { type: i2.IntersectionService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmZXItbG9hZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yZWZyb250bGliL2xheW91dC9sb2FkaW5nL2RlZmVyLWxvYWRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBS3RDOzs7R0FHRztBQUlILE1BQU0sT0FBTyxrQkFBa0I7SUFHN0IsWUFDK0IsVUFBa0IsRUFDckMsTUFBb0IsRUFDcEIsbUJBQXdDO1FBRnJCLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBRWxELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsZUFBZTtZQUM5QyxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRO1lBQ2pDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILElBQUksQ0FDRixPQUFvQixFQUNwQixPQUE2QjtRQUU3QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUMxRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsc0JBQTRDO1FBRTVDLE9BQU8sQ0FDTCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2pDLHNCQUFzQixLQUFLLG9CQUFvQixDQUFDLE9BQU87WUFDdkQsQ0FBQyxzQkFBc0IsS0FBSyxvQkFBb0IsQ0FBQyxLQUFLO2dCQUNwRCxJQUFJLENBQUMsa0JBQWtCLEtBQUssb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQzVELENBQUM7SUFDSixDQUFDOzsrR0EzQ1Usa0JBQWtCLGtCQUluQixXQUFXO21IQUpWLGtCQUFrQixjQUZqQixNQUFNOzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7MERBSzRDLE1BQU07MEJBQTlDLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGVmZXJMb2FkaW5nU3RyYXRlZ3kgfSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExheW91dENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9sYXlvdXQtY29uZmlnJztcbmltcG9ydCB7IEludGVyc2VjdGlvbk9wdGlvbnMgfSBmcm9tICcuL2ludGVyc2VjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBJbnRlcnNlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9pbnRlcnNlY3Rpb24uc2VydmljZSc7XG5cbi8qKlxuICogVGhlIGRlZmVyIGxvYWRpbmcgc2VyaXZjZSBpcyB1c2VkIHRvIGRlZmVyIGxvYWRpbmcgb2YgRE9NIGVsZW1lbnRzXG4gKiB1bnRpbCB0aGUgZWxlbWVudHMgYXJlIHJlcXVpcmVkIGZvciB0aGUgdXNlciBleHBlcmllbmNlLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRGVmZXJMb2FkZXJTZXJ2aWNlIHtcbiAgZ2xvYmFsTG9hZFN0cmF0ZWd5OiBEZWZlckxvYWRpbmdTdHJhdGVneTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdCxcbiAgICBwcm90ZWN0ZWQgY29uZmlnOiBMYXlvdXRDb25maWcsXG4gICAgcHJvdGVjdGVkIGludGVyc2VjdGlvblNlcnZpY2U6IEludGVyc2VjdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5nbG9iYWxMb2FkU3RyYXRlZ3kgPSBjb25maWcuZGVmZXJyZWRMb2FkaW5nXG4gICAgICA/IGNvbmZpZy5kZWZlcnJlZExvYWRpbmcuc3RyYXRlZ3lcbiAgICAgIDogRGVmZXJMb2FkaW5nU3RyYXRlZ3kuSU5TVEFOVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZlciBsb2FkaW5nIHRpbGwgdGhlIGVsZW1lbnQgaW50ZXJzZWN0cyB0aGUgdmlld3BvcnQuXG4gICAqXG4gICAqIFdlIGV2YWx1YXRlIHdoZXRoZXIgd2UgaW5zdGFudGx5IGxvYWQgdGhlIGVsZW1lbnQgZm9yIGRpZmZlcmVudCByZWFzb25zOlxuICAgKiAtIHdlIHJ1biBpbiBTU1IgbW9kZVxuICAgKiAtIHRoZXJlJ3Mgbm8gZ2xvYmFsIHN0cmF0ZWd5IGdpdmVuXG4gICAqIC0gdGhlIGdsb2JhbCBsb2FkaW5nIHN0cmF0ZWd5IGlzIHNldCB0byBJTlNUQU5UIGxvYWRpbmcsXG4gICAqICAgYW5kIHRoZSBsb2FkaW5nIHN0cmF0ZWd5IGluIHRoZSBnaXZlbiBpcyBub3Qgc2V0IHRvIERFRkVSXG4gICAqIC0gdGhlIGxvYWRpbmcgc3RyYXRlZ3kgaW4gdGhlIGdpdmVuIG9wdGlvbnMgaXMgc2V0IHRvIElOU1RBTlRcbiAgICovXG4gIGxvYWQoXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgb3B0aW9ucz86IEludGVyc2VjdGlvbk9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuc2hvdWxkTG9hZEluc3RhbnRseSgob3B0aW9ucyB8fCB7fSkuZGVmZXJMb2FkaW5nKSkge1xuICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcnNlY3Rpb25TZXJ2aWNlLmlzSW50ZXJzZWN0ZWQoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRMb2FkSW5zdGFudGx5KFxuICAgIGVsZW1lbnRMb2FkaW5nU3RyYXRlZ3k6IERlZmVyTG9hZGluZ1N0cmF0ZWd5XG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCkgfHxcbiAgICAgIGVsZW1lbnRMb2FkaW5nU3RyYXRlZ3kgPT09IERlZmVyTG9hZGluZ1N0cmF0ZWd5LklOU1RBTlQgfHxcbiAgICAgIChlbGVtZW50TG9hZGluZ1N0cmF0ZWd5ICE9PSBEZWZlckxvYWRpbmdTdHJhdGVneS5ERUZFUiAmJlxuICAgICAgICB0aGlzLmdsb2JhbExvYWRTdHJhdGVneSA9PT0gRGVmZXJMb2FkaW5nU3RyYXRlZ3kuSU5TVEFOVClcbiAgICApO1xuICB9XG59XG4iXX0=