diff --git a/frontend/lib/registry/components/selected-items-detail-input/SelectedItemsDetailInputConfigPanel.tsx b/frontend/lib/registry/components/selected-items-detail-input/SelectedItemsDetailInputConfigPanel.tsx index fa4813c2..b08fbc64 100644 --- a/frontend/lib/registry/components/selected-items-detail-input/SelectedItemsDetailInputConfigPanel.tsx +++ b/frontend/lib/registry/components/selected-items-detail-input/SelectedItemsDetailInputConfigPanel.tsx @@ -73,6 +73,70 @@ export const SelectedItemsDetailInputConfigPanel: React.FC>>({}); + // πŸ†• 원본/λŒ€μƒ ν…Œμ΄λΈ” 컬럼 μƒνƒœ (λ‚΄λΆ€μ—μ„œ λ‘œλ“œ) + const [loadedSourceTableColumns, setLoadedSourceTableColumns] = useState>([]); + const [loadedTargetTableColumns, setLoadedTargetTableColumns] = useState>([]); + + // πŸ†• 원본 ν…Œμ΄λΈ” 컬럼 λ‘œλ“œ + useEffect(() => { + if (!config.sourceTable) { + setLoadedSourceTableColumns([]); + return; + } + + const loadColumns = async () => { + try { + console.log("πŸ” 원본 ν…Œμ΄λΈ” 컬럼 λ‘œλ“œ:", config.sourceTable); + const { tableManagementApi } = await import("@/lib/api/tableManagement"); + const response = await tableManagementApi.getColumnList(config.sourceTable); + + if (response.success && response.data) { + const columns = response.data.columns || []; + setLoadedSourceTableColumns(columns.map((col: any) => ({ + columnName: col.columnName, + columnLabel: col.displayName || col.columnLabel || col.columnName, + dataType: col.dataType, + }))); + console.log("βœ… 원본 ν…Œμ΄λΈ” 컬럼 λ‘œλ“œ 성곡:", columns.length); + } + } catch (error) { + console.error("❌ 원본 ν…Œμ΄λΈ” 컬럼 λ‘œλ“œ 였λ₯˜:", error); + } + }; + + loadColumns(); + }, [config.sourceTable]); + + // πŸ†• λŒ€μƒ ν…Œμ΄λΈ” 컬럼 λ‘œλ“œ + useEffect(() => { + if (!config.targetTable) { + setLoadedTargetTableColumns([]); + return; + } + + const loadColumns = async () => { + try { + console.log("πŸ” λŒ€μƒ ν…Œμ΄λΈ” 컬럼 λ‘œλ“œ:", config.targetTable); + const { tableManagementApi } = await import("@/lib/api/tableManagement"); + const response = await tableManagementApi.getColumnList(config.targetTable); + + if (response.success && response.data) { + const columns = response.data.columns || []; + setLoadedTargetTableColumns(columns.map((col: any) => ({ + columnName: col.columnName, + columnLabel: col.displayName || col.columnLabel || col.columnName, + dataType: col.dataType, + }))); + console.log("βœ… λŒ€μƒ ν…Œμ΄λΈ” 컬럼 λ‘œλ“œ 성곡:", columns.length); + } + } catch (error) { + console.error("❌ λŒ€μƒ ν…Œμ΄λΈ” 컬럼 λ‘œλ“œ 였λ₯˜:", error); + } + }; + + loadColumns(); + }, [config.targetTable]); + // πŸ†• μ†ŒμŠ€ ν…Œμ΄λΈ” 선택 μ‹œ 컬럼 λ‘œλ“œ const loadMappingSourceColumns = async (tableName: string, mappingIndex: number) => { try { @@ -262,15 +326,19 @@ export const SelectedItemsDetailInputConfigPanel: React.FC { + // πŸ”§ λ‘œλ“œλœ 컬럼 μš°μ„  μ‚¬μš©, props둜 받은 μ»¬λŸΌμ€ λ°±μ—… + const columns = loadedSourceTableColumns.length > 0 ? loadedSourceTableColumns : sourceTableColumns; const usedColumns = new Set([...displayColumns.map(c => c.name), ...localFields.map((f) => f.name)]); - return sourceTableColumns.filter((col) => !usedColumns.has(col.columnName)); - }, [sourceTableColumns, displayColumns, localFields]); + return columns.filter((col) => !usedColumns.has(col.columnName)); + }, [loadedSourceTableColumns, sourceTableColumns, displayColumns, localFields]); // πŸ†• μΆ”κ°€ μž…λ ₯ ν•„λ“œμš©: λŒ€μƒ ν…Œμ΄λΈ”μ—μ„œ μ‚¬μš©λ˜μ§€ μ•Šμ€ 컬럼 λͺ©λ‘ const availableTargetColumns = useMemo(() => { + // πŸ”§ λ‘œλ“œλœ 컬럼 μš°μ„  μ‚¬μš©, props둜 받은 μ»¬λŸΌμ€ λ°±μ—… + const columns = loadedTargetTableColumns.length > 0 ? loadedTargetTableColumns : targetTableColumns; const usedColumns = new Set([...displayColumns.map(c => c.name), ...localFields.map((f) => f.name)]); - return targetTableColumns.filter((col) => !usedColumns.has(col.columnName)); - }, [targetTableColumns, displayColumns, localFields]); + return columns.filter((col) => !usedColumns.has(col.columnName)); + }, [loadedTargetTableColumns, targetTableColumns, displayColumns, localFields]); // πŸ†• 원본 ν…Œμ΄λΈ” 필터링 const filteredSourceTables = useMemo(() => {