fix: ActionConditionBuilder 모든 Select 중복 키 수정

수정된 위치:
- line 271: fromColumns (소스 필드)
- line 289: toColumns (소스 필드)
- line 623: fromColumns (필드 매핑)
- line 638: toColumns (필드 매핑)
- line 737: getAvailableFieldsForMapping (대상 필드)

모든 .map() 앞에 .filter() 추가:
- 빈 columnName 제외
- 중복 키 방지
- React 경고 해결
This commit is contained in:
kjs 2025-10-01 17:23:18 +09:00
parent c3e6eff0fe
commit 7bb70bdd3b
1 changed files with 55 additions and 45 deletions

View File

@ -268,17 +268,19 @@ const ActionConditionBuilder: React.FC<ActionConditionBuilderProps> = ({
{fromColumns.length > 0 && (
<>
<div className="text-muted-foreground px-2 py-1 text-xs font-medium">FROM </div>
{fromColumns.map((column) => (
<SelectItem key={`from_${column.columnName}`} value={`from.${column.columnName}`}>
<div className="flex items-center gap-2">
<span className="text-blue-600">📤</span>
<span>{column.displayName || column.columnName}</span>
<Badge variant="outline" className="text-xs">
{column.webType || column.dataType}
</Badge>
</div>
</SelectItem>
))}
{fromColumns
.filter((column) => column.columnName) // 빈 문자열 제외
.map((column) => (
<SelectItem key={`from_${column.columnName}`} value={`from.${column.columnName}`}>
<div className="flex items-center gap-2">
<span className="text-blue-600">📤</span>
<span>{column.displayName || column.columnName}</span>
<Badge variant="outline" className="text-xs">
{column.webType || column.dataType}
</Badge>
</div>
</SelectItem>
))}
</>
)}
@ -286,15 +288,17 @@ const ActionConditionBuilder: React.FC<ActionConditionBuilderProps> = ({
{toColumns.length > 0 && (
<>
<div className="text-muted-foreground px-2 py-1 text-xs font-medium">TO </div>
{toColumns.map((column) => (
<SelectItem key={`to_${column.columnName}`} value={`to.${column.columnName}`}>
<div className="flex items-center gap-2">
<span className="text-green-600">📥</span>
<span>{column.displayName || column.columnName}</span>
<Badge variant="outline" className="text-xs">
{column.webType || column.dataType}
</Badge>
</div>
{toColumns
.filter((column) => column.columnName) // 빈 문자열 제외
.map((column) => (
<SelectItem key={`to_${column.columnName}`} value={`to.${column.columnName}`}>
<div className="flex items-center gap-2">
<span className="text-green-600">📥</span>
<span>{column.displayName || column.columnName}</span>
<Badge variant="outline" className="text-xs">
{column.webType || column.dataType}
</Badge>
</div>
</SelectItem>
))}
</>
@ -616,14 +620,16 @@ const ActionConditionBuilder: React.FC<ActionConditionBuilderProps> = ({
<div className="text-muted-foreground px-2 py-1 text-xs font-medium">
FROM
</div>
{fromColumns.map((column) => (
<SelectItem key={`from_${column.columnName}`} value={`from.${column.columnName}`}>
<div className="flex items-center gap-2">
<span className="text-blue-600">📤</span>
<span>{column.displayName || column.columnName}</span>
</div>
</SelectItem>
))}
{fromColumns
.filter((column) => column.columnName) // 빈 문자열 제외
.map((column) => (
<SelectItem key={`from_${column.columnName}`} value={`from.${column.columnName}`}>
<div className="flex items-center gap-2">
<span className="text-blue-600">📤</span>
<span>{column.displayName || column.columnName}</span>
</div>
</SelectItem>
))}
</>
)}
@ -631,13 +637,15 @@ const ActionConditionBuilder: React.FC<ActionConditionBuilderProps> = ({
{toColumns.length > 0 && (
<>
<div className="text-muted-foreground px-2 py-1 text-xs font-medium">TO </div>
{toColumns.map((column) => (
<SelectItem key={`to_${column.columnName}`} value={`to.${column.columnName}`}>
<div className="flex items-center gap-2">
<span className="text-green-600">📥</span>
<span>{column.displayName || column.columnName}</span>
</div>
</SelectItem>
{toColumns
.filter((column) => column.columnName) // 빈 문자열 제외
.map((column) => (
<SelectItem key={`to_${column.columnName}`} value={`to.${column.columnName}`}>
<div className="flex items-center gap-2">
<span className="text-green-600">📥</span>
<span>{column.displayName || column.columnName}</span>
</div>
</SelectItem>
))}
</>
)}
@ -733,16 +741,18 @@ const ActionConditionBuilder: React.FC<ActionConditionBuilderProps> = ({
<SelectValue placeholder="대상 필드" />
</SelectTrigger>
<SelectContent>
{getAvailableFieldsForMapping(index).map((column) => (
<SelectItem key={column.columnName} value={column.columnName}>
<div className="flex items-center gap-2">
<span>{column.displayName || column.columnName}</span>
<Badge variant="outline" className="text-xs">
{column.webType || column.dataType}
</Badge>
</div>
</SelectItem>
))}
{getAvailableFieldsForMapping(index)
.filter((column) => column.columnName) // 빈 문자열 제외
.map((column) => (
<SelectItem key={column.columnName} value={column.columnName}>
<div className="flex items-center gap-2">
<span>{column.displayName || column.columnName}</span>
<Badge variant="outline" className="text-xs">
{column.webType || column.dataType}
</Badge>
</div>
</SelectItem>
))}
</SelectContent>
</Select>