refactor(connection-valid): handle source-source, target-target #2253

This commit is contained in:
moklick
2022-07-11 15:19:07 +02:00
parent a47f1c1382
commit 8d530c192a
+9 -10
View File
@@ -46,13 +46,6 @@ export function checkElementBelowIsValid(
if (elementBelow && (elementBelowIsTarget || elementBelowIsSource)) { if (elementBelow && (elementBelowIsTarget || elementBelowIsSource)) {
result.isHoveringHandle = true; result.isHoveringHandle = true;
// in strict mode we don't allow target to target or source to source connections
const isValid =
connectionMode === ConnectionMode.Strict
? (isTarget && elementBelowIsSource) || (!isTarget && elementBelowIsTarget)
: true;
if (isValid) {
const elementBelowNodeId = elementBelow.getAttribute('data-nodeid'); const elementBelowNodeId = elementBelow.getAttribute('data-nodeid');
const elementBelowHandleId = elementBelow.getAttribute('data-handleid'); const elementBelowHandleId = elementBelow.getAttribute('data-handleid');
const connection: Connection = isTarget const connection: Connection = isTarget
@@ -70,6 +63,14 @@ export function checkElementBelowIsValid(
}; };
result.connection = connection; result.connection = connection;
// in strict mode we don't allow target to target or source to source connections
const isValid =
connectionMode === ConnectionMode.Strict
? (isTarget && elementBelowIsSource) || (!isTarget && elementBelowIsTarget)
: true;
if (isValid) {
result.isValid = isValidConnection(connection); result.isValid = isValidConnection(connection);
} }
} }
@@ -151,9 +152,7 @@ export function handleMouseDown(
return resetRecentHandle(recentHoveredHandle); return resetRecentHandle(recentHoveredHandle);
} }
const isOwnHandle = connection.source === connection.target; if (connection.source !== connection.target && elementBelow) {
if (!isOwnHandle && elementBelow) {
recentHoveredHandle = elementBelow; recentHoveredHandle = elementBelow;
elementBelow.classList.add('react-flow__handle-connecting'); elementBelow.classList.add('react-flow__handle-connecting');
elementBelow.classList.toggle('react-flow__handle-valid', isValid); elementBelow.classList.toggle('react-flow__handle-valid', isValid);