ngx-diagrams
Version:
> Light Weight, Modular, Typed Diagram Engine for Angular
38 lines • 6.18 kB
JavaScript
import { AbstractLinkFactory } from '../../factories/link.factory';
import { DefaultLinkComponent } from '../components/default-link/default-link.component';
import { DefaultLinkModel } from '../models/default-link.model';
export class DefaultLinkFactory extends AbstractLinkFactory {
constructor(resolver, renderer) {
super('default');
this.resolver = resolver;
this.renderer = renderer;
}
generateWidget(diagramEngine, link, linksHost) {
const componentRef = linksHost.createComponent(this.getRecipe());
// attach coordinates and default positional behaviour to the generated component host
const rootNode = componentRef.location.nativeElement;
// default style for link
this.renderer.setStyle(rootNode, 'position', 'absolute');
this.renderer.addClass(rootNode, 'label');
// data attributes
this.renderer.setAttribute(rootNode, 'data-linkid', link.id);
// on destroy make sure to destroy the componentRef
link.onEntityDestroy().subscribe(() => {
componentRef.destroy();
});
// assign all passed properties to link initialization.
Object.entries(link).forEach(([key, value]) => {
componentRef.instance[key] = value;
});
componentRef.instance.diagramEngine = diagramEngine;
componentRef.instance.setPainted(true);
return componentRef;
}
getRecipe() {
return this.resolver.resolveComponentFactory(DefaultLinkComponent);
}
getNewInstance() {
return new DefaultLinkModel();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1saW5rLmZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vbGlicy9uZ3gtZGlhZ3JhbXMvc3JjLyIsInNvdXJjZXMiOlsibGliL2RlZmF1bHRzL2ZhY3Rvcmllcy9kZWZhdWx0LWxpbmsuZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVVoRSxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsbUJBQXFDO0lBQzNFLFlBQ1ksUUFBa0MsRUFDbEMsUUFBbUI7UUFFN0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBSFAsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUcvQixDQUFDO0lBRUQsY0FBYyxDQUNaLGFBQTRCLEVBQzVCLElBQXNCLEVBQ3RCLFNBQTJCO1FBRTNCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFakUsc0ZBQXNGO1FBQ3RGLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBRXJELHlCQUF5QjtRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUUxQyxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFN0QsbURBQW1EO1FBQ25ELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3BDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUVILHVEQUF1RDtRQUN2RCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDNUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDcEQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TGlua0ZhY3RvcnkgfSBmcm9tICcuLi8uLi9mYWN0b3JpZXMvbGluay5mYWN0b3J5JztcbmltcG9ydCB7IERlZmF1bHRMaW5rQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9kZWZhdWx0LWxpbmsvZGVmYXVsdC1saW5rLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZWZhdWx0TGlua01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2RlZmF1bHQtbGluay5tb2RlbCc7XG5pbXBvcnQge1xuICBWaWV3Q29udGFpbmVyUmVmLFxuICBDb21wb25lbnRSZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29tcG9uZW50RmFjdG9yeSxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpYWdyYW1FbmdpbmUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbmdpbmUuc2VydmljZSc7XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0TGlua0ZhY3RvcnkgZXh0ZW5kcyBBYnN0cmFjdExpbmtGYWN0b3J5PERlZmF1bHRMaW5rTW9kZWw+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7XG4gICAgc3VwZXIoJ2RlZmF1bHQnKTtcbiAgfVxuXG4gIGdlbmVyYXRlV2lkZ2V0KFxuICAgIGRpYWdyYW1FbmdpbmU6IERpYWdyYW1FbmdpbmUsXG4gICAgbGluazogRGVmYXVsdExpbmtNb2RlbCxcbiAgICBsaW5rc0hvc3Q6IFZpZXdDb250YWluZXJSZWZcbiAgKTogQ29tcG9uZW50UmVmPERlZmF1bHRMaW5rQ29tcG9uZW50PiB7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gbGlua3NIb3N0LmNyZWF0ZUNvbXBvbmVudCh0aGlzLmdldFJlY2lwZSgpKTtcblxuICAgIC8vIGF0dGFjaCBjb29yZGluYXRlcyBhbmQgZGVmYXVsdCBwb3NpdGlvbmFsIGJlaGF2aW91ciB0byB0aGUgZ2VuZXJhdGVkIGNvbXBvbmVudCBob3N0XG4gICAgY29uc3Qgcm9vdE5vZGUgPSBjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcblxuICAgIC8vIGRlZmF1bHQgc3R5bGUgZm9yIGxpbmtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJvb3ROb2RlLCAncG9zaXRpb24nLCAnYWJzb2x1dGUnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHJvb3ROb2RlLCAnbGFiZWwnKTtcblxuICAgIC8vIGRhdGEgYXR0cmlidXRlc1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHJvb3ROb2RlLCAnZGF0YS1saW5raWQnLCBsaW5rLmlkKTtcblxuICAgIC8vIG9uIGRlc3Ryb3kgbWFrZSBzdXJlIHRvIGRlc3Ryb3kgdGhlIGNvbXBvbmVudFJlZlxuICAgIGxpbmsub25FbnRpdHlEZXN0cm95KCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgfSk7XG5cbiAgICAvLyBhc3NpZ24gYWxsIHBhc3NlZCBwcm9wZXJ0aWVzIHRvIGxpbmsgaW5pdGlhbGl6YXRpb24uXG4gICAgT2JqZWN0LmVudHJpZXMobGluaykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Vba2V5XSA9IHZhbHVlO1xuICAgIH0pO1xuXG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmRpYWdyYW1FbmdpbmUgPSBkaWFncmFtRW5naW5lO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXRQYWludGVkKHRydWUpO1xuICAgIHJldHVybiBjb21wb25lbnRSZWY7XG4gIH1cblxuICBnZXRSZWNpcGUoKTogQ29tcG9uZW50RmFjdG9yeTxEZWZhdWx0TGlua0NvbXBvbmVudD4ge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KERlZmF1bHRMaW5rQ29tcG9uZW50KTtcbiAgfVxuXG4gIGdldE5ld0luc3RhbmNlKCkge1xuICAgIHJldHVybiBuZXcgRGVmYXVsdExpbmtNb2RlbCgpO1xuICB9XG59XG4iXX0=