"use client"; /** * V2Biz 설정 패널 * 통합 비즈니스 컴포넌트의 세부 설정을 관리합니다. */ import React, { useState, useEffect } from "react"; import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Checkbox } from "@/components/ui/checkbox"; import { tableTypeApi } from "@/lib/api/screen"; interface V2BizConfigPanelProps { config: Record; onChange: (config: Record) => void; } interface TableOption { tableName: string; displayName: string; } interface ColumnOption { columnName: string; displayName: string; } export const V2BizConfigPanel: React.FC = ({ config, onChange, }) => { const [tables, setTables] = useState([]); const [loadingTables, setLoadingTables] = useState(false); const [sourceColumns, setSourceColumns] = useState([]); const [targetColumns, setTargetColumns] = useState([]); const [relatedColumns, setRelatedColumns] = useState([]); const [categoryColumns, setCategoryColumns] = useState([]); const [loadingColumns, setLoadingColumns] = useState(false); const updateConfig = (field: string, value: any) => { onChange({ ...config, [field]: value }); }; useEffect(() => { const loadTables = async () => { setLoadingTables(true); try { const data = await tableTypeApi.getTables(); setTables(data.map(t => ({ tableName: t.tableName, displayName: t.displayName || t.tableName }))); } catch (error) { console.error("테이블 목록 로드 실패:", error); } finally { setLoadingTables(false); } }; loadTables(); }, []); useEffect(() => { const loadColumns = async () => { if (!config.sourceTable) { setSourceColumns([]); return; } try { const data = await tableTypeApi.getColumns(config.sourceTable); setSourceColumns(data.map((c: any) => ({ columnName: c.columnName || c.column_name, displayName: c.displayName || c.columnName || c.column_name }))); } catch (error) { console.error("소스 컬럼 로드 실패:", error); } }; loadColumns(); }, [config.sourceTable]); useEffect(() => { const loadColumns = async () => { if (!config.targetTable) { setTargetColumns([]); return; } try { const data = await tableTypeApi.getColumns(config.targetTable); setTargetColumns(data.map((c: any) => ({ columnName: c.columnName || c.column_name, displayName: c.displayName || c.columnName || c.column_name }))); } catch (error) { console.error("대상 컬럼 로드 실패:", error); } }; loadColumns(); }, [config.targetTable]); useEffect(() => { const loadColumns = async () => { if (!config.relatedTable) { setRelatedColumns([]); return; } try { const data = await tableTypeApi.getColumns(config.relatedTable); setRelatedColumns(data.map((c: any) => ({ columnName: c.columnName || c.column_name, displayName: c.displayName || c.columnName || c.column_name }))); } catch (error) { console.error("관련 컬럼 로드 실패:", error); } }; loadColumns(); }, [config.relatedTable]); useEffect(() => { const loadColumns = async () => { if (!config.tableName) { setCategoryColumns([]); return; } setLoadingColumns(true); try { const data = await tableTypeApi.getColumns(config.tableName); setCategoryColumns(data.map((c: any) => ({ columnName: c.columnName || c.column_name, displayName: c.displayName || c.columnName || c.column_name }))); } catch (error) { console.error("카테고리 컬럼 로드 실패:", error); } finally { setLoadingColumns(false); } }; loadColumns(); }, [config.tableName]); return (
{/* BUSINESS TYPE 섹션 */}

BUSINESS TYPE

비즈니스 타입
{/* FLOW SETTINGS 섹션 */} {config.bizType === "flow" && (

FLOW SETTINGS

플로우 ID
updateConfig("flowId", e.target.value ? Number(e.target.value) : undefined)} placeholder="플로우 ID" className="h-7 text-xs" />
편집 가능 updateConfig("editable", checked)} />
미니맵 표시 updateConfig("showMinimap", checked)} />
)} {/* RACK SETTINGS 섹션 */} {config.bizType === "rack" && (

RACK SETTINGS

updateConfig("rows", e.target.value ? Number(e.target.value) : undefined)} placeholder="5" min="1" className="h-7 text-xs" />
updateConfig("columns", e.target.value ? Number(e.target.value) : undefined)} placeholder="10" min="1" className="h-7 text-xs" />
라벨 표시 updateConfig("showLabels", checked)} />
)} {/* NUMBERING SETTINGS 섹션 */} {config.bizType === "numbering" && (

NUMBERING SETTINGS

채번 규칙 ID
updateConfig("ruleId", e.target.value ? Number(e.target.value) : undefined)} placeholder="규칙 ID" className="h-7 text-xs" />
접두사
updateConfig("prefix", e.target.value)} placeholder="예: INV-" className="h-7 text-xs" />
자동 생성 updateConfig("autoGenerate", checked)} />
)} {/* CATEGORY SETTINGS 섹션 */} {config.bizType === "category" && (

CATEGORY SETTINGS

카테고리 테이블
{config.tableName && (
컬럼
)}
)} {/* DATA MAPPING 섹션 */} {config.bizType === "data-mapping" && (

DATA MAPPING

소스 테이블
대상 테이블
)} {/* RELATED DATA 섹션 */} {config.bizType === "related-data" && (

RELATED DATA

관련 테이블
{config.relatedTable && (
연결 컬럼
)}
버튼 텍스트
updateConfig("buttonText", e.target.value)} placeholder="관련 데이터 보기" className="h-7 text-xs" />
)}
); }; V2BizConfigPanel.displayName = "V2BizConfigPanel"; export default V2BizConfigPanel;