"use client"; import React from "react"; import { cn } from "@/lib/utils"; import { PopComponentDefinition, PopComponentConfig } from "../types/pop-layout"; import { Settings, Database, Link2 } from "lucide-react"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; // ======================================== // Props 정의 // ======================================== interface ComponentEditorPanelProps { /** 선택된 컴포넌트 (없으면 null) */ component: PopComponentDefinition | null; /** 컴포넌트 설정 변경 시 호출 */ onConfigChange?: (config: Partial) => void; /** 컴포넌트 라벨 변경 시 호출 */ onLabelChange?: (label: string) => void; /** 추가 className */ className?: string; } // ======================================== // 컴포넌트 편집 패널 // // 역할: // - 선택된 컴포넌트의 설정을 편집 // - 3개 탭: 기본 설정 / 데이터 바인딩 / 데이터 연결 // // TODO: // - 타입별 상세 설정 UI 구현 // - 데이터 바인딩 UI 구현 // - 데이터 플로우 UI 구현 // ======================================== export function ComponentEditorPanel({ component, onConfigChange, onLabelChange, className, }: ComponentEditorPanelProps) { // 컴포넌트가 선택되지 않은 경우 if (!component) { return (

컴포넌트 편집

컴포넌트를 선택하세요
); } return (
{/* 헤더 */}

{component.label || getComponentTypeLabel(component.type)}

{component.type}

{/* 탭 컨텐츠 */} 설정 데이터 연결 {/* 기본 설정 탭 */} {/* 데이터 바인딩 탭 (뼈대) */} {/* 데이터 연결 탭 (뼈대) */}
); } // ======================================== // 컴포넌트 설정 폼 // ======================================== interface ComponentSettingsFormProps { component: PopComponentDefinition; onConfigChange?: (config: Partial) => void; onLabelChange?: (label: string) => void; } function ComponentSettingsForm({ component, onConfigChange, onLabelChange, }: ComponentSettingsFormProps) { return (
{/* 라벨 입력 */}
onLabelChange?.(e.target.value)} placeholder="컴포넌트 라벨" />
{/* 타입별 설정 (TODO: 상세 구현) */}

{getComponentTypeLabel(component.type)} 상세 설정

(추후 구현 예정)

); } // ======================================== // 데이터 바인딩 플레이스홀더 (뼈대) // ======================================== function DataBindingPlaceholder() { return (

데이터 바인딩 설정

테이블 선택 → 칼럼 선택 → 조인 설정

(추후 구현 예정)

); } // ======================================== // 데이터 플로우 플레이스홀더 (뼈대) // ======================================== function DataFlowPlaceholder() { return (

데이터 연결 설정

컴포넌트 간 / 섹션 간 / 화면 간 연결

(추후 구현 예정)

); } // ======================================== // 헬퍼 함수 // ======================================== function getComponentTypeLabel(type: string): string { const labels: Record = { "pop-field": "필드", "pop-button": "버튼", "pop-list": "리스트", "pop-indicator": "인디케이터", "pop-scanner": "스캐너", "pop-numpad": "넘패드", }; return labels[type] || type; } export default ComponentEditorPanel;