UNPKG

@ng-flexy/layout

Version:

Flexy components and tools to build Angular 8+ applications

45 lines 5.31 kB
import { ComponentFactoryResolver, Directive, Input, Renderer2, ViewContainerRef } from '@angular/core'; import { bindAttributes } from './attr.binder.utils'; const LAYOUT_SCHEMA_KEY = 'layoutSchema'; export class FlexyContainerDirective { constructor(vc, resolver, renderer) { this.vc = vc; this.resolver = resolver; this.renderer = renderer; } set componentSchema(schema) { if (!schema) { return; } if (!schema.componentType) { console.error('Component schema is incorrect', schema); return; } const componentFactory = this.resolver.resolveComponentFactory(schema.componentType); const viewContainerRef = this.vc; viewContainerRef.clear(); const componentRef = viewContainerRef.createComponent(componentFactory); componentRef.instance[LAYOUT_SCHEMA_KEY] = schema; schema.componentRef = componentRef; if (schema.componentInputs) { Object.keys(schema.componentInputs).forEach(key => { componentRef.instance[key] = schema.componentInputs[key]; }); } bindAttributes(schema, componentRef.location.nativeElement, this.renderer); } } FlexyContainerDirective.decorators = [ { type: Directive, args: [{ selector: '[flexyContainer]' },] } ]; FlexyContainerDirective.ctorParameters = () => [ { type: ViewContainerRef }, { type: ComponentFactoryResolver }, { type: Renderer2 } ]; FlexyContainerDirective.propDecorators = { componentSchema: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xheW91dC9zcmMvbGliL2NvbXBvbmVudHMvY29udGFpbmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDO0FBS3pDLE1BQU0sT0FBTyx1QkFBdUI7SUE2QmxDLFlBQW9CLEVBQW9CLEVBQVUsUUFBa0MsRUFBVSxRQUFtQjtRQUE3RixPQUFFLEdBQUYsRUFBRSxDQUFrQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQTBCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUFHLENBQUM7SUE1QnJILElBQWEsZUFBZSxDQUFDLE1BQWtDO1FBQzdELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZELE9BQU87U0FDUjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXpCLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXhFLFlBQVksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDbEQsTUFBTSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFFbkMsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDaEQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNELENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxjQUFjLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3RSxDQUFDOzs7WUE5QkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxrQkFBa0I7YUFDN0I7OztZQVIrRCxnQkFBZ0I7WUFBdkUsd0JBQXdCO1lBQW9CLFNBQVM7Ozs4QkFVM0QsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRGlyZWN0aXZlLCBJbnB1dCwgUmVuZGVyZXIyLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGbGV4eUxheW91dENvbXBvbmVudFNjaGVtYSB9IGZyb20gJy4uL21vZGVsL2xheW91dC1zY2hlbWEubW9kZWwnO1xuaW1wb3J0IHsgYmluZEF0dHJpYnV0ZXMgfSBmcm9tICcuL2F0dHIuYmluZGVyLnV0aWxzJztcblxuY29uc3QgTEFZT1VUX1NDSEVNQV9LRVkgPSAnbGF5b3V0U2NoZW1hJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZsZXh5Q29udGFpbmVyXSdcbn0pXG5leHBvcnQgY2xhc3MgRmxleHlDb250YWluZXJEaXJlY3RpdmUge1xuICBASW5wdXQoKSBzZXQgY29tcG9uZW50U2NoZW1hKHNjaGVtYTogRmxleHlMYXlvdXRDb21wb25lbnRTY2hlbWEpIHtcbiAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXNjaGVtYS5jb21wb25lbnRUeXBlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb21wb25lbnQgc2NoZW1hIGlzIGluY29ycmVjdCcsIHNjaGVtYSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnkoc2NoZW1hLmNvbXBvbmVudFR5cGUpO1xuXG4gICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMudmM7XG4gICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG5cbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2VbTEFZT1VUX1NDSEVNQV9LRVldID0gc2NoZW1hO1xuICAgIHNjaGVtYS5jb21wb25lbnRSZWYgPSBjb21wb25lbnRSZWY7XG5cbiAgICBpZiAoc2NoZW1hLmNvbXBvbmVudElucHV0cykge1xuICAgICAgT2JqZWN0LmtleXMoc2NoZW1hLmNvbXBvbmVudElucHV0cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Vba2V5XSA9IHNjaGVtYS5jb21wb25lbnRJbnB1dHNba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGJpbmRBdHRyaWJ1dGVzKHNjaGVtYSwgY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsIHRoaXMucmVuZGVyZXIpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2YzogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHt9XG59XG4iXX0=