UNPKG

@ng-flexy/layout

Version:

Flexy components and tools to build Angular 8+ applications

44 lines 5.73 kB
import { Component, ComponentFactoryResolver, Input, ViewChild, ViewContainerRef } from '@angular/core'; const LAYOUT_SCHEMA_KEY = 'layoutSchema'; export class FlexyContainerComponent { constructor(resolver) { this.resolver = resolver; } ngOnInit() { if (!this.componentSchema) { return; } if (!this.componentSchema.componentType) { console.error('Component schema is incorrect', this.componentSchema); return; } const componentFactory = this.resolver.resolveComponentFactory(this.componentSchema.componentType); const viewContainerRef = this.viewContainerRef; viewContainerRef.clear(); const componentRef = viewContainerRef.createComponent(componentFactory); componentRef.instance[LAYOUT_SCHEMA_KEY] = this.componentSchema; this.componentSchema.componentRef = componentRef; if (this.componentSchema.componentInputs) { Object.keys(this.componentSchema.componentInputs).forEach(key => { componentRef.instance[key] = this.componentSchema.componentInputs[key]; }); } } } FlexyContainerComponent.decorators = [ { type: Component, args: [{ selector: 'flexy-container', template: ` <ng-template #viewContainerRef class="containerRef"></ng-template> ` // changeDetection: ChangeDetectionStrategy.OnPush },] } ]; FlexyContainerComponent.ctorParameters = () => [ { type: ComponentFactoryResolver } ]; FlexyContainerComponent.propDecorators = { viewContainerRef: [{ type: ViewChild, args: ['viewContainerRef', { read: ViewContainerRef, static: true },] }], componentSchema: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xheW91dC9zcmMvbGliL2NvbXBvbmVudHMvY29udGFpbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHaEgsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUM7QUFTekMsTUFBTSxPQUFPLHVCQUF1QjtJQUtsQyxZQUFvQixRQUFrQztRQUFsQyxhQUFRLEdBQVIsUUFBUSxDQUEwQjtJQUFHLENBQUM7SUFFMUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRTtZQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNyRSxPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVuRyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUV6QixNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV4RSxZQUFZLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFFakQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRTtZQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM5RCxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pFLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzs7WUF0Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLFFBQVEsRUFBRTs7R0FFVDtnQkFDRCxrREFBa0Q7YUFDbkQ7OztZQVhtQix3QkFBd0I7OzsrQkFhekMsU0FBUyxTQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7OEJBRXRFLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGbGV4eUxheW91dENvbXBvbmVudFNjaGVtYSB9IGZyb20gJy4uL21vZGVsL2xheW91dC1zY2hlbWEubW9kZWwnO1xuXG5jb25zdCBMQVlPVVRfU0NIRU1BX0tFWSA9ICdsYXlvdXRTY2hlbWEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmbGV4eS1jb250YWluZXInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy10ZW1wbGF0ZSAjdmlld0NvbnRhaW5lclJlZiBjbGFzcz1cImNvbnRhaW5lclJlZlwiPjwvbmctdGVtcGxhdGU+XG4gIGBcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRmxleHlDb250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAVmlld0NoaWxkKCd2aWV3Q29udGFpbmVyUmVmJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICBASW5wdXQoKSBjb21wb25lbnRTY2hlbWE6IEZsZXh5TGF5b3V0Q29tcG9uZW50U2NoZW1hO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50U2NoZW1hKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5jb21wb25lbnRTY2hlbWEuY29tcG9uZW50VHlwZSkge1xuICAgICAgY29uc29sZS5lcnJvcignQ29tcG9uZW50IHNjaGVtYSBpcyBpbmNvcnJlY3QnLCB0aGlzLmNvbXBvbmVudFNjaGVtYSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5jb21wb25lbnRTY2hlbWEuY29tcG9uZW50VHlwZSk7XG5cbiAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmO1xuICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuXG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlW0xBWU9VVF9TQ0hFTUFfS0VZXSA9IHRoaXMuY29tcG9uZW50U2NoZW1hO1xuICAgIHRoaXMuY29tcG9uZW50U2NoZW1hLmNvbXBvbmVudFJlZiA9IGNvbXBvbmVudFJlZjtcblxuICAgIGlmICh0aGlzLmNvbXBvbmVudFNjaGVtYS5jb21wb25lbnRJbnB1dHMpIHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuY29tcG9uZW50U2NoZW1hLmNvbXBvbmVudElucHV0cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Vba2V5XSA9IHRoaXMuY29tcG9uZW50U2NoZW1hLmNvbXBvbmVudElucHV0c1trZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=