UNPKG

@spartacus/storefront

Version:

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

88 lines 15.1 kB
import { ChangeDetectorRef, Directive, EventEmitter, Input, Optional, Output, } from '@angular/core'; import { finalize, tap } from 'rxjs/operators'; import { ComponentCreateEvent, ComponentDestroyEvent, } from './events/component.event'; import * as i0 from "@angular/core"; import * as i1 from "../../services/cms-components.service"; import * as i2 from "@spartacus/core"; import * as i3 from "./services/component-handler.service"; import * as i4 from "./services/cms-injector.service"; /** * Directive used to facilitate instantiation of CMS driven dynamic components */ export class ComponentWrapperDirective { constructor(vcr, cmsComponentsService, injector, dynamicAttributeService, renderer, componentHandler, cmsInjector, eventService) { this.vcr = vcr; this.cmsComponentsService = cmsComponentsService; this.injector = injector; this.dynamicAttributeService = dynamicAttributeService; this.renderer = renderer; this.componentHandler = componentHandler; this.cmsInjector = cmsInjector; this.eventService = eventService; this.cxComponentRef = new EventEmitter(); } ngOnInit() { this.cmsComponentsService .determineMappings([this.cxComponentWrapper.flexType]) .subscribe(() => { if (this.cmsComponentsService.shouldRender(this.cxComponentWrapper.flexType)) { this.launchComponent(); } }); } launchComponent() { const componentMapping = this.cmsComponentsService.getMapping(this.cxComponentWrapper.flexType); if (!componentMapping) { return; } this.launcherResource = this.componentHandler .getLauncher(componentMapping, this.vcr, this.cmsInjector.getInjector(this.cxComponentWrapper.flexType, this.cxComponentWrapper.uid, this.injector), this.cmsComponentsService.getModule(this.cxComponentWrapper.flexType)) .pipe(tap(({ elementRef, componentRef }) => { this.cmpRef = componentRef; this.cxComponentRef.emit(componentRef); this.dispatchEvent(ComponentCreateEvent, elementRef); this.decorate(elementRef); this.injector.get(ChangeDetectorRef).markForCheck(); }), finalize(() => this.dispatchEvent(ComponentDestroyEvent))) .subscribe(); } /** * Dispatch the component event. * * The event is dispatched during creation and removal of the component. */ dispatchEvent(event, elementRef) { var _a; const payload = { typeCode: this.cxComponentWrapper.typeCode, id: this.cxComponentWrapper.uid, }; if (event === ComponentCreateEvent) { payload.host = elementRef === null || elementRef === void 0 ? void 0 : elementRef.nativeElement; } (_a = this.eventService) === null || _a === void 0 ? void 0 : _a.dispatch(payload, event); } decorate(elementRef) { this.dynamicAttributeService.addAttributesToComponent(elementRef.nativeElement, this.renderer, this.cxComponentWrapper); } ngOnDestroy() { if (this.launcherResource) { this.launcherResource.unsubscribe(); } } } ComponentWrapperDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ComponentWrapperDirective, deps: [{ token: i0.ViewContainerRef }, { token: i1.CmsComponentsService }, { token: i0.Injector }, { token: i2.DynamicAttributeService }, { token: i0.Renderer2 }, { token: i3.ComponentHandlerService }, { token: i4.CmsInjectorService }, { token: i2.EventService, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); ComponentWrapperDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.0.5", type: ComponentWrapperDirective, selector: "[cxComponentWrapper]", inputs: { cxComponentWrapper: "cxComponentWrapper" }, outputs: { cxComponentRef: "cxComponentRef" }, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ComponentWrapperDirective, decorators: [{ type: Directive, args: [{ selector: '[cxComponentWrapper]', }] }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i1.CmsComponentsService }, { type: i0.Injector }, { type: i2.DynamicAttributeService }, { type: i0.Renderer2 }, { type: i3.ComponentHandlerService }, { type: i4.CmsInjectorService }, { type: i2.EventService, decorators: [{ type: Optional }] }]; }, propDecorators: { cxComponentWrapper: [{ type: Input }], cxComponentRef: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXdyYXBwZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RvcmVmcm9udGxpYi9jbXMtc3RydWN0dXJlL3BhZ2UvY29tcG9uZW50L2NvbXBvbmVudC13cmFwcGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBRWpCLFNBQVMsRUFFVCxZQUFZLEVBRVosS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEdBSVAsTUFBTSxlQUFlLENBQUM7QUFPdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUV0QixNQUFNLDBCQUEwQixDQUFDOzs7Ozs7QUFJbEM7O0dBRUc7QUFJSCxNQUFNLE9BQU8seUJBQXlCO0lBc0NwQyxZQUNZLEdBQXFCLEVBQ3JCLG9CQUEwQyxFQUMxQyxRQUFrQixFQUNsQix1QkFBZ0QsRUFDaEQsUUFBbUIsRUFDbkIsZ0JBQXlDLEVBQ3pDLFdBQStCLEVBQ25CLFlBQTJCO1FBUHZDLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQ3JCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQUN6QyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDbkIsaUJBQVksR0FBWixZQUFZLENBQWU7UUE1Q3pDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7SUE2QzlELENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLG9CQUFvQjthQUN0QixpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FB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c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBUeXBlLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRlbnRTbG90Q29tcG9uZW50RGF0YSxcbiAgRHluYW1pY0F0dHJpYnV0ZVNlcnZpY2UsXG4gIEV2ZW50U2VydmljZSxcbn0gZnJvbSAnQHNwYXJ0YWN1cy9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENtc0NvbXBvbmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY21zLWNvbXBvbmVudHMuc2VydmljZSc7XG5pbXBvcnQge1xuICBDb21wb25lbnRDcmVhdGVFdmVudCxcbiAgQ29tcG9uZW50RGVzdHJveUV2ZW50LFxuICBDb21wb25lbnRFdmVudCxcbn0gZnJvbSAnLi9ldmVudHMvY29tcG9uZW50LmV2ZW50JztcbmltcG9ydCB7IENtc0luamVjdG9yU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY21zLWluamVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50SGFuZGxlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NvbXBvbmVudC1oYW5kbGVyLnNlcnZpY2UnO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB1c2VkIHRvIGZhY2lsaXRhdGUgaW5zdGFudGlhdGlvbiBvZiBDTVMgZHJpdmVuIGR5bmFtaWMgY29tcG9uZW50c1xuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY3hDb21wb25lbnRXcmFwcGVyXScsXG59KVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudFdyYXBwZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGN4Q29tcG9uZW50V3JhcHBlcjogQ29udGVudFNsb3RDb21wb25lbnREYXRhO1xuICBAT3V0cHV0KCkgY3hDb21wb25lbnRSZWYgPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBvbmVudFJlZjxhbnk+PigpO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBzaW5jZSAyLjBcbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBpbiB1bnNhZmUsIGkuZS5cbiAgICogLSBjbXBSZWYgY2FuIGJlIHNldCBsYXRlciBiZWNhdXNlIG9mIGxhenkgbG9hZGluZyBvciBkZWZlcnJlZCBsb2FkaW5nXG4gICAqIC0gY21wUmVmIGNhbiBiZSBub3Qgc2V0IGF0IGFsbCBpZiBmb3IgZXhhbXBsZSwgd2ViIGNvbXBvbmVudHMgYXJlIHVzZWQgYXMgY21zIGNvbXBvbmVudHNcbiAgICovXG4gIGNtcFJlZj86IENvbXBvbmVudFJlZjxhbnk+O1xuXG4gIHByaXZhdGUgbGF1bmNoZXJSZXNvdXJjZT86IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjNcbiAgICogVXNlIHRoZSBmb2xsb3dpbmcgY29uc3RydWN0b3IgaW5zdGVhZDpcbiAgICogYGBgXG4gICAqIGNvbnN0cnVjdG9yKCBwcm90ZWN0ZWQgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgKiBwcm90ZWN0ZWQgY21zQ29tcG9uZW50c1NlcnZpY2U6IENtc0NvbXBvbmVudHNTZXJ2aWNlLFxuICAgKiBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgKiBwcm90ZWN0ZWQgZHluYW1pY0F0dHJpYnV0ZVNlcnZpY2U6IER5bmFtaWNBdHRyaWJ1dGVTZXJ2aWNlLFxuICAgKiBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICogcHJvdGVjdGVkIGNvbXBvbmVudEhhbmRsZXI6IENvbXBvbmVudEhhbmRsZXJTZXJ2aWNlLFxuICAgKiBwcm90ZWN0ZWQgY21zSW5qZWN0b3I6IENtc0luamVjdG9yU2VydmljZSxcbiAgICogcHJvdGVjdGVkIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlKSB7fVxuICAgKiBgYGBcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBjbXNDb21wb25lbnRzU2VydmljZTogQ21zQ29tcG9uZW50c1NlcnZpY2UsXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIGR5bmFtaWNBdHRyaWJ1dGVTZXJ2aWNlOiBEeW5hbWljQXR0cmlidXRlU2VydmljZSxcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIGNvbXBvbmVudEhhbmRsZXI6IENvbXBvbmVudEhhbmRsZXJTZXJ2aWNlLFxuICAgIGNtc0luamVjdG9yOiBDbXNJbmplY3RvclNlcnZpY2VcbiAgKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcm90ZWN0ZWQgY21zQ29tcG9uZW50c1NlcnZpY2U6IENtc0NvbXBvbmVudHNTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGR5bmFtaWNBdHRyaWJ1dGVTZXJ2aWNlOiBEeW5hbWljQXR0cmlidXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcm90ZWN0ZWQgY29tcG9uZW50SGFuZGxlcjogQ29tcG9uZW50SGFuZGxlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNtc0luamVjdG9yOiBDbXNJbmplY3RvclNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIGV2ZW50U2VydmljZT86IEV2ZW50U2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jbXNDb21wb25lbnRzU2VydmljZVxuICAgICAgLmRldGVybWluZU1hcHBpbmdzKFt0aGlzLmN4Q29tcG9uZW50V3JhcHBlci5mbGV4VHlwZV0pXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuY21zQ29tcG9uZW50c1NlcnZpY2Uuc2hvdWxkUmVuZGVyKFxuICAgICAgICAgICAgdGhpcy5jeENvbXBvbmVudFdyYXBwZXIuZmxleFR5cGVcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubGF1bmNoQ29tcG9uZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsYXVuY2hDb21wb25lbnQoKSB7XG4gICAgY29uc3QgY29tcG9uZW50TWFwcGluZyA9IHRoaXMuY21zQ29tcG9uZW50c1NlcnZpY2UuZ2V0TWFwcGluZyhcbiAgICAgIHRoaXMuY3hDb21wb25lbnRXcmFwcGVyLmZsZXhUeXBlXG4gICAgKTtcblxuICAgIGlmICghY29tcG9uZW50TWFwcGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubGF1bmNoZXJSZXNvdXJjZSA9IHRoaXMuY29tcG9uZW50SGFuZGxlclxuICAgICAgLmdldExhdW5jaGVyKFxuICAgICAgICBjb21wb25lbnRNYXBwaW5nLFxuICAgICAgICB0aGlzLnZjcixcbiAgICAgICAgdGhpcy5jbXNJbmplY3Rvci5nZXRJbmplY3RvcihcbiAgICAgICAgICB0aGlzLmN4Q29tcG9uZW50V3JhcHBlci5mbGV4VHlwZSxcbiAgICAgICAgICB0aGlzLmN4Q29tcG9uZW50V3JhcHBlci51aWQsXG4gICAgICAgICAgdGhpcy5pbmplY3RvclxuICAgICAgICApLFxuICAgICAgICB0aGlzLmNtc0NvbXBvbmVudHNTZXJ2aWNlLmdldE1vZHVsZSh0aGlzLmN4Q29tcG9uZW50V3JhcHBlci5mbGV4VHlwZSlcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKHsgZWxlbWVudFJlZiwgY29tcG9uZW50UmVmIH0pID0+IHtcbiAgICAgICAgICB0aGlzLmNtcFJlZiA9IGNvbXBvbmVudFJlZjtcblxuICAgICAgICAgIHRoaXMuY3hDb21wb25lbnRSZWYuZW1pdChjb21wb25lbnRSZWYpO1xuXG4gICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KENvbXBvbmVudENyZWF0ZUV2ZW50LCBlbGVtZW50UmVmKTtcbiAgICAgICAgICB0aGlzLmRlY29yYXRlKGVsZW1lbnRSZWYpO1xuICAgICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKS5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuZGlzcGF0Y2hFdmVudChDb21wb25lbnREZXN0cm95RXZlbnQpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIHRoZSBjb21wb25lbnQgZXZlbnQuXG4gICAqXG4gICAqIFRoZSBldmVudCBpcyBkaXNwYXRjaGVkIGR1cmluZyBjcmVhdGlvbiBhbmQgcmVtb3ZhbCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGRpc3BhdGNoRXZlbnQoXG4gICAgZXZlbnQ6IFR5cGU8Q29tcG9uZW50RXZlbnQ+LFxuICAgIGVsZW1lbnRSZWY/OiBFbGVtZW50UmVmXG4gICkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICB0eXBlQ29kZTogdGhpcy5jeENvbXBvbmVudFdyYXBwZXIudHlwZUNvZGUsXG4gICAgICBpZDogdGhpcy5jeENvbXBvbmVudFdyYXBwZXIudWlkLFxuICAgIH0gYXMgQ29tcG9uZW50RXZlbnQ7XG4gICAgaWYgKGV2ZW50ID09PSBDb21wb25lbnRDcmVhdGVFdmVudCkge1xuICAgICAgKHBheWxvYWQgYXMgQ29tcG9uZW50Q3JlYXRlRXZlbnQpLmhvc3QgPSBlbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIH1cbiAgICB0aGlzLmV2ZW50U2VydmljZT8uZGlzcGF0Y2gocGF5bG9hZCwgZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWNvcmF0ZShlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgdGhpcy5keW5hbWljQXR0cmlidXRlU2VydmljZS5hZGRBdHRyaWJ1dGVzVG9Db21wb25lbnQoXG4gICAgICBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aGlzLnJlbmRlcmVyLFxuICAgICAgdGhpcy5jeENvbXBvbmVudFdyYXBwZXJcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMubGF1bmNoZXJSZXNvdXJjZSkge1xuICAgICAgdGhpcy5sYXVuY2hlclJlc291cmNlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=