UNPKG

ngx-diagrams

Version:

> Light Weight, Modular, Typed Diagram Engine for Angular

47 lines 7.9 kB
import { DefaultNodeComponent } from '../components/default-node/default-node.component'; import { AbstractNodeFactory } from '../../factories/node.factory'; import { DefaultNodeModel } from '../models/default-node.model'; export class DefaultNodeFactory extends AbstractNodeFactory { constructor(resolver, renderer) { super('default'); this.resolver = resolver; this.renderer = renderer; } generateWidget(diagramEngine, node, nodesHost) { const componentRef = nodesHost.createComponent(this.getRecipe()); // attach coordinates and default positional behaviour to the generated component host const rootNode = componentRef.location.nativeElement; // default style for node this.renderer.setStyle(rootNode, 'position', 'absolute'); this.renderer.setStyle(rootNode, 'display', 'block'); // data attributes this.renderer.setAttribute(rootNode, 'data-nodeid', node.id); // subscribe to node coordinates node.selectCoords().subscribe(({ x, y }) => { this.renderer.setStyle(rootNode, 'left', `${x}px`); this.renderer.setStyle(rootNode, 'top', `${y}px`); }); node.selectionChanges().subscribe((e) => { e.isSelected ? this.renderer.addClass(rootNode, 'selected') : this.renderer.removeClass(rootNode, 'selected'); }); node.onEntityDestroy().subscribe(() => { componentRef.destroy(); }); // assign all passed properties to node initialization. Object.entries(node).forEach(([key, value]) => { componentRef.instance[key] = value; }); componentRef.instance.setDiagramEngine(diagramEngine); componentRef.instance.setPainted(true); return componentRef; } getRecipe() { return this.resolver.resolveComponentFactory(DefaultNodeComponent); } getNewInstance(initialConfig) { return new DefaultNodeModel(initialConfig); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1ub2RlLmZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vbGlicy9uZ3gtZGlhZ3JhbXMvc3JjLyIsInNvdXJjZXMiOlsibGliL2RlZmF1bHRzL2ZhY3Rvcmllcy9kZWZhdWx0LW5vZGUuZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRSxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsbUJBQXFDO0lBQzNFLFlBQ1ksUUFBa0MsRUFDbEMsUUFBbUI7UUFFN0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBSFAsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUcvQixDQUFDO0lBRUQsY0FBYyxDQUNaLGFBQTRCLEVBQzVCLElBQXNCLEVBQ3RCLFNBQTJCO1FBRTNCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFakUsc0ZBQXNGO1FBQ3RGLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBRXJELHlCQUF5QjtRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFckQsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTdELGdDQUFnQztRQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3RDLENBQUMsQ0FBQyxVQUFVO2dCQUNWLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDO2dCQUM5QyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsdURBQXVEO1FBQ3ZELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUM1QyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILFlBQVksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkMsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsY0FBYyxDQUFDLGFBQW1CO1FBQ2hDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0Tm9kZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZGVmYXVsdC1ub2RlL2RlZmF1bHQtbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3ROb2RlRmFjdG9yeSB9IGZyb20gJy4uLy4uL2ZhY3Rvcmllcy9ub2RlLmZhY3RvcnknO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBDb21wb25lbnRSZWYsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIFJlbmRlcmVyMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaWFncmFtRW5naW5lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW5naW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVmYXVsdE5vZGVNb2RlbCB9IGZyb20gJy4uL21vZGVscy9kZWZhdWx0LW5vZGUubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgRGVmYXVsdE5vZGVGYWN0b3J5IGV4dGVuZHMgQWJzdHJhY3ROb2RlRmFjdG9yeTxEZWZhdWx0Tm9kZU1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyXG4gICkge1xuICAgIHN1cGVyKCdkZWZhdWx0Jyk7XG4gIH1cblxuICBnZW5lcmF0ZVdpZGdldChcbiAgICBkaWFncmFtRW5naW5lOiBEaWFncmFtRW5naW5lLFxuICAgIG5vZGU6IERlZmF1bHROb2RlTW9kZWwsXG4gICAgbm9kZXNIb3N0OiBWaWV3Q29udGFpbmVyUmVmXG4gICk6IENvbXBvbmVudFJlZjxEZWZhdWx0Tm9kZUNvbXBvbmVudD4ge1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IG5vZGVzSG9zdC5jcmVhdGVDb21wb25lbnQodGhpcy5nZXRSZWNpcGUoKSk7XG5cbiAgICAvLyBhdHRhY2ggY29vcmRpbmF0ZXMgYW5kIGRlZmF1bHQgcG9zaXRpb25hbCBiZWhhdmlvdXIgdG8gdGhlIGdlbmVyYXRlZCBjb21wb25lbnQgaG9zdFxuICAgIGNvbnN0IHJvb3ROb2RlID0gY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAvLyBkZWZhdWx0IHN0eWxlIGZvciBub2RlXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShyb290Tm9kZSwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShyb290Tm9kZSwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcblxuICAgIC8vIGRhdGEgYXR0cmlidXRlc1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHJvb3ROb2RlLCAnZGF0YS1ub2RlaWQnLCBub2RlLmlkKTtcblxuICAgIC8vIHN1YnNjcmliZSB0byBub2RlIGNvb3JkaW5hdGVzXG4gICAgbm9kZS5zZWxlY3RDb29yZHMoKS5zdWJzY3JpYmUoKHsgeCwgeSB9KSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJvb3ROb2RlLCAnbGVmdCcsIGAke3h9cHhgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocm9vdE5vZGUsICd0b3AnLCBgJHt5fXB4YCk7XG4gICAgfSk7XG5cbiAgICBub2RlLnNlbGVjdGlvbkNoYW5nZXMoKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgIGUuaXNTZWxlY3RlZFxuICAgICAgICA/IHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Mocm9vdE5vZGUsICdzZWxlY3RlZCcpXG4gICAgICAgIDogdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhyb290Tm9kZSwgJ3NlbGVjdGVkJyk7XG4gICAgfSk7XG5cbiAgICBub2RlLm9uRW50aXR5RGVzdHJveSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgIH0pO1xuXG4gICAgLy8gYXNzaWduIGFsbCBwYXNzZWQgcHJvcGVydGllcyB0byBub2RlIGluaXRpYWxpemF0aW9uLlxuICAgIE9iamVjdC5lbnRyaWVzKG5vZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlW2tleV0gPSB2YWx1ZTtcbiAgICB9KTtcblxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXREaWFncmFtRW5naW5lKGRpYWdyYW1FbmdpbmUpO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXRQYWludGVkKHRydWUpO1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgfVxuXG4gIGdldFJlY2lwZSgpOiBDb21wb25lbnRGYWN0b3J5PERlZmF1bHROb2RlQ29tcG9uZW50PiB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoRGVmYXVsdE5vZGVDb21wb25lbnQpO1xuICB9XG5cbiAgZ2V0TmV3SW5zdGFuY2UoaW5pdGlhbENvbmZpZz86IGFueSk6IERlZmF1bHROb2RlTW9kZWwge1xuICAgIHJldHVybiBuZXcgRGVmYXVsdE5vZGVNb2RlbChpbml0aWFsQ29uZmlnKTtcbiAgfVxufVxuIl19