Skip to content

Commit fbfd1ad

Browse files
fix: drag edge bug
1 parent dc40b83 commit fbfd1ad

File tree

4 files changed

+58
-16
lines changed

4 files changed

+58
-16
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-visual-modeling",
3-
"version": "1.0.46",
3+
"version": "1.1.0",
44
"description": "一个基于React的数据可视化建模的DAG图,适用于UML,数据库建模,数据仓库建设等业务",
55
"main": "dist/index.js",
66
"pack": "pack/index.js",

src/adaptor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export const diffPropsData = (newData, oldData, options) => {
7575
});
7676

7777
if(!edge) {
78-
return
78+
return;
7979
}
8080

8181
if(isSameLabel(a.label, edge.label)) {

src/canvas/canvas.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,19 @@ export default class TableCanvas extends Canvas {
271271
});
272272
}
273273

274+
focusItems(nodes = [], edges = []) {
275+
this.emit('custom.item.focus', {
276+
nodes,
277+
edges
278+
});
279+
nodes.forEach((item) => {
280+
item.focus();
281+
});
282+
edges.forEach((item) => {
283+
item.focus();
284+
});
285+
}
286+
274287
_findChain(nodeId, pointId) {
275288
let resultPoints = [];
276289
let resultEdges = [];

src/index.tsx

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -220,13 +220,12 @@ export default class TableBuilding extends React.Component<ComProps, any> {
220220

221221
let _addLinks = (links: any) => {
222222
let newLinkOpts = links.map((item: any) => {
223-
let _oldSource = _.get(item, 'sourceEndpoint.id', '');
224-
let _oldTarget = _.get(item, 'targetEndpoint.id', '');
225-
let _newSource = _oldSource.indexOf('-right') !== -1 ? _oldSource : _oldSource + '-right';
226-
let _newTarget = _oldTarget.indexOf('-left') !== -1 ? _oldTarget : _oldTarget + '-left';
227-
223+
let _oldSource = _.get(item, 'sourceEndpoint.id', '').replace('-right', '');
224+
let _oldTarget = _.get(item, 'targetEndpoint.id', '').replace('-left', '');
225+
let _newSource = _oldSource + '-right';
226+
let _newTarget = _oldTarget + '-left';
228227
return {
229-
id: item.options.id,
228+
id: item.options.id || `${item.options.sourceNode}-${_oldSource}-${item.options.targetNode}-${_oldTarget}`,
230229
sourceNode: item.options.sourceNode,
231230
targetNode: item.options.targetNode,
232231
arrowShapeType: item.arrowShapeType,
@@ -247,17 +246,19 @@ export default class TableBuilding extends React.Component<ComProps, any> {
247246
target: _.get(item, 'targetEndpoint.options.originId'),
248247
}));
249248
});
249+
250+
return newEdge;
250251
}
251252

252253
this.canvas.on('system.link.connect', (data: any) => {
253-
_addLinks(data.links || []);
254-
this.onConnectEdges(data.links);
254+
let newEdges = _addLinks(data.links || []);
255+
this.onConnectEdges(newEdges);
255256
this.forceUpdate();
256257
});
257258

258259
this.canvas.on('system.link.reconnect', (data: any) => {
259-
_addLinks(data.addLinks || []);
260-
this.onReConnectEdges(data.addLinks, data.delLinks);
260+
let _addEdges = _addLinks(data.addLinks || []);
261+
this.onReConnectEdges(_addEdges, data.delLinks);
261262

262263
this.forceUpdate();
263264
});
@@ -322,6 +323,13 @@ export default class TableBuilding extends React.Component<ComProps, any> {
322323
this.onDeleteNodes([data.node]);
323324
});
324325

326+
this.canvas.on('custom.item.focus', (data: any) => {
327+
this._unfocus();
328+
this._focusNodes = this._focusNodes.concat(data.nodes || []);
329+
this._focusLinks = this._focusLinks.concat(data.edges || []);
330+
331+
});
332+
325333
this.canvas.on('table.canvas.expand', () => {
326334
this.forceUpdate();
327335
});
@@ -351,7 +359,8 @@ export default class TableBuilding extends React.Component<ComProps, any> {
351359

352360
let diffInfo = diffPropsData(result, this.canvasData, {
353361
oldCol: this.props.columns,
354-
newCol: newProps.columns
362+
newCol: newProps.columns,
363+
updateEdges: this.canvas.edges
355364
});
356365
if (diffInfo.addNodes.length > 0) {
357366
this.canvas.addNodes(diffInfo.addNodes);
@@ -407,9 +416,23 @@ export default class TableBuilding extends React.Component<ComProps, any> {
407416

408417
onConnectEdges(links) {
409418
let linksInfo = links.map((item) => {
410-
return item.options;
419+
return _.assign(item.options, {
420+
source: _.get(item, 'options.source', '').replace('-right', ''),
421+
target: _.get(item, 'options.target', '').replace('-left', '')
422+
});
411423
});
412424

425+
let newEdges = _.differenceWith(linksInfo, this.canvasData.edges, (a: any, b: any) => {
426+
return (
427+
a.sourceNode === b.sourceNode &&
428+
a.targetNode === b.targetNode &&
429+
a.source === b.source &&
430+
a.target === b.target
431+
);
432+
});
433+
434+
this.canvasData.edges = this.canvasData.edges.concat(newEdges);
435+
413436
this.props.onChange && this.props.onChange({
414437
type: 'system.link.connect',
415438
links: linksInfo
@@ -418,10 +441,16 @@ export default class TableBuilding extends React.Component<ComProps, any> {
418441

419442
onReConnectEdges(addLinks, rmLinks) {
420443
let addLinksInfo = addLinks.map((item) => {
421-
return item.options;
444+
return _.assign(item.options, {
445+
source: _.get(item, 'options.source', '').replace('-right', ''),
446+
target: _.get(item, 'options.target', '').replace('-left', '')
447+
});
422448
});
423449
let rmLinksInfo = rmLinks.map((item) => {
424-
return item.options;
450+
return _.assign(item.options, {
451+
source: _.get(item, 'options.source', '').replace('-right', ''),
452+
target: _.get(item, 'options.target', '').replace('-left', '')
453+
});
425454
});
426455
this.props.onChange && this.props.onChange({
427456
type: 'system.link.reconnect',

0 commit comments

Comments
 (0)