@difizen/ai-flow
Version:
Scalable, out-of-the-box, agent-oriented flow
53 lines • 2.21 kB
JavaScript
import { produce } from 'immer';
import { create } from 'zustand';
import { useFlowStore } from "./flowStore";
import { useHelpLine } from "./helpLine";
export var useNodeInteractions = create(function (set, get) {
return {
dragNodeStartPosition: {
x: 0,
y: 0
},
setNodeDragStartPosition: function setNodeDragStartPosition(x, y) {
set({
dragNodeStartPosition: {
x: x,
y: y
}
});
},
onNodeDragStart: function onNodeDragStart(node) {
get().setNodeDragStartPosition(node.position.x, node.position.y);
},
onNodeDrag: function onNodeDrag(node) {
var _useHelpLine$getState = useHelpLine.getState(),
showHorizontalHelpLine = _useHelpLine$getState.showHorizontalHelpLine,
showVerticalHelpLine = _useHelpLine$getState.showVerticalHelpLine;
var showHorizontalHelpLineNodes = showHorizontalHelpLine(node);
var showVerticalHelpLineNodes = showVerticalHelpLine(node);
var _useFlowStore$getStat = useFlowStore.getState(),
nodes = _useFlowStore$getStat.nodes,
setNodes = _useFlowStore$getStat.setNodes;
var newNodes = produce(nodes, function (draft) {
var currentNode = draft.find(function (n) {
return n.id === node.id;
});
if (showVerticalHelpLineNodes.length > 0) currentNode.position.x = showVerticalHelpLineNodes[0].position.x;else currentNode.position.x = node.position.x;
if (showHorizontalHelpLineNodes.length > 0) currentNode.position.y = showHorizontalHelpLineNodes[0].position.y;else currentNode.position.y = node.position.y;
});
setNodes(newNodes);
},
onNodeDragEnd: function onNodeDragEnd(node) {
var _useHelpLine$getState2 = useHelpLine.getState(),
setHelpLineHorizontal = _useHelpLine$getState2.setHelpLineHorizontal,
setHelpLineVertical = _useHelpLine$getState2.setHelpLineVertical;
var _get$dragNodeStartPos = get().dragNodeStartPosition,
x = _get$dragNodeStartPos.x,
y = _get$dragNodeStartPos.y;
if (!(x === node.position.x && y === node.position.y)) {
setHelpLineHorizontal();
setHelpLineVertical();
}
}
};
});