Refactor: Group with shortcut and click should call The same function, it shouldnt use it directly
This commit is contained in:
parent
3f3cd7b9b2
commit
2c6d9ee520
1 changed files with 48 additions and 95 deletions
|
|
@ -94,6 +94,52 @@ export default function Page({
|
||||||
const [lastSelection, setLastSelection] =
|
const [lastSelection, setLastSelection] =
|
||||||
useState<OnSelectionChangeParams | null>(null);
|
useState<OnSelectionChangeParams | null>(null);
|
||||||
|
|
||||||
|
function handleGroupNode() {
|
||||||
|
takeSnapshot();
|
||||||
|
if (validateSelection(lastSelection!, edges).length === 0) {
|
||||||
|
const clonedNodes = cloneDeep(nodes);
|
||||||
|
const clonedEdges = cloneDeep(edges);
|
||||||
|
const clonedSelection = cloneDeep(lastSelection);
|
||||||
|
updateIds(
|
||||||
|
{ nodes: clonedNodes, edges: clonedEdges },
|
||||||
|
clonedSelection!
|
||||||
|
);
|
||||||
|
const { newFlow, removedEdges } = generateFlow(
|
||||||
|
clonedSelection!,
|
||||||
|
clonedNodes,
|
||||||
|
clonedEdges,
|
||||||
|
getRandomName()
|
||||||
|
);
|
||||||
|
const newGroupNode = generateNodeFromFlow(newFlow, getNodeId);
|
||||||
|
const newEdges = reconnectEdges(newGroupNode, removedEdges);
|
||||||
|
setNodes([
|
||||||
|
...clonedNodes.filter(
|
||||||
|
(oldNodes) =>
|
||||||
|
!clonedSelection?.nodes.some(
|
||||||
|
(selectionNode) => selectionNode.id === oldNodes.id
|
||||||
|
)
|
||||||
|
),
|
||||||
|
newGroupNode,
|
||||||
|
]);
|
||||||
|
setEdges([
|
||||||
|
...clonedEdges.filter(
|
||||||
|
(oldEdge) =>
|
||||||
|
!clonedSelection!.nodes.some(
|
||||||
|
(selectionNode) =>
|
||||||
|
selectionNode.id === oldEdge.target ||
|
||||||
|
selectionNode.id === oldEdge.source
|
||||||
|
)
|
||||||
|
),
|
||||||
|
...newEdges,
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
setErrorData({
|
||||||
|
title: INVALID_SELECTION_ERROR_ALERT,
|
||||||
|
list: validateSelection(lastSelection!, edges),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const setNode = useFlowStore((state) => state.setNode);
|
const setNode = useFlowStore((state) => state.setNode);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const onKeyDown = (event: KeyboardEvent) => {
|
const onKeyDown = (event: KeyboardEvent) => {
|
||||||
|
|
@ -104,49 +150,7 @@ export default function Page({
|
||||||
event.key === "g"
|
event.key === "g"
|
||||||
) {
|
) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
takeSnapshot();
|
handleGroupNode();
|
||||||
if (validateSelection(lastSelection!, edges).length === 0) {
|
|
||||||
const clonedNodes = cloneDeep(nodes);
|
|
||||||
const clonedEdges = cloneDeep(edges);
|
|
||||||
const clonedSelection = cloneDeep(lastSelection);
|
|
||||||
updateIds(
|
|
||||||
{ nodes: clonedNodes, edges: clonedEdges },
|
|
||||||
clonedSelection!
|
|
||||||
);
|
|
||||||
const { newFlow, removedEdges } = generateFlow(
|
|
||||||
clonedSelection!,
|
|
||||||
clonedNodes,
|
|
||||||
clonedEdges,
|
|
||||||
getRandomName()
|
|
||||||
);
|
|
||||||
const newGroupNode = generateNodeFromFlow(newFlow, getNodeId);
|
|
||||||
const newEdges = reconnectEdges(newGroupNode, removedEdges);
|
|
||||||
setNodes([
|
|
||||||
...clonedNodes.filter(
|
|
||||||
(oldNodes) =>
|
|
||||||
!clonedSelection?.nodes.some(
|
|
||||||
(selectionNode) => selectionNode.id === oldNodes.id
|
|
||||||
)
|
|
||||||
),
|
|
||||||
newGroupNode,
|
|
||||||
]);
|
|
||||||
setEdges([
|
|
||||||
...clonedEdges.filter(
|
|
||||||
(oldEdge) =>
|
|
||||||
!clonedSelection!.nodes.some(
|
|
||||||
(selectionNode) =>
|
|
||||||
selectionNode.id === oldEdge.target ||
|
|
||||||
selectionNode.id === oldEdge.source
|
|
||||||
)
|
|
||||||
),
|
|
||||||
...newEdges,
|
|
||||||
]);
|
|
||||||
} else {
|
|
||||||
setErrorData({
|
|
||||||
title: INVALID_SELECTION_ERROR_ALERT,
|
|
||||||
list: validateSelection(lastSelection!, edges),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
(event.ctrlKey || event.metaKey) &&
|
(event.ctrlKey || event.metaKey) &&
|
||||||
|
|
@ -484,58 +488,7 @@ export default function Page({
|
||||||
isVisible={selectionMenuVisible}
|
isVisible={selectionMenuVisible}
|
||||||
nodes={lastSelection?.nodes}
|
nodes={lastSelection?.nodes}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
takeSnapshot();
|
handleGroupNode()
|
||||||
if (
|
|
||||||
validateSelection(lastSelection!, edges).length === 0
|
|
||||||
) {
|
|
||||||
const clonedNodes = cloneDeep(nodes);
|
|
||||||
const clonedEdges = cloneDeep(edges);
|
|
||||||
const clonedSelection = cloneDeep(lastSelection);
|
|
||||||
updateIds(
|
|
||||||
{ nodes: clonedNodes, edges: clonedEdges },
|
|
||||||
clonedSelection!
|
|
||||||
);
|
|
||||||
const { newFlow, removedEdges } = generateFlow(
|
|
||||||
clonedSelection!,
|
|
||||||
clonedNodes,
|
|
||||||
clonedEdges,
|
|
||||||
getRandomName()
|
|
||||||
);
|
|
||||||
const newGroupNode = generateNodeFromFlow(
|
|
||||||
newFlow,
|
|
||||||
getNodeId
|
|
||||||
);
|
|
||||||
const newEdges = reconnectEdges(
|
|
||||||
newGroupNode,
|
|
||||||
removedEdges
|
|
||||||
);
|
|
||||||
setNodes([
|
|
||||||
...clonedNodes.filter(
|
|
||||||
(oldNodes) =>
|
|
||||||
!clonedSelection?.nodes.some(
|
|
||||||
(selectionNode) =>
|
|
||||||
selectionNode.id === oldNodes.id
|
|
||||||
)
|
|
||||||
),
|
|
||||||
newGroupNode,
|
|
||||||
]);
|
|
||||||
setEdges([
|
|
||||||
...clonedEdges.filter(
|
|
||||||
(oldEdge) =>
|
|
||||||
!clonedSelection!.nodes.some(
|
|
||||||
(selectionNode) =>
|
|
||||||
selectionNode.id === oldEdge.target ||
|
|
||||||
selectionNode.id === oldEdge.source
|
|
||||||
)
|
|
||||||
),
|
|
||||||
...newEdges,
|
|
||||||
]);
|
|
||||||
} else {
|
|
||||||
setErrorData({
|
|
||||||
title: INVALID_SELECTION_ERROR_ALERT,
|
|
||||||
list: validateSelection(lastSelection!, edges),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</ReactFlow>
|
</ReactFlow>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue