### What problem does this PR solve? #9869 ### Type of change - [x] New Feature (non-breaking change which adds functionality) --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: jinhai <haijin.chn@gmail.com> Signed-off-by: Jin Hai <haijin.chn@gmail.com> Co-authored-by: chanx <1243304602@qq.com> Co-authored-by: balibabu <cike8899@users.noreply.github.com> Co-authored-by: Lynn <lynn_inf@hotmail.com> Co-authored-by: 纷繁下的无奈 <zhileihuang@126.com> Co-authored-by: huangzl <huangzl@shinemo.com> Co-authored-by: writinwaters <93570324+writinwaters@users.noreply.github.com> Co-authored-by: Wilmer <33392318@qq.com> Co-authored-by: Adrian Weidig <adrianweidig@gmx.net> Co-authored-by: Zhichang Yu <yuzhichang@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Yongteng Lei <yongtengrey@outlook.com> Co-authored-by: Liu An <asiro@qq.com> Co-authored-by: buua436 <66937541+buua436@users.noreply.github.com> Co-authored-by: BadwomanCraZY <511528396@qq.com> Co-authored-by: cucusenok <31804608+cucusenok@users.noreply.github.com> Co-authored-by: Russell Valentine <russ@coldstonelabs.org> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Billy Bao <newyorkupperbay@gmail.com> Co-authored-by: Zhedong Cen <cenzhedong2@126.com> Co-authored-by: TensorNull <129579691+TensorNull@users.noreply.github.com> Co-authored-by: TensorNull <tensor.null@gmail.com> Co-authored-by: TeslaZY <TeslaZY@outlook.com> Co-authored-by: Ajay <160579663+aybanda@users.noreply.github.com> Co-authored-by: AB <aj@Ajays-MacBook-Air.local> Co-authored-by: 天海蒼灆 <huangaoqin@tecpie.com> Co-authored-by: He Wang <wanghechn@qq.com> Co-authored-by: Atsushi Hatakeyama <atu729@icloud.com> Co-authored-by: Jin Hai <haijin.chn@gmail.com> Co-authored-by: Mohamed Mathari <155896313+melmathari@users.noreply.github.com> Co-authored-by: Mohamed Mathari <nocodeventure@Mac-mini-van-Mohamed.fritz.box> Co-authored-by: Stephen Hu <stephenhu@seismic.com> Co-authored-by: Shaun Zhang <zhangwfjh@users.noreply.github.com> Co-authored-by: zhimeng123 <60221886+zhimeng123@users.noreply.github.com> Co-authored-by: mxc <mxc@example.com> Co-authored-by: Dominik Novotný <50611433+SgtMarmite@users.noreply.github.com> Co-authored-by: EVGENY M <168018528+rjohny55@users.noreply.github.com> Co-authored-by: mcoder6425 <mcoder64@gmail.com> Co-authored-by: lemsn <lemsn@msn.com> Co-authored-by: lemsn <lemsn@126.com> Co-authored-by: Adrian Gora <47756404+adagora@users.noreply.github.com> Co-authored-by: Womsxd <45663319+Womsxd@users.noreply.github.com> Co-authored-by: FatMii <39074672+FatMii@users.noreply.github.com>
49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
import { RAGFlowNodeType } from '@/interfaces/database/flow';
|
|
import { OnBeforeDelete } from '@xyflow/react';
|
|
import { Operator } from '../constant';
|
|
import useGraphStore from '../store';
|
|
|
|
const UndeletableNodes = [Operator.Begin];
|
|
|
|
export function useBeforeDelete() {
|
|
const { getOperatorTypeFromId } = useGraphStore((state) => state);
|
|
|
|
const handleBeforeDelete: OnBeforeDelete<RAGFlowNodeType> = async ({
|
|
nodes, // Nodes to be deleted
|
|
edges, // Edges to be deleted
|
|
}) => {
|
|
const toBeDeletedNodes = nodes.filter((node) => {
|
|
const operatorType = node.data?.label as Operator;
|
|
if (operatorType === Operator.Begin) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
});
|
|
|
|
const toBeDeletedEdges = edges.filter((edge) => {
|
|
const sourceType = getOperatorTypeFromId(edge.source) as Operator;
|
|
const downStreamNodes = nodes.filter((x) => x.id === edge.target);
|
|
|
|
// This edge does not need to be deleted, the range of edges that do not need to be deleted is smaller, so consider the case where it does not need to be deleted
|
|
if (
|
|
UndeletableNodes.includes(sourceType) && // Upstream node is Begin or IterationStart
|
|
downStreamNodes.length === 0 // Downstream node does not exist in the nodes to be deleted
|
|
) {
|
|
if (!nodes.some((x) => x.id === edge.source)) {
|
|
return true; // Can be deleted
|
|
}
|
|
return false; // Cannot be deleted
|
|
}
|
|
|
|
return true;
|
|
});
|
|
|
|
return {
|
|
nodes: toBeDeletedNodes,
|
|
edges: toBeDeletedEdges,
|
|
};
|
|
};
|
|
|
|
return { handleBeforeDelete };
|
|
}
|