ngx-diagrams
Version:
> Light Weight, Modular, Typed Diagram Engine for Angular
47 lines • 7.9 kB
JavaScript
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