diff --git a/lib-core/src/DiagramEngine.ts b/lib-core/src/DiagramEngine.ts index de8b1d4..f24a63e 100644 --- a/lib-core/src/DiagramEngine.ts +++ b/lib-core/src/DiagramEngine.ts @@ -155,19 +155,31 @@ export class DiagramEngine extends BaseObserver { return this.portFactories; } - getFactoryForNode(node: NodeModel) { + getFactoryForNode(node: NodeModel | string) { + if (typeof node === 'string') { + return this.nodeFactories.getFactory(node); + } return this.nodeFactories.getFactory(node.getType()); } - getFactoryForLink(link: LinkModel) { + getFactoryForLink(link: LinkModel | string) { + if (typeof link === 'string') { + return this.linkFactories.getFactory(link); + } return this.linkFactories.getFactory(link.getType()); } getFactoryForLabel(label: LabelModel) { + if (typeof label === 'string') { + return this.labelFactories.getFactory(label); + } return this.labelFactories.getFactory(label.getType()); } getFactoryForPort(port: PortModel) { + if (typeof port === 'string') { + return this.portFactories.getFactory(port); + } return this.portFactories.getFactory(port.getType()); } diff --git a/lib-core/src/core-models/BaseEntity.ts b/lib-core/src/core-models/BaseEntity.ts index a8868c9..bec8cc8 100644 --- a/lib-core/src/core-models/BaseEntity.ts +++ b/lib-core/src/core-models/BaseEntity.ts @@ -53,7 +53,10 @@ export class BaseEntity exten return lookupTable[this.options.id]; } let clone = _.clone(this); - clone.options.id = Toolkit.UID(); + clone.options = { + ...this.options, + id: Toolkit.UID() + }; clone.clearListeners(); lookupTable[this.options.id] = clone; diff --git a/lib-core/src/core-models/BaseModel.ts b/lib-core/src/core-models/BaseModel.ts index 553fcb8..c74a901 100644 --- a/lib-core/src/core-models/BaseModel.ts +++ b/lib-core/src/core-models/BaseModel.ts @@ -44,6 +44,8 @@ export class BaseModel extends serialize() { return { ...super.serialize(), + type: this.options.type, + selected: this.options.selected, extras: this.options.extras }; } @@ -51,6 +53,7 @@ export class BaseModel extends deSerialize(data: { [p: string]: any }, engine: DiagramEngine) { super.deSerialize(data, engine); this.options.extras = data.extras; + this.options.selected = data.selected; } getType(): string { diff --git a/lib-core/src/models/DiagramModel.ts b/lib-core/src/models/DiagramModel.ts index 9c70138..9c450d3 100644 --- a/lib-core/src/models/DiagramModel.ts +++ b/lib-core/src/models/DiagramModel.ts @@ -97,7 +97,8 @@ export class DiagramModel } serializeDiagram() { - return _.merge(this.serialize(), { + return { + ...this.serialize(), offsetX: this.options.offsetX, offsetY: this.options.offsetY, zoom: this.options.zoom, @@ -108,7 +109,7 @@ export class DiagramModel nodes: _.map(this.nodes, node => { return node.serialize(); }) - }); + }; } clearSelection(ignore: BaseModel | null = null) { diff --git a/lib-core/src/models/LabelModel.ts b/lib-core/src/models/LabelModel.ts index f035303..0f374ef 100644 --- a/lib-core/src/models/LabelModel.ts +++ b/lib-core/src/models/LabelModel.ts @@ -1,5 +1,4 @@ import { BaseModel, BaseModelGenerics } from '../core-models/BaseModel'; -import * as _ from 'lodash'; import { DiagramEngine } from '../DiagramEngine'; export class LabelModel extends BaseModel { @@ -19,9 +18,10 @@ export class LabelModel extends } serialize() { - return _.merge(super.serialize(), { + return { + ...super.serialize(), offsetX: this.offsetX, offsetY: this.offsetY - }); + }; } } diff --git a/lib-core/src/models/LinkModel.ts b/lib-core/src/models/LinkModel.ts index ec823a9..fc7cbfd 100644 --- a/lib-core/src/models/LinkModel.ts +++ b/lib-core/src/models/LinkModel.ts @@ -78,7 +78,8 @@ export class LinkModel extends } serialize() { - return _.merge(super.serialize(), { + return { + ...super.serialize(), source: this.sourcePort ? this.sourcePort.getParent().getID() : null, sourcePort: this.sourcePort ? this.sourcePort.getID() : null, target: this.targetPort ? this.targetPort.getParent().getID() : null, @@ -89,7 +90,7 @@ export class LinkModel extends labels: _.map(this.labels, label => { return label.serialize(); }) - }); + }; } doClone(lookupTable = {}, clone) { diff --git a/lib-core/src/models/PortModel.ts b/lib-core/src/models/PortModel.ts index 6c87c67..cba441f 100644 --- a/lib-core/src/models/PortModel.ts +++ b/lib-core/src/models/PortModel.ts @@ -44,7 +44,7 @@ export class PortModel extends ...super.serialize(), parentNode: this.parent.getID(), links: _.map(this.links, link => { - return link.getID; + return link.getID(); }) }; } diff --git a/lib-defaults/src/node/DefaultNodeModel.ts b/lib-defaults/src/node/DefaultNodeModel.ts index 0fd4faf..2eb0163 100644 --- a/lib-defaults/src/node/DefaultNodeModel.ts +++ b/lib-defaults/src/node/DefaultNodeModel.ts @@ -14,7 +14,7 @@ export interface DefaultNodeModelGenerics { export class DefaultNodeModel extends NodeModel { constructor(name: string, color: string); - constructor(options: DefaultNodeModelOptions); + constructor(options?: DefaultNodeModelOptions); constructor(options: any = {}, color?: string) { if (typeof options === 'string') { options = { diff --git a/lib-demo-gallery/demos/demo-serializing/index.tsx b/lib-demo-gallery/demos/demo-serializing/index.tsx index 227c27f..b25aa7a 100644 --- a/lib-demo-gallery/demos/demo-serializing/index.tsx +++ b/lib-demo-gallery/demos/demo-serializing/index.tsx @@ -33,6 +33,7 @@ export default () => { //!------------- SERIALIZING ------------------ var str = JSON.stringify(model.serializeDiagram()); + console.log(model.serializeDiagram()); //!------------- DESERIALIZING ----------------