[agent-pipeline] pipe-20260329143602-hu6g round-2

This commit is contained in:
DDD1542
2026-03-30 00:10:13 +09:00
parent c24dd533b2
commit 5fea071ae8
10 changed files with 287 additions and 287 deletions
@@ -44,7 +44,7 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
const [isLoadingRightColumns, setIsLoadingRightColumns] = useState(false);
const [localConfig, setLocalConfig] = useState({
screenId: config.screenId || 0,
screenId: config.screen_id || 0,
leftScreenId: config.leftScreenId || 0,
rightScreenId: config.rightScreenId || 0,
splitRatio: config.splitRatio || 50,
@@ -61,7 +61,7 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
useEffect(() => {
console.log("🔄 [ScreenSplitPanelConfigPanel] config prop 변경 감지:", config);
setLocalConfig({
screenId: config.screenId || 0,
screenId: config.screen_id || 0,
leftScreenId: config.leftScreenId || 0,
rightScreenId: config.rightScreenId || 0,
splitRatio: config.splitRatio || 50,
@@ -98,8 +98,8 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
const columnsResponse = await getTableColumns(screenData.table_name);
if (columnsResponse.success && columnsResponse.data?.columns) {
const columns = columnsResponse.data.columns.map((col: any) => ({
columnName: col.column_name || col.columnName,
columnLabel: col.column_label || col.columnLabel || col.column_name || col.columnName,
columnName: col.column_name || col.column_name,
columnLabel: col.column_label || col.column_label || col.column_name || col.column_name,
}));
setLeftScreenColumns(columns);
console.log("📋 좌측 화면 컬럼 로드 완료:", columns.length);
@@ -138,8 +138,8 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
tableName: screenData.table_name,
screenName: screenData.screen_name || "메인 화면",
columns: columnsResponse.data.columns.map((col: any) => ({
columnName: col.column_name || col.columnName,
columnLabel: col.column_label || col.columnLabel || col.column_name || col.columnName,
columnName: col.column_name || col.column_name,
columnLabel: col.column_label || col.column_label || col.column_name || col.column_name,
})),
});
}
@@ -160,9 +160,9 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
// TabsWidget의 탭들
if (comp.componentType === "tabs-widget" && config.tabs) {
for (const tab of config.tabs) {
if (tab.screenId) {
embeddedScreenIds.add(tab.screenId);
console.log("🔍 탭에서 화면 발견:", tab.screenId, tab.screenName);
if (tab.screen_id) {
embeddedScreenIds.add(tab.screen_id);
console.log("🔍 탭에서 화면 발견:", tab.screen_id, tab.screen_name);
}
}
}
@@ -174,8 +174,8 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
}
// EmbeddedScreen
if (comp.componentType === "embedded-screen" && config.screenId) {
embeddedScreenIds.add(config.screenId);
if (comp.componentType === "embedded-screen" && config.screen_id) {
embeddedScreenIds.add(config.screen_id);
}
// 중첩된 컴포넌트 검색
@@ -194,15 +194,15 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
const embeddedScreen = await screenApi.getScreen(embeddedScreenId);
if (embeddedScreen?.table_name) {
// 이미 추가된 테이블인지 확인
if (!tables.find(t => t.tableName === embeddedScreen.table_name)) {
if (!tables.find(t => t.table_name === embeddedScreen.table_name)) {
const columnsResponse = await getTableColumns(embeddedScreen.table_name);
if (columnsResponse.success && columnsResponse.data?.columns) {
tables.push({
tableName: embeddedScreen.table_name,
screenName: embeddedScreen.screen_name || `화면 ${embeddedScreenId}`,
columns: columnsResponse.data.columns.map((col: any) => ({
columnName: col.column_name || col.columnName,
columnLabel: col.column_label || col.columnLabel || col.column_name || col.columnName,
columnName: col.column_name || col.column_name,
columnLabel: col.column_label || col.column_label || col.column_name || col.column_name,
})),
});
console.log("✅ 테이블 추가:", embeddedScreen.table_name);
@@ -216,7 +216,7 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
}
setRightScreenTables(tables);
console.log("📋 우측 화면 테이블 로드 완료:", tables.map(t => t.tableName));
console.log("📋 우측 화면 테이블 로드 완료:", tables.map(t => t.table_name));
} catch (error) {
console.error("우측 화면 컬럼 로드 실패:", error);
setRightScreenTables([]);
@@ -440,7 +440,7 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
className="h-9 w-full justify-between text-xs"
>
{localConfig.leftScreenId
? screens.find((s) => s.screenId === localConfig.leftScreenId)?.screenName || "화면 선택..."
? screens.find((s) => s.screen_id === localConfig.leftScreenId)?.screen_name || "화면 선택..."
: "화면 선택..."}
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
</Button>
@@ -457,10 +457,10 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
<CommandGroup>
{screens.map((screen) => (
<CommandItem
key={screen.screenId}
value={`${screen.screenName} ${screen.screenCode}`}
key={screen.screen_id}
value={`${screen.screen_name} ${screen.screen_code}`}
onSelect={() => {
updateConfig("leftScreenId", screen.screenId);
updateConfig("leftScreenId", screen.screen_id);
setLeftOpen(false);
}}
className="text-xs"
@@ -468,12 +468,12 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
<Check
className={cn(
"mr-2 h-4 w-4",
localConfig.leftScreenId === screen.screenId ? "opacity-100" : "opacity-0",
localConfig.leftScreenId === screen.screen_id ? "opacity-100" : "opacity-0",
)}
/>
<div className="flex flex-col">
<span className="font-medium">{screen.screenName}</span>
<span className="text-[10px] text-muted-foreground">{screen.screenCode}</span>
<span className="font-medium">{screen.screen_name}</span>
<span className="text-[10px] text-muted-foreground">{screen.screen_code}</span>
</div>
</CommandItem>
))}
@@ -500,7 +500,7 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
className="h-9 w-full justify-between text-xs"
>
{localConfig.rightScreenId
? screens.find((s) => s.screenId === localConfig.rightScreenId)?.screenName ||
? screens.find((s) => s.screen_id === localConfig.rightScreenId)?.screen_name ||
"화면 선택..."
: "화면 선택..."}
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
@@ -518,10 +518,10 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
<CommandGroup>
{screens.map((screen) => (
<CommandItem
key={screen.screenId}
value={`${screen.screenName} ${screen.screenCode}`}
key={screen.screen_id}
value={`${screen.screen_name} ${screen.screen_code}`}
onSelect={() => {
updateConfig("rightScreenId", screen.screenId);
updateConfig("rightScreenId", screen.screen_id);
setRightOpen(false);
}}
className="text-xs"
@@ -529,12 +529,12 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
<Check
className={cn(
"mr-2 h-4 w-4",
localConfig.rightScreenId === screen.screenId ? "opacity-100" : "opacity-0",
localConfig.rightScreenId === screen.screen_id ? "opacity-100" : "opacity-0",
)}
/>
<div className="flex flex-col">
<span className="font-medium">{screen.screenName}</span>
<span className="text-[10px] text-muted-foreground">{screen.screenCode}</span>
<span className="font-medium">{screen.screen_name}</span>
<span className="text-[10px] text-muted-foreground">{screen.screen_code}</span>
</div>
</CommandItem>
))}
@@ -627,8 +627,8 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
</SelectTrigger>
<SelectContent>
{leftScreenColumns.map((col) => (
<SelectItem key={col.columnName} value={col.columnName} className="text-xs">
{col.columnLabel} ({col.columnName})
<SelectItem key={col.column_name} value={col.column_name} className="text-xs">
{col.column_label} ({col.column_name})
</SelectItem>
))}
</SelectContent>
@@ -648,17 +648,17 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
</SelectTrigger>
<SelectContent>
{rightScreenTables.map((table) => (
<React.Fragment key={table.tableName}>
<React.Fragment key={table.table_name}>
<div className="px-2 py-1.5 text-xs font-semibold text-muted-foreground bg-muted dark:bg-foreground/90">
{table.screenName} ({table.tableName})
{table.screen_name} ({table.table_name})
</div>
{table.columns.map((col) => (
<SelectItem
key={`${table.tableName}.${col.columnName}`}
value={`${table.tableName}.${col.columnName}`}
key={`${table.table_name}.${col.column_name}`}
value={`${table.table_name}.${col.column_name}`}
className="text-xs"
>
{col.columnLabel} ({col.columnName})
{col.column_label} ({col.column_name})
</SelectItem>
))}
</React.Fragment>
@@ -732,7 +732,7 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
</p>
<ul className="text-xs text-emerald-700 dark:text-emerald-300 space-y-0.5">
{rightScreenTables.map((table) => (
<li key={table.tableName}> {table.screenName}: <code className="bg-emerald-100 dark:bg-emerald-900 px-1 rounded">{table.tableName}</code></li>
<li key={table.table_name}> {table.screen_name}: <code className="bg-emerald-100 dark:bg-emerald-900 px-1 rounded">{table.table_name}</code></li>
))}
</ul>
</div>
@@ -764,8 +764,8 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
</SelectTrigger>
<SelectContent>
{leftScreenColumns.map((col) => (
<SelectItem key={col.columnName} value={col.columnName} className="text-xs">
{col.columnLabel} ({col.columnName})
<SelectItem key={col.column_name} value={col.column_name} className="text-xs">
{col.column_label} ({col.column_name})
</SelectItem>
))}
</SelectContent>
@@ -785,17 +785,17 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
</SelectTrigger>
<SelectContent>
{rightScreenTables.map((table) => (
<React.Fragment key={table.tableName}>
<React.Fragment key={table.table_name}>
<div className="px-2 py-1.5 text-xs font-semibold text-muted-foreground bg-muted dark:bg-foreground/90">
{table.screenName} ({table.tableName})
{table.screen_name} ({table.table_name})
</div>
{table.columns.map((col) => (
<SelectItem
key={`${table.tableName}.${col.columnName}`}
value={col.columnName}
key={`${table.table_name}.${col.column_name}`}
value={col.column_name}
className="text-xs pl-4"
>
{col.columnLabel} ({col.columnName})
{col.column_label} ({col.column_name})
</SelectItem>
))}
</React.Fragment>
@@ -856,7 +856,7 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
<span className="text-muted-foreground"> :</span>
<span className="font-medium">
{localConfig.leftScreenId
? screens.find((s) => s.screenId === localConfig.leftScreenId)?.screenName ||
? screens.find((s) => s.screen_id === localConfig.leftScreenId)?.screen_name ||
`ID: ${localConfig.leftScreenId}`
: "미설정"}
</span>
@@ -865,7 +865,7 @@ export function ScreenSplitPanelConfigPanel({ config = {}, onChange }: ScreenSpl
<span className="text-muted-foreground"> :</span>
<span className="font-medium">
{localConfig.rightScreenId
? screens.find((s) => s.screenId === localConfig.rightScreenId)?.screenName ||
? screens.find((s) => s.screen_id === localConfig.rightScreenId)?.screen_name ||
`ID: ${localConfig.rightScreenId}`
: "미설정"}
</span>