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 9.73 kB
import { Injectable } from '@angular/core'; import { AVOID_STACKED_OUTLETS, OutletPosition } from './outlet.model'; import * as i0 from "@angular/core"; export class OutletService { constructor() { this.templatesRefs = { [OutletPosition.BEFORE]: new Map(), [OutletPosition.REPLACE]: new Map(), [OutletPosition.AFTER]: new Map(), }; } /** * @param templateOrFactory A `ComponentFactory` that inserts a component dynamically. */ add(outlet, templateOrFactory, position = OutletPosition.REPLACE) { const store = this.templatesRefs[position]; if (store) { const existing = store.get(outlet) || []; const newValue = existing.concat([templateOrFactory]); store.set(outlet, newValue); } } /** * * Returns a single object or multiple objects for the given outlet reference, * depending on the `stacked` argument. * * @param outlet The outlet reference * @param position the outlet position, `OutletPosition.before`, `OutletPosition.AFTER` or `OutletPosition.REPLACE` * @param stacked Indicates whether an array of outlet components is returned */ get(outlet, position = OutletPosition.REPLACE, stacked = AVOID_STACKED_OUTLETS) { const store = this.templatesRefs[position] || this.templatesRefs[OutletPosition.REPLACE]; const templateRef = store.get(outlet); if (templateRef && !stacked) { return templateRef[0]; } return templateRef; } remove(outlet, position = OutletPosition.REPLACE, value) { const store = this.templatesRefs[position] || this.templatesRefs[OutletPosition.REPLACE]; this.removeValueOrAll(store, outlet, value); } removeValueOrAll(store, outlet, value) { if (!value && store.has(outlet)) { store.delete(outlet); } else if (value && store.has(outlet)) { let existing = store.get(outlet); existing = existing.filter((val) => val !== value); store.set(outlet, existing); } } } OutletService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OutletService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); OutletService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OutletService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OutletService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0bGV0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yZWZyb250bGliL2Ntcy1zdHJ1Y3R1cmUvb3V0bGV0L291dGxldC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLdkUsTUFBTSxPQUFPLGFBQWE7SUFIMUI7UUFJVSxrQkFBYSxHQUFHO1lBQ3RCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksR0FBRyxFQUFlO1lBQy9DLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksR0FBRyxFQUFlO1lBQ2hELENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksR0FBRyxFQUFlO1NBQy9DLENBQUM7S0EwRkg7SUFwRUM7O09BRUc7SUFDSCxHQUFHLENBQ0QsTUFBYyxFQUNkLGlCQUFvQixFQUNwQixXQUEyQixjQUFjLENBQUMsT0FBTztRQUVqRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxFQUFFO1lBQ1QsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekMsTUFBTSxRQUFRLEdBQVEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUMzRCxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEdBQUcsQ0FDRCxNQUFjLEVBQ2QsV0FBMkIsY0FBYyxDQUFDLE9BQU8sRUFDakQsT0FBTyxHQUFHLHFCQUFxQjtRQUUvQixNQUFNLEtBQUssR0FDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztZQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU3QyxNQUFNLFdBQVcsR0FBUSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksV0FBVyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzNCLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FDSixNQUFjLEVBQ2QsV0FBMkIsY0FBYyxDQUFDLE9BQU8sRUFDakQsS0FBUztRQUVULE1BQU0sS0FBSyxHQUNULElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFUyxnQkFBZ0IsQ0FDeEIsS0FBdUIsRUFDdkIsTUFBYyxFQUNkLEtBQVM7UUFFVCxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0QjthQUFNLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckMsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVqQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBRW5ELEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQzs7MEdBOUZVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5LCBJbmplY3RhYmxlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVZPSURfU1RBQ0tFRF9PVVRMRVRTLCBPdXRsZXRQb3NpdGlvbiB9IGZyb20gJy4vb3V0bGV0Lm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE91dGxldFNlcnZpY2U8VCA9IFRlbXBsYXRlUmVmPGFueT4gfCBDb21wb25lbnRGYWN0b3J5PGFueT4+IHtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZXNSZWZzID0ge1xuICAgIFtPdXRsZXRQb3NpdGlvbi5CRUZPUkVdOiBuZXcgTWFwPHN0cmluZywgVFtdPigpLFxuICAgIFtPdXRsZXRQb3NpdGlvbi5SRVBMQUNFXTogbmV3IE1hcDxzdHJpbmcsIFRbXT4oKSxcbiAgICBbT3V0bGV0UG9zaXRpb24uQUZURVJdOiBuZXcgTWFwPHN0cmluZywgVFtdPigpLFxuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgdGVtcGxhdGUgb3IgQ29tcG9uZW50RmFjdG9yeSwgc28gdGhhdCBVSSBvdXRsZXRzIGNhbiBiZSByZXBsYWNlZCBkeW5hbWljYWxseS5cbiAgICogVGhlIFVJIHBvc2l0aW9uIHdoZXJlIHRoaXMgdGVtcGxhdGUgb3IgQ29tcG9uZW50RmFjdG9yeSBpcyBpbnNlcnRlZCBpcyBnaXZlbiBieSBhXG4gICAqIHN0cmluZyByZWZlcmVuY2UgKGNhbGxlZCBgb3V0bGV0YCkgYW5kIG9wdGlvbmFsIGBPdXRsZXRQb3NpdGlvbmAuIFRoZSBgT3V0bGV0UG9zaXRpb25gXG4gICAqIGlzIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIsIG9yIHJlcGxhY2VzIHRoZSBlbnRpcmUgVUkuXG4gICAqXG4gICAqIEBwYXJhbSBvdXRsZXQgdGhlIFVJIGxvY2F0aW9uIHJlcHJlc2VudGVkIGJ5IGEgc3RyaW5nXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSB0aGUgYFRlbXBsYXRlUmVmYCB0aGF0IHdpbGwgYmUgdXNlZCB0byBpbnNlcnQgVUlcbiAgICogQHBhcmFtIHBvc2l0aW9uIHRoZSBgT3V0bGV0UG9zaXRpb25gIGluIHRoZSBVSVxuICAgKi9cbiAgYWRkKG91dGxldDogc3RyaW5nLCB0ZW1wbGF0ZTogVCwgcG9zaXRpb24/OiBPdXRsZXRQb3NpdGlvbik6IHZvaWQ7XG4gIC8qKlxuICAgKiBAcGFyYW0gZmFjdG9yeSBUaGUgYENvbXBvbmVudEZhY3RvcnlgIHRoYXQgd2lsbCBiZSBkeW5hbWljYWxseSBhZGRlZCB0byB0aGUgb3V0bGV0IFVJXG4gICAqL1xuICBhZGQoXG4gICAgb3V0bGV0OiBzdHJpbmcsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmlmaWVkLXNpZ25hdHVyZXNcbiAgICBmYWN0b3J5OiBULFxuICAgIHBvc2l0aW9uPzogT3V0bGV0UG9zaXRpb25cbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZU9yRmFjdG9yeSBBIGBDb21wb25lbnRGYWN0b3J5YCB0aGF0IGluc2VydHMgYSBjb21wb25lbnQgZHluYW1pY2FsbHkuXG4gICAqL1xuICBhZGQoXG4gICAgb3V0bGV0OiBzdHJpbmcsXG4gICAgdGVtcGxhdGVPckZhY3Rvcnk6IFQsXG4gICAgcG9zaXRpb246IE91dGxldFBvc2l0aW9uID0gT3V0bGV0UG9zaXRpb24uUkVQTEFDRVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMudGVtcGxhdGVzUmVmc1twb3NpdGlvbl07XG4gICAgaWYgKHN0b3JlKSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHN0b3JlLmdldChvdXRsZXQpIHx8IFtdO1xuICAgICAgY29uc3QgbmV3VmFsdWU6IFRbXSA9IGV4aXN0aW5nLmNvbmNhdChbdGVtcGxhdGVPckZhY3RvcnldKTtcbiAgICAgIHN0b3JlLnNldChvdXRsZXQsIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogUmV0dXJucyBhIHNpbmdsZSBvYmplY3Qgb3IgbXVsdGlwbGUgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIG91dGxldCByZWZlcmVuY2UsXG4gICAqIGRlcGVuZGluZyBvbiB0aGUgYHN0YWNrZWRgIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gb3V0bGV0IFRoZSBvdXRsZXQgcmVmZXJlbmNlXG4gICAqIEBwYXJhbSBwb3NpdGlvbiB0aGUgb3V0bGV0IHBvc2l0aW9uLCBgT3V0bGV0UG9zaXRpb24uYmVmb3JlYCwgYE91dGxldFBvc2l0aW9uLkFGVEVSYCBvciBgT3V0bGV0UG9zaXRpb24uUkVQTEFDRWBcbiAgICogQHBhcmFtIHN0YWNrZWQgSW5kaWNhdGVzIHdoZXRoZXIgYW4gYXJyYXkgb2Ygb3V0bGV0IGNvbXBvbmVudHMgaXMgcmV0dXJuZWRcbiAgICovXG4gIGdldChcbiAgICBvdXRsZXQ6IHN0cmluZyxcbiAgICBwb3NpdGlvbjogT3V0bGV0UG9zaXRpb24gPSBPdXRsZXRQb3NpdGlvbi5SRVBMQUNFLFxuICAgIHN0YWNrZWQgPSBBVk9JRF9TVEFDS0VEX09VVExFVFNcbiAgKTogVFtdIHwgVCB7XG4gICAgY29uc3Qgc3RvcmUgPVxuICAgICAgdGhpcy50ZW1wbGF0ZXNSZWZzW3Bvc2l0aW9uXSB8fFxuICAgICAgdGhpcy50ZW1wbGF0ZXNSZWZzW091dGxldFBvc2l0aW9uLlJFUExBQ0VdO1xuXG4gICAgY29uc3QgdGVtcGxhdGVSZWY6IFRbXSA9IHN0b3JlLmdldChvdXRsZXQpO1xuICAgIGlmICh0ZW1wbGF0ZVJlZiAmJiAhc3RhY2tlZCkge1xuICAgICAgcmV0dXJuIHRlbXBsYXRlUmVmWzBdO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcGxhdGVSZWY7XG4gIH1cblxuICByZW1vdmUoXG4gICAgb3V0bGV0OiBzdHJpbmcsXG4gICAgcG9zaXRpb246IE91dGxldFBvc2l0aW9uID0gT3V0bGV0UG9zaXRpb24uUkVQTEFDRSxcbiAgICB2YWx1ZT86IFRcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmUgPVxuICAgICAgdGhpcy50ZW1wbGF0ZXNSZWZzW3Bvc2l0aW9uXSB8fFxuICAgICAgdGhpcy50ZW1wbGF0ZXNSZWZzW091dGxldFBvc2l0aW9uLlJFUExBQ0VdO1xuXG4gICAgdGhpcy5yZW1vdmVWYWx1ZU9yQWxsKHN0b3JlLCBvdXRsZXQsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW1vdmVWYWx1ZU9yQWxsKFxuICAgIHN0b3JlOiBNYXA8c3RyaW5nLCBUW10+LFxuICAgIG91dGxldDogc3RyaW5nLFxuICAgIHZhbHVlPzogVFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXZhbHVlICYmIHN0b3JlLmhhcyhvdXRsZXQpKSB7XG4gICAgICBzdG9yZS5kZWxldGUob3V0bGV0KTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHN0b3JlLmhhcyhvdXRsZXQpKSB7XG4gICAgICBsZXQgZXhpc3RpbmcgPSBzdG9yZS5nZXQob3V0bGV0KTtcblxuICAgICAgZXhpc3RpbmcgPSBleGlzdGluZy5maWx0ZXIoKHZhbCkgPT4gdmFsICE9PSB2YWx1ZSk7XG5cbiAgICAgIHN0b3JlLnNldChvdXRsZXQsIGV4aXN0aW5nKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==