"use client"; /** * UPSERT 액션 노드 * INSERT와 UPDATE를 결합한 노드 */ import { memo } from "react"; import { Handle, Position, NodeProps } from "reactflow"; import { Database, RefreshCw } from "lucide-react"; import type { UpsertActionNodeData } from "@/types/node-editor"; export const UpsertActionNode = memo(({ data, selected }: NodeProps) => { return (
{/* 헤더 */}
{data.displayName || "UPSERT 액션"}
{data.targetTable}
{/* 본문 */}
타겟: {data.displayName || data.targetTable} {data.targetTable && data.displayName && data.displayName !== data.targetTable && ( ({data.targetTable}) )}
{/* 충돌 키 */} {data.conflictKeys && data.conflictKeys.length > 0 && (
충돌 키:
{data.conflictKeys.map((key, idx) => ( {data.conflictKeyLabels?.[idx] || key} ))}
)} {/* 필드 매핑 */} {data.fieldMappings && data.fieldMappings.length > 0 && (
필드 매핑:
{data.fieldMappings.slice(0, 3).map((mapping, idx) => (
{mapping.sourceFieldLabel || mapping.sourceField || mapping.staticValue || "?"} {mapping.targetFieldLabel || mapping.targetField}
))} {data.fieldMappings.length > 3 && (
... 외 {data.fieldMappings.length - 3}개
)}
)} {/* 옵션 */}
{data.options?.updateOnConflict && ( 충돌 시 업데이트 )} {data.options?.batchSize && ( 배치: {data.options.batchSize} )}
{/* 핸들 */}
); }); UpsertActionNode.displayName = "UpsertActionNode";