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 b08fbc64..0a05ed0c 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,9 @@ export const SelectedItemsDetailInputConfigPanel: React.FC>>({}); + // πŸ†• μΆ”κ°€ μž…λ ₯ ν•„λ“œλ³„ μžλ™ μ±„μš°κΈ° ν…Œμ΄λΈ” 컬럼 μƒνƒœ + const [autoFillTableColumns, setAutoFillTableColumns] = useState>>({}); + // πŸ†• 원본/λŒ€μƒ ν…Œμ΄λΈ” 컬럼 μƒνƒœ (λ‚΄λΆ€μ—μ„œ λ‘œλ“œ) const [loadedSourceTableColumns, setLoadedSourceTableColumns] = useState>([]); const [loadedTargetTableColumns, setLoadedTargetTableColumns] = useState>([]); @@ -137,6 +140,38 @@ export const SelectedItemsDetailInputConfigPanel: React.FC { + if (!tableName) { + setAutoFillTableColumns(prev => ({ ...prev, [fieldIndex]: [] })); + return; + } + + try { + console.log(`πŸ” [ν•„λ“œ ${fieldIndex}] μžλ™ μ±„μš°κΈ° ν…Œμ΄λΈ” 컬럼 λ‘œλ“œ:`, tableName); + + const { tableManagementApi } = await import("@/lib/api/tableManagement"); + const response = await tableManagementApi.getColumnList(tableName); + + if (response.success && response.data) { + const columns = response.data.columns || []; + setAutoFillTableColumns(prev => ({ + ...prev, + [fieldIndex]: columns.map((col: any) => ({ + columnName: col.columnName, + columnLabel: col.displayName || col.columnLabel || col.columnName, + dataType: col.dataType, + })) + })); + console.log(`βœ… [ν•„λ“œ ${fieldIndex}] 컬럼 λ‘œλ“œ 성곡:`, columns.length); + } else { + console.error(`❌ [ν•„λ“œ ${fieldIndex}] 컬럼 λ‘œλ“œ μ‹€νŒ¨:`, response); + } + } catch (error) { + console.error(`❌ [ν•„λ“œ ${fieldIndex}] 컬럼 λ‘œλ“œ 였λ₯˜:`, error); + } + }; + // πŸ†• μ†ŒμŠ€ ν…Œμ΄λΈ” 선택 μ‹œ 컬럼 λ‘œλ“œ const loadMappingSourceColumns = async (tableName: string, mappingIndex: number) => { try { @@ -745,15 +780,66 @@ export const SelectedItemsDetailInputConfigPanel: React.FC - {/* ν…Œμ΄λΈ”λͺ… μž…λ ₯ */} - updateField(index, { autoFillFromTable: e.target.value })} - placeholder="λΉ„μ›Œλ‘λ©΄ μ£Ό 데이터 (예: item_price)" - className="h-6 w-full text-[10px] sm:h-7 sm:text-xs" - /> + {/* ν…Œμ΄λΈ” 선택 λ“œλ‘­λ‹€μš΄ */} + + + + + + + + ν…Œμ΄λΈ”μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. + + { + updateField(index, { autoFillFromTable: undefined, autoFillFrom: undefined }); + setAutoFillTableColumns(prev => ({ ...prev, [index]: [] })); + }} + className="text-[10px] sm:text-xs" + > + + 원본 ν…Œμ΄λΈ” ({config.sourceTable || "λ―Έμ„€μ •"}) + + {allTables.map((table) => ( + { + updateField(index, { autoFillFromTable: value, autoFillFrom: undefined }); + loadAutoFillTableColumns(value, index); + }} + className="text-[10px] sm:text-xs" + > + + {table.displayName || table.tableName} + + ))} + + + +

- λ‹€λ₯Έ ν…Œμ΄λΈ”μ—μ„œ κ°€μ Έμ˜¬ 경우 ν…Œμ΄λΈ”λͺ… μž…λ ₯ + λ‹€λ₯Έ ν…Œμ΄λΈ”μ—μ„œ κ°€μ Έμ˜¬ 경우 ν…Œμ΄λΈ” 선택

{/* ν•„λ“œ 선택 */} @@ -764,16 +850,26 @@ export const SelectedItemsDetailInputConfigPanel: React.FC - {field.autoFillFrom - ? sourceTableColumns.find(c => c.columnName === field.autoFillFrom)?.columnLabel || field.autoFillFrom - : "ν•„λ“œ 선택 μ•ˆ 함"} + {(() => { + if (!field.autoFillFrom) return "ν•„λ“œ 선택 μ•ˆ 함"; + + // μ„ νƒλœ ν…Œμ΄λΈ”μ˜ μ»¬λŸΌμ—μ„œ μ°ΎκΈ° + const columns = field.autoFillFromTable + ? (autoFillTableColumns[index] || []) + : (loadedSourceTableColumns.length > 0 ? loadedSourceTableColumns : sourceTableColumns); + + const found = columns.find(c => c.columnName === field.autoFillFrom); + return found?.columnLabel || field.autoFillFrom; + })()} - 원본 ν…Œμ΄λΈ”μ„ λ¨Όμ € μ„ νƒν•˜μ„Έμš”. + + {field.autoFillFromTable ? "μ»¬λŸΌμ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€" : "원본 ν…Œμ΄λΈ”μ„ λ¨Όμ € μ„ νƒν•˜μ„Έμš”"} + 선택 μ•ˆ 함 - {sourceTableColumns.map((column) => ( - updateField(index, { autoFillFrom: column.columnName })} - className="text-[10px] sm:text-xs" - > - -
-
{column.columnLabel}
-
{column.columnName}
-
-
- ))} + {(() => { + // μ„ νƒλœ ν…Œμ΄λΈ”μ˜ 컬럼 λ˜λŠ” κΈ°λ³Έ 원본 ν…Œμ΄λΈ” 컬럼 + const columns = field.autoFillFromTable + ? (autoFillTableColumns[index] || []) + : (loadedSourceTableColumns.length > 0 ? loadedSourceTableColumns : sourceTableColumns); + + return columns.map((column) => ( + updateField(index, { autoFillFrom: value })} + className="text-[10px] sm:text-xs" + > + +
+
{column.columnLabel || column.columnName}
+ {column.dataType &&
{column.dataType}
} +
+
+ )); + })()}