"use client"; import React from "react"; import { Button } from "@/components/ui/button"; import { Plus, Trash2 } from "lucide-react"; import { ColumnInfo } from "@/lib/api/dataflow"; import { DataSaveSettings } from "@/types/connectionTypes"; import { generateConditionId } from "@/utils/connectionUtils"; import { useActionConditionHelpers } from "@/hooks/useConditionManager"; import { ActionConditionRenderer } from "./ActionConditionRenderer"; interface ActionConditionsSectionProps { action: DataSaveSettings["actions"][0]; actionIndex: number; settings: DataSaveSettings; onSettingsChange: (settings: DataSaveSettings) => void; fromTableColumns: ColumnInfo[]; toTableColumns: ColumnInfo[]; fromTableName?: string; toTableName?: string; } export const ActionConditionsSection: React.FC = ({ action, actionIndex, settings, onSettingsChange, fromTableColumns, toTableColumns, fromTableName, toTableName, }) => { const { addActionGroupStart, addActionGroupEnd, getActionCurrentGroupLevel } = useActionConditionHelpers(); // INSERT가 아닌 액션 타입인지 확인 const isConditionRequired = action.actionType !== "insert"; // 유효한 조건이 있는지 확인 (group-start, group-end만 있는 경우 제외) const hasValidConditions = action.conditions?.some((condition) => { if (condition.type !== "condition") return false; if (!condition.field || !condition.operator) return false; // value가 null, undefined, 빈 문자열이면 유효하지 않음 const value = condition.value; if (value === null || value === undefined || value === "") return false; return true; }) || false; const addActionCondition = () => { const newActions = [...settings.actions]; if (!newActions[actionIndex].conditions) { newActions[actionIndex].conditions = []; } const currentConditions = newActions[actionIndex].conditions || []; const newCondition = { id: generateConditionId(), type: "condition" as const, field: "", operator: "=" as const, value: "", dataType: "string", tableType: undefined, // 사용자가 직접 선택하도록 // 첫 번째 조건이 아니고, 바로 앞이 group-start가 아니면 logicalOperator 추가 ...(currentConditions.length > 0 && currentConditions[currentConditions.length - 1]?.type !== "group-start" && { logicalOperator: "AND" as const, }), }; newActions[actionIndex].conditions = [...currentConditions, newCondition]; onSettingsChange({ ...settings, actions: newActions }); }; const clearAllConditions = () => { const newActions = [...settings.actions]; newActions[actionIndex].conditions = []; onSettingsChange({ ...settings, actions: newActions }); }; return (
🔍 이 액션의 실행 조건 {isConditionRequired ? ( 필수 ) : ( (선택사항) )} {action.conditions && action.conditions.length > 0 && ( {action.conditions.length}개 )} {isConditionRequired && !hasValidConditions && ( ⚠️ 조건 필요 )}
{action.conditions && action.conditions.length > 0 && ( )}
{/* 조건이 없을 때 안내 메시지 */} {(!action.conditions || action.conditions.length === 0) && (
{isConditionRequired ? (
⚠️
실행조건이 필요합니다
{action.actionType.toUpperCase()} 액션은 언제 실행될지 결정하는 조건이 반드시 필요합니다.
필드, 연산자, 값을 모두 입력해야 합니다.
예: user_name = '관리자우저' AND status = 'active'
) : (
조건이 설정되지 않았습니다. INSERT 액션은 조건 없이도 실행 가능합니다.
)}
)} {action.conditions && action.conditions.length > 0 && (
{action.conditions.map((condition, condIndex) => (
))}
)}
); };