"use client"; /** * 노드 속성 편집 패널 */ import { useFlowEditorStore } from "@/lib/stores/flowEditorStore"; import { TableSourceProperties } from "./properties/TableSourceProperties"; import { InsertActionProperties } from "./properties/InsertActionProperties"; import { ConditionProperties } from "./properties/ConditionProperties"; import { UpdateActionProperties } from "./properties/UpdateActionProperties"; import { DeleteActionProperties } from "./properties/DeleteActionProperties"; import { ExternalDBSourceProperties } from "./properties/ExternalDBSourceProperties"; import { UpsertActionProperties } from "./properties/UpsertActionProperties"; import { DataTransformProperties } from "./properties/DataTransformProperties"; import { AggregateProperties } from "./properties/AggregateProperties"; import { FormulaTransformProperties } from "./properties/FormulaTransformProperties"; import { RestAPISourceProperties } from "./properties/RestAPISourceProperties"; import { CommentProperties } from "./properties/CommentProperties"; import { LogProperties } from "./properties/LogProperties"; import { EmailActionProperties } from "./properties/EmailActionProperties"; import { ScriptActionProperties } from "./properties/ScriptActionProperties"; import { HttpRequestActionProperties } from "./properties/HttpRequestActionProperties"; import { ProcedureCallActionProperties } from "./properties/ProcedureCallActionProperties"; import type { NodeType } from "@/types/node-editor"; export function PropertiesPanel() { const { nodes, selectedNodes, setShowPropertiesPanel } = useFlowEditorStore(); const selectedNode = selectedNodes.length === 1 ? nodes.find((n) => n.id === selectedNodes[0]) : null; if (selectedNodes.length === 0) { return (

노드를 선택해 주세요

); } if (selectedNodes.length > 1) { return (

{selectedNodes.length}개의 노드가 선택됐어요

하나의 노드만 선택하면 속성을 편집할 수 있어요

); } if (!selectedNode) return null; return ; } /** * 노드 타입별 속성 렌더러 */ function NodePropertiesRenderer({ node }: { node: any }) { switch (node.type) { case "tableSource": return ; case "insertAction": return ; case "condition": return ; case "updateAction": return ; case "deleteAction": return ; case "externalDBSource": return ; case "upsertAction": return ; case "dataTransform": return ; case "aggregate": return ; case "formulaTransform": return ; case "restAPISource": return ; case "comment": return ; case "log": return ; case "emailAction": return ; case "scriptAction": return ; case "httpRequestAction": return ; case "procedureCallAction": return ; default: return (

속성 편집 준비 중이에요

{getNodeTypeLabel(node.type as NodeType)} 노드의 속성 편집은 곧 지원될 예정이에요.

); } } /** * 노드 타입 라벨 가져오기 */ function getNodeTypeLabel(type: NodeType): string { const labels: Record = { tableSource: "테이블 소스", externalDBSource: "외부 DB 소스", restAPISource: "REST API 소스", condition: "조건 분기", fieldMapping: "필드 매핑", dataTransform: "데이터 변환", aggregate: "집계", formulaTransform: "수식 변환", insertAction: "INSERT 액션", updateAction: "UPDATE 액션", deleteAction: "DELETE 액션", upsertAction: "UPSERT 액션", emailAction: "메일 발송", scriptAction: "스크립트 실행", httpRequestAction: "HTTP 요청", procedureCallAction: "프로시저 호출", comment: "주석", log: "로그", }; return labels[type] || type; }