UNPKG

@projectstorm/react-diagrams-defaults

Version:
93 lines 2.89 kB
import _map from 'lodash/map'; import { NodeModel, PortModelAlignment } from '@projectstorm/react-diagrams-core'; import { DefaultPortModel } from '../port/DefaultPortModel'; export class DefaultNodeModel extends NodeModel { constructor(options = {}, color) { if (typeof options === 'string') { options = { name: options, color: color }; } super(Object.assign({ type: 'default', name: 'Untitled', color: 'rgb(0,192,255)' }, options)); this.portsOut = []; this.portsIn = []; } doClone(lookupTable, clone) { clone.portsIn = []; clone.portsOut = []; super.doClone(lookupTable, clone); } removePort(port) { super.removePort(port); if (port.getOptions().in) { this.portsIn.splice(this.portsIn.indexOf(port), 1); } else { this.portsOut.splice(this.portsOut.indexOf(port), 1); } } addPort(port) { super.addPort(port); if (port.getOptions().in) { if (this.portsIn.indexOf(port) === -1) { this.portsIn.push(port); } } else { if (this.portsOut.indexOf(port) === -1) { this.portsOut.push(port); } } return port; } addInPort(label, after = true) { const p = new DefaultPortModel({ in: true, name: label, label: label, alignment: PortModelAlignment.LEFT }); if (!after) { this.portsIn.splice(0, 0, p); } return this.addPort(p); } addOutPort(label, after = true) { const p = new DefaultPortModel({ in: false, name: label, label: label, alignment: PortModelAlignment.RIGHT }); if (!after) { this.portsOut.splice(0, 0, p); } return this.addPort(p); } deserialize(event) { super.deserialize(event); this.options.name = event.data.name; this.options.color = event.data.color; this.portsIn = _map(event.data.portsInOrder, (id) => { return this.getPortFromID(id); }); this.portsOut = _map(event.data.portsOutOrder, (id) => { return this.getPortFromID(id); }); } serialize() { return Object.assign(Object.assign({}, super.serialize()), { name: this.options.name, color: this.options.color, portsInOrder: _map(this.portsIn, (port) => { return port.getID(); }), portsOutOrder: _map(this.portsOut, (port) => { return port.getID(); }) }); } getInPorts() { return this.portsIn; } getOutPorts() { return this.portsOut; } } //# sourceMappingURL=DefaultNodeModel.js.map