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