2
0

build-line.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
  3. * SPDX-License-Identifier: MIT
  4. */
  5. import {
  6. WorkflowLinesManager,
  7. WorkflowNodeEntity,
  8. WorkflowNodePortsData,
  9. WorkflowPortEntity,
  10. } from '@flowgram.ai/free-layout-core';
  11. export type IBuildLine = (params: {
  12. node: WorkflowNodeEntity;
  13. linesManager: WorkflowLinesManager;
  14. fromPort?: WorkflowPortEntity;
  15. toPort?: WorkflowPortEntity;
  16. }) => void;
  17. /** 建立连线 */
  18. export const buildLine: IBuildLine = (params) => {
  19. const { fromPort, node, toPort, linesManager } = params;
  20. const portsData = node.getData(WorkflowNodePortsData);
  21. if (!portsData) {
  22. return;
  23. }
  24. const shouldBuildFromLine = portsData.inputPorts?.length > 0;
  25. if (fromPort && shouldBuildFromLine) {
  26. const toTargetPort = portsData.inputPorts[0];
  27. linesManager.createLine({
  28. from: fromPort.node.id,
  29. fromPort: fromPort.portID,
  30. to: node.id,
  31. toPort: toTargetPort.portID,
  32. });
  33. }
  34. const shouldBuildToLine = portsData.outputPorts?.length > 0;
  35. if (toPort && shouldBuildToLine) {
  36. const fromTargetPort = portsData.outputPorts[0];
  37. linesManager.createLine({
  38. from: node.id,
  39. fromPort: fromTargetPort.portID,
  40. to: toPort.node.id,
  41. toPort: toPort.portID,
  42. });
  43. }
  44. };