@ng-flexy/layout
Version:
Flexy components and tools to build Angular 8+ applications
44 lines • 5.73 kB
JavaScript
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=