Skip to content

Commit a29ddd5

Browse files
authored
Merge pull request #316 from uber/undefined_then_fix
Improved promise code for the node update
2 parents 740fe81 + 4b86b5d commit a29ddd5

File tree

3 files changed

+18
-13
lines changed

3 files changed

+18
-13
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@
9898
"opn-cli": "3.1.0",
9999
"prettier": "^1.19.1",
100100
"prop-types": "^15.6.0",
101+
"react": "^16.14.0",
101102
"react-ace": "^6.1.4",
102103
"react-dom": "^16.12.0",
103104
"react-router-dom": "^5.0.0",

src/components/graph-view.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -990,16 +990,22 @@ class GraphView extends React.Component<IGraphViewProps, IGraphViewState> {
990990
}
991991
}
992992

993-
handleNodeUpdate = (position: any, nodeId: string, shiftKey: boolean) => {
993+
handleNodeUpdate = (
994+
position: any,
995+
nodeId: string,
996+
shiftKey: boolean
997+
): Promise<any> => {
994998
const { onUpdateNode, readOnly, selected, nodeKey } = this.props;
995999
const { draggingEdge, hoveredNode, edgeEndNode } = this.state;
9961000

9971001
if (readOnly) {
998-
return;
1002+
return Promise.resolve();
9991003
}
10001004

10011005
// Detect if edge is being drawn and link to hovered node
10021006
// This will handle a new edge
1007+
let onUpdateNodePromise = Promise.resolve();
1008+
10031009
if (shiftKey && hoveredNode && edgeEndNode) {
10041010
this.createNewEdge();
10051011
} else {
@@ -1033,7 +1039,8 @@ class GraphView extends React.Component<IGraphViewProps, IGraphViewState> {
10331039
updatedNodes = selected?.nodes || new Map();
10341040
}
10351041

1036-
return onUpdateNode(nodeMap.node, updatedNodes);
1042+
onUpdateNodePromise =
1043+
onUpdateNode(nodeMap.node, updatedNodes) || Promise.resolve();
10371044
}
10381045
}
10391046
}
@@ -1047,6 +1054,8 @@ class GraphView extends React.Component<IGraphViewProps, IGraphViewState> {
10471054
hoveredNode: false,
10481055
svgClicked: true,
10491056
});
1057+
1058+
return onUpdateNodePromise;
10501059
};
10511060

10521061
handleNodeMouseEnter = (event: any, data: any) => {

src/components/node.js

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ function Node({
100100
onNodeMouseLeave = () => {},
101101
onNodeMove = () => {},
102102
onNodeSelected = () => {},
103-
onNodeUpdate = () => {},
103+
onNodeUpdate = () => Promise.resolve(),
104104
}: INodeProps) {
105105
const [hovered, setHovered] = useState(false);
106106
const nodeRef = useRef();
@@ -178,15 +178,10 @@ function Node({
178178
shiftKey
179179
);
180180

181-
if (nodeUpdate && nodeUpdate.then) {
182-
nodeUpdate
183-
.then(() => {
184-
onNodeSelected(data, data[nodeKey], shiftKey, sourceEvent);
185-
})
186-
.catch(() => {
187-
onNodeSelected(data, data[nodeKey], shiftKey, sourceEvent);
188-
});
189-
}
181+
const onFinally = () =>
182+
onNodeSelected(data, data[nodeKey], shiftKey, sourceEvent);
183+
184+
nodeUpdate.then(onFinally).catch(onFinally);
190185
},
191186
[onNodeUpdate, data, nodeKey, onNodeSelected]
192187
);

0 commit comments

Comments
 (0)