데이터 저장 설정 로직 수정

This commit is contained in:
hyeonsu
2025-09-16 14:44:41 +09:00
parent d18e78e8a0
commit c64c374142
4 changed files with 76 additions and 56 deletions
@@ -193,26 +193,34 @@ export const ConnectionSetupModal: React.FC<ConnectionSetupModalProps> = ({
// data-save 설정 로드 - 안전하게 처리
const actionsData = Array.isArray(settings.actions) ? settings.actions : [];
setDataSaveSettings({
actions: actionsData.map((action: any) => ({
id: action.id || `action-${Date.now()}`,
name: action.name || "새 액션",
actionType: action.actionType || "insert",
conditions: Array.isArray(action.conditions) ? action.conditions : [],
actions: actionsData.map((action: Record<string, unknown>) => ({
id: (action.id as string) || `action-${Date.now()}`,
name: (action.name as string) || "새 액션",
actionType: (action.actionType as "insert" | "update" | "delete" | "upsert") || "insert",
conditions: Array.isArray(action.conditions)
? action.conditions.map(
(condition: Record<string, unknown>) =>
({
...condition,
operator: condition.operator || "=", // 기본값 보장
}) as ConditionNode,
)
: [],
fieldMappings: Array.isArray(action.fieldMappings)
? action.fieldMappings.map((mapping: any) => ({
sourceTable: mapping.sourceTable || "",
sourceField: mapping.sourceField || "",
targetTable: mapping.targetTable || "",
targetField: mapping.targetField || "",
defaultValue: mapping.defaultValue || "",
transformFunction: mapping.transformFunction || "",
? action.fieldMappings.map((mapping: Record<string, unknown>) => ({
sourceTable: (mapping.sourceTable as string) || "",
sourceField: (mapping.sourceField as string) || "",
targetTable: (mapping.targetTable as string) || "",
targetField: (mapping.targetField as string) || "",
defaultValue: (mapping.defaultValue as string) || "",
transformFunction: (mapping.transformFunction as string) || "",
}))
: [],
splitConfig: action.splitConfig
? {
sourceField: action.splitConfig.sourceField || "",
delimiter: action.splitConfig.delimiter || ",",
targetField: action.splitConfig.targetField || "",
sourceField: ((action.splitConfig as Record<string, unknown>).sourceField as string) || "",
delimiter: ((action.splitConfig as Record<string, unknown>).delimiter as string) || ",",
targetField: ((action.splitConfig as Record<string, unknown>).targetField as string) || "",
}
: undefined,
})),
@@ -426,7 +434,15 @@ export const ConnectionSetupModal: React.FC<ConnectionSetupModalProps> = ({
id: action.id,
actionType: action.actionType,
enabled: true,
conditions: action.conditions,
conditions:
action.conditions?.map((condition) => {
// 모든 조건 타입에 대해 operator 필드 보장
const baseCondition = { ...condition };
if (condition.type === "condition") {
baseCondition.operator = condition.operator || "=";
}
return baseCondition;
}) || [],
fieldMappings: action.fieldMappings.map((mapping) => ({
sourceTable: mapping.sourceTable,
sourceField: mapping.sourceField,
@@ -497,14 +513,14 @@ export const ConnectionSetupModal: React.FC<ConnectionSetupModalProps> = ({
const addCondition = () => {
const newCondition: ConditionNode = {
id: generateId(),
type: "condition",
type: "condition" as const,
field: "",
operator_type: "=",
operator: "=",
value: "",
dataType: "string",
// 첫 번째 조건이 아니고, 바로 앞이 group-start가 아니면 logicalOperator 추가
...(conditions.length > 0 &&
conditions[conditions.length - 1]?.type !== "group-start" && { logicalOperator: "AND" }),
conditions[conditions.length - 1]?.type !== "group-start" && { logicalOperator: "AND" as const }),
};
setConditions([...conditions, newCondition]);
@@ -517,11 +533,11 @@ export const ConnectionSetupModal: React.FC<ConnectionSetupModalProps> = ({
const groupStart: ConditionNode = {
id: generateId(),
type: "group-start",
type: "group-start" as const,
groupId,
groupLevel,
// 첫 번째 그룹이 아니면 logicalOperator 추가
...(conditions.length > 0 && { logicalOperator: "AND" }),
...(conditions.length > 0 && { logicalOperator: "AND" as const }),
};
setConditions([...conditions, groupStart]);
@@ -539,7 +555,7 @@ export const ConnectionSetupModal: React.FC<ConnectionSetupModalProps> = ({
const lastOpenGroup = openGroups[openGroups.length - 1];
const groupEnd: ConditionNode = {
id: generateId(),
type: "group-end",
type: "group-end" as const,
groupId: lastOpenGroup.groupId,
groupLevel: lastOpenGroup.groupLevel,
};
@@ -621,10 +637,11 @@ export const ConnectionSetupModal: React.FC<ConnectionSetupModalProps> = ({
const groupStart: ConditionNode = {
id: generateId(),
type: "group-start",
type: "group-start" as const,
groupId,
groupLevel,
logicalOperator: currentConditions.length > 0 ? "AND" : undefined,
// 첫 번째 그룹이 아니면 logicalOperator 추가
...(currentConditions.length > 0 && { logicalOperator: "AND" as const }),
};
const newActions = [...dataSaveSettings.actions];
@@ -644,7 +661,7 @@ export const ConnectionSetupModal: React.FC<ConnectionSetupModalProps> = ({
const lastOpenGroup = openGroups[openGroups.length - 1];
const groupEnd: ConditionNode = {
id: generateId(),
type: "group-end",
type: "group-end" as const,
groupId: lastOpenGroup.groupId,
groupLevel: lastOpenGroup.groupLevel,
};
@@ -822,10 +839,10 @@ export const ConnectionSetupModal: React.FC<ConnectionSetupModalProps> = ({
</SelectContent>
</Select>
<Select
value={condition.operator_type || "="}
value={condition.operator || "="}
onValueChange={(value: "=" | "!=" | ">" | "<" | ">=" | "<=" | "LIKE") => {
const newActions = [...dataSaveSettings.actions];
newActions[actionIndex].conditions![condIndex].operator_type = value;
newActions[actionIndex].conditions![condIndex].operator = value;
setDataSaveSettings({ ...dataSaveSettings, actions: newActions });
}}
>
@@ -1122,8 +1139,8 @@ export const ConnectionSetupModal: React.FC<ConnectionSetupModalProps> = ({
{/* 연산자 선택 */}
<Select
value={condition.operator_type || "="}
onValueChange={(value) => updateCondition(index, "operator_type", value)}
value={condition.operator || "="}
onValueChange={(value) => updateCondition(index, "operator", value)}
>
<SelectTrigger className="h-8 w-20 text-xs">
<SelectValue />
@@ -1532,18 +1549,21 @@ export const ConnectionSetupModal: React.FC<ConnectionSetupModalProps> = ({
if (!newActions[actionIndex].conditions) {
newActions[actionIndex].conditions = [];
}
newActions[actionIndex].conditions = [
...(newActions[actionIndex].conditions || []),
{
id: generateId(),
type: "condition",
field: "",
operator_type: "=",
value: "",
dataType: "string",
logicalOperator: "AND",
},
];
const currentConditions = newActions[actionIndex].conditions || [];
const newCondition: ConditionNode = {
id: generateId(),
type: "condition" as const,
field: "",
operator: "=",
value: "",
dataType: "string",
// 첫 번째 조건이 아니고, 바로 앞이 group-start가 아니면 logicalOperator 추가
...(currentConditions.length > 0 &&
currentConditions[currentConditions.length - 1]?.type !== "group-start" && {
logicalOperator: "AND" as const,
}),
};
newActions[actionIndex].conditions = [...currentConditions, newCondition];
setDataSaveSettings({ ...dataSaveSettings, actions: newActions });
}}
className="h-6 text-xs"