"use client"; /** * 프로시저/함수 호출 액션 노드 * 내부 또는 외부 DB의 프로시저/함수를 호출하는 노드 */ import { memo } from "react"; import { Handle, Position, NodeProps } from "reactflow"; import { Database, Workflow } from "lucide-react"; import type { ProcedureCallActionNodeData } from "@/types/node-editor"; export const ProcedureCallActionNode = memo( ({ data, selected }: NodeProps) => { const hasProcedure = !!data.procedureName; const inParams = data.parameters?.filter((p) => p.mode === "IN" || p.mode === "INOUT") ?? []; const outParams = data.parameters?.filter((p) => p.mode === "OUT" || p.mode === "INOUT") ?? []; return (
{/* 입력 핸들 */} {/* 헤더 */}
{data.displayName || "프로시저 호출"}
{/* 본문 */}
{/* DB 소스 */}
{data.dbSource === "external" ? ( {data.connectionName || "외부 DB"} ) : ( 내부 DB )} {data.callType === "function" ? "FUNCTION" : "PROCEDURE"}
{/* 프로시저명 */}
{hasProcedure ? ( {data.procedureSchema && data.procedureSchema !== "public" ? `${data.procedureSchema}.` : ""} {data.procedureName}() ) : ( 프로시저 선택 필요 )}
{/* 파라미터 수 */} {hasProcedure && inParams.length > 0 && (
입력 파라미터: {inParams.length}개
)} {/* 반환 필드 */} {hasProcedure && outParams.length > 0 && (
반환 필드:
{outParams.map((p) => (
{p.name} {p.dataType}
))}
)}
{/* 출력 핸들 */}
); } ); ProcedureCallActionNode.displayName = "ProcedureCallActionNode";