Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

use-before-delete.tsx 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { RAGFlowNodeType } from '@/interfaces/database/flow';
  2. import { OnBeforeDelete } from '@xyflow/react';
  3. import { Operator } from '../constant';
  4. import useGraphStore from '../store';
  5. const UndeletableNodes = [Operator.Begin, Operator.IterationStart];
  6. export function useBeforeDelete() {
  7. const getOperatorTypeFromId = useGraphStore(
  8. (state) => state.getOperatorTypeFromId,
  9. );
  10. const handleBeforeDelete: OnBeforeDelete<RAGFlowNodeType> = async ({
  11. nodes, // Nodes to be deleted
  12. edges, // Edges to be deleted
  13. }) => {
  14. const toBeDeletedNodes = nodes.filter((node) => {
  15. const operatorType = node.data?.label as Operator;
  16. if (operatorType === Operator.Begin) {
  17. return false;
  18. }
  19. if (
  20. operatorType === Operator.IterationStart &&
  21. !nodes.some((x) => x.id === node.parentId)
  22. ) {
  23. return false;
  24. }
  25. return true;
  26. });
  27. const toBeDeletedEdges = edges.filter((edge) => {
  28. const sourceType = getOperatorTypeFromId(edge.source) as Operator;
  29. const downStreamNodes = nodes.filter((x) => x.id === edge.target);
  30. // 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
  31. if (
  32. UndeletableNodes.includes(sourceType) && // Upstream node is Begin or IterationStart
  33. downStreamNodes.length === 0 // Downstream node does not exist in the nodes to be deleted
  34. ) {
  35. if (!nodes.some((x) => x.id === edge.source)) {
  36. return true; // Can be deleted
  37. }
  38. return false; // Cannot be deleted
  39. }
  40. return true;
  41. });
  42. return {
  43. nodes: toBeDeletedNodes,
  44. edges: toBeDeletedEdges,
  45. };
  46. };
  47. return { handleBeforeDelete };
  48. }