필드 연결 설정 테이블 및 컬럼 db에서 가져오기

This commit is contained in:
hyeonsu 2025-09-19 10:45:09 +09:00
parent 210a4ec62d
commit 8dec80fe22
7 changed files with 20 additions and 13 deletions

View File

@ -185,6 +185,9 @@ export const ConnectionSetupModal: React.FC<ConnectionSetupModalProps> = ({
// 모달이 열릴 때 기본값 설정 // 모달이 열릴 때 기본값 설정
useEffect(() => { useEffect(() => {
if (isOpen && connection) { if (isOpen && connection) {
// 모달이 열릴 때마다 캐시 초기화 (라벨 업데이트 반영)
setTableColumnsCache({});
const fromTableName = connection.fromNode.tableName; const fromTableName = connection.fromNode.tableName;
const toTableName = connection.toNode.tableName; const toTableName = connection.toNode.tableName;
const fromDisplayName = connection.fromNode.displayName; const fromDisplayName = connection.fromNode.displayName;
@ -283,8 +286,8 @@ export const ConnectionSetupModal: React.FC<ConnectionSetupModalProps> = ({
}, [selectedFromColumns, selectedToColumns]); }, [selectedFromColumns, selectedToColumns]);
// 테이블 컬럼 로드 함수 (캐시 활용) // 테이블 컬럼 로드 함수 (캐시 활용)
const loadTableColumns = async (tableName: string): Promise<ColumnInfo[]> => { const loadTableColumns = async (tableName: string, forceReload = false): Promise<ColumnInfo[]> => {
if (tableColumnsCache[tableName]) { if (tableColumnsCache[tableName] && !forceReload) {
return tableColumnsCache[tableName]; return tableColumnsCache[tableName];
} }

View File

@ -172,7 +172,7 @@ export const ConditionRenderer: React.FC<ConditionRendererProps> = ({
<SelectContent> <SelectContent>
{fromTableColumns.map((column) => ( {fromTableColumns.map((column) => (
<SelectItem key={column.columnName} value={column.columnName}> <SelectItem key={column.columnName} value={column.columnName}>
{column.columnName} {column.displayName || column.columnLabel || column.columnName}
</SelectItem> </SelectItem>
))} ))}
</SelectContent> </SelectContent>

View File

@ -214,13 +214,13 @@ export const ActionConditionRenderer: React.FC<ActionConditionRendererProps> = (
{condition.tableType === "from" && {condition.tableType === "from" &&
fromTableColumns.map((column) => ( fromTableColumns.map((column) => (
<SelectItem key={column.columnName} value={column.columnName}> <SelectItem key={column.columnName} value={column.columnName}>
{column.columnName} {column.displayName || column.columnLabel || column.columnName}
</SelectItem> </SelectItem>
))} ))}
{condition.tableType === "to" && {condition.tableType === "to" &&
toTableColumns.map((column) => ( toTableColumns.map((column) => (
<SelectItem key={column.columnName} value={column.columnName}> <SelectItem key={column.columnName} value={column.columnName}>
{column.columnName} {column.displayName || column.columnLabel || column.columnName}
</SelectItem> </SelectItem>
))} ))}
</SelectContent> </SelectContent>

View File

@ -154,7 +154,7 @@ export const ActionFieldMappings: React.FC<ActionFieldMappingsProps> = ({
tableColumnsCache[mapping.sourceTable]?.map((column) => ( tableColumnsCache[mapping.sourceTable]?.map((column) => (
<SelectItem key={column.columnName} value={column.columnName}> <SelectItem key={column.columnName} value={column.columnName}>
<div className="truncate" title={column.columnName}> <div className="truncate" title={column.columnName}>
{column.columnName} {column.displayName || column.columnLabel || column.columnName}
</div> </div>
</SelectItem> </SelectItem>
))} ))}
@ -200,7 +200,7 @@ export const ActionFieldMappings: React.FC<ActionFieldMappingsProps> = ({
tableColumnsCache[mapping.targetTable]?.map((column) => ( tableColumnsCache[mapping.targetTable]?.map((column) => (
<SelectItem key={column.columnName} value={column.columnName}> <SelectItem key={column.columnName} value={column.columnName}>
<div className="truncate" title={column.columnName}> <div className="truncate" title={column.columnName}>
{column.columnName} {column.displayName || column.columnLabel || column.columnName}
</div> </div>
</SelectItem> </SelectItem>
))} ))}

View File

@ -90,7 +90,7 @@ export const ActionSplitConfig: React.FC<ActionSplitConfigProps> = ({
<SelectContent> <SelectContent>
{fromTableColumns.map((column) => ( {fromTableColumns.map((column) => (
<SelectItem key={column.columnName} value={column.columnName}> <SelectItem key={column.columnName} value={column.columnName}>
{column.columnName} {column.displayName || column.columnLabel || column.columnName}
</SelectItem> </SelectItem>
))} ))}
</SelectContent> </SelectContent>
@ -117,7 +117,7 @@ export const ActionSplitConfig: React.FC<ActionSplitConfigProps> = ({
<SelectContent> <SelectContent>
{toTableColumns.map((column) => ( {toTableColumns.map((column) => (
<SelectItem key={column.columnName} value={column.columnName}> <SelectItem key={column.columnName} value={column.columnName}>
{column.columnName} {column.displayName || column.columnLabel || column.columnName}
</SelectItem> </SelectItem>
))} ))}
</SelectContent> </SelectContent>

View File

@ -198,7 +198,9 @@ export const ColumnTableSection: React.FC<ColumnTableSectionProps> = ({
<div className="flex items-start justify-between gap-2"> <div className="flex items-start justify-between gap-2">
<div className="min-w-0 flex-1"> <div className="min-w-0 flex-1">
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<span className="truncate font-medium">{column.columnName}</span> <span className="truncate font-medium">
{column.displayName || column.columnLabel || column.columnName}
</span>
{isSelected && <span className="flex-shrink-0 text-blue-500"></span>} {isSelected && <span className="flex-shrink-0 text-blue-500"></span>}
{isMapped && <span className="flex-shrink-0 text-green-500"></span>} {isMapped && <span className="flex-shrink-0 text-green-500"></span>}
{oppositeSelectedColumn && !isTypeCompatible && ( {oppositeSelectedColumn && !isTypeCompatible && (
@ -264,7 +266,9 @@ export const ColumnTableSection: React.FC<ColumnTableSectionProps> = ({
> >
<div className="flex min-w-0 flex-col justify-between"> <div className="flex min-w-0 flex-col justify-between">
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<span className="truncate font-medium">{column.columnName}</span> <span className="truncate font-medium">
{column.displayName || column.columnLabel || column.columnName}
</span>
{isSelected && <span className="flex-shrink-0 text-green-500"></span>} {isSelected && <span className="flex-shrink-0 text-green-500"></span>}
{oppositeSelectedColumn && !isTypeCompatible && ( {oppositeSelectedColumn && !isTypeCompatible && (
<span className="flex-shrink-0 text-red-500" title="데이터 타입이 호환되지 않음"> <span className="flex-shrink-0 text-red-500" title="데이터 타입이 호환되지 않음">

View File

@ -83,7 +83,7 @@ export const SimpleKeySettings: React.FC<SimpleKeySettingsProps> = ({
}} }}
className="rounded" className="rounded"
/> />
<span>{column.columnName}</span> <span>{column.displayName || column.columnLabel || column.columnName}</span>
<span className="text-xs text-gray-500">({column.dataType})</span> <span className="text-xs text-gray-500">({column.dataType})</span>
</label> </label>
))} ))}
@ -112,7 +112,7 @@ export const SimpleKeySettings: React.FC<SimpleKeySettingsProps> = ({
}} }}
className="rounded" className="rounded"
/> />
<span>{column.columnName}</span> <span>{column.displayName || column.columnLabel || column.columnName}</span>
<span className="text-xs text-gray-500">({column.dataType})</span> <span className="text-xs text-gray-500">({column.dataType})</span>
</label> </label>
))} ))}