"use client"; /** * V2Hierarchy 설정 패널 * 통합 계층 컴포넌트의 세부 설정을 관리합니다. */ 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 V2HierarchyConfigPanelProps { config: Record; onChange: (config: Record) => void; } interface TableOption { tableName: string; displayName: string; } interface ColumnOption { columnName: string; displayName: string; } export const V2HierarchyConfigPanel: React.FC = ({ config, onChange, }) => { const [tables, setTables] = useState([]); const [loadingTables, setLoadingTables] = useState(false); const [columns, setColumns] = 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.tableName) { setColumns([]); return; } setLoadingColumns(true); try { const data = await tableTypeApi.getColumns(config.tableName); setColumns(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 (
{/* HIERARCHY TYPE 섹션 */}

HIERARCHY TYPE

계층 타입
{/* VIEW MODE 섹션 */}

VIEW MODE

표시 방식
{/* DATA SOURCE 섹션 */}

DATA SOURCE

데이터 소스
{/* DB 설정 */} {config.dataSource === "db" && ( <>
테이블
{config.tableName && ( <>
표시 컬럼
)} )} {/* API 설정 */} {config.dataSource === "api" && (
API 엔드포인트
updateConfig("apiEndpoint", e.target.value)} placeholder="/api/hierarchy" className="h-7 text-xs" />
)}
{/* OPTIONS 섹션 */}

OPTIONS

최대 레벨
updateConfig("maxLevel", e.target.value ? Number(e.target.value) : undefined)} placeholder="제한 없음" min="1" className="h-7 text-xs" />
드래그 앤 드롭 updateConfig("draggable", checked)} />
선택 가능 updateConfig("selectable", checked)} />
다중 선택 updateConfig("multiSelect", checked)} />
체크박스 표시 updateConfig("showCheckbox", checked)} />
기본 전체 펼침 updateConfig("expandAll", checked)} />
{/* BOM SETTINGS 섹션 - BOM 타입 전용 */} {config.hierarchyType === "bom" && (

BOM SETTINGS

수량 표시 updateConfig("showQuantity", checked)} />
수량 컬럼
)} {/* CASCADING SETTINGS 섹션 - 연쇄 선택박스 전용 */} {config.hierarchyType === "cascading" && (

CASCADING SETTINGS

부모 필드
부모 변경 시 초기화 updateConfig("clearOnParentChange", checked)} />
)}
); }; V2HierarchyConfigPanel.displayName = "V2HierarchyConfigPanel"; export default V2HierarchyConfigPanel;