"use client"; import React from "react"; import { Settings } from "lucide-react"; import { ComponentData, WidgetComponent, WebTypeConfig, DateTypeConfig, NumberTypeConfig, SelectTypeConfig, TextTypeConfig, TextareaTypeConfig, CheckboxTypeConfig, RadioTypeConfig, FileTypeConfig, CodeTypeConfig, EntityTypeConfig, ButtonTypeConfig, } from "@/types/screen"; import { DateTypeConfigPanel } from "./webtype-configs/DateTypeConfigPanel"; import { NumberTypeConfigPanel } from "./webtype-configs/NumberTypeConfigPanel"; import { SelectTypeConfigPanel } from "./webtype-configs/SelectTypeConfigPanel"; import { TextTypeConfigPanel } from "./webtype-configs/TextTypeConfigPanel"; import { TextareaTypeConfigPanel } from "./webtype-configs/TextareaTypeConfigPanel"; import { CheckboxTypeConfigPanel } from "./webtype-configs/CheckboxTypeConfigPanel"; import { RadioTypeConfigPanel } from "./webtype-configs/RadioTypeConfigPanel"; import { FileTypeConfigPanel } from "./webtype-configs/FileTypeConfigPanel"; import { CodeTypeConfigPanel } from "./webtype-configs/CodeTypeConfigPanel"; import { EntityTypeConfigPanel } from "./webtype-configs/EntityTypeConfigPanel"; import { ButtonConfigPanel } from "./ButtonConfigPanel"; interface DetailSettingsPanelProps { selectedComponent?: ComponentData; onUpdateProperty: (componentId: string, path: string, value: any) => void; } export const DetailSettingsPanel: React.FC = ({ selectedComponent, onUpdateProperty }) => { // 웹타입별 상세 설정 렌더링 함수 const renderWebTypeConfig = React.useCallback( (widget: WidgetComponent) => { const currentConfig = widget.webTypeConfig || {}; console.log("🎨 DetailSettingsPanel renderWebTypeConfig 호출:", { componentId: widget.id, widgetType: widget.widgetType, currentConfig, configExists: !!currentConfig, configKeys: Object.keys(currentConfig), configStringified: JSON.stringify(currentConfig), widgetWebTypeConfig: widget.webTypeConfig, widgetWebTypeConfigExists: !!widget.webTypeConfig, timestamp: new Date().toISOString(), }); const handleConfigChange = (newConfig: WebTypeConfig) => { console.log("🔧 WebTypeConfig 업데이트:", { widgetType: widget.widgetType, oldConfig: currentConfig, newConfig, componentId: widget.id, isEqual: JSON.stringify(currentConfig) === JSON.stringify(newConfig), }); // 강제 새 객체 생성으로 React 변경 감지 보장 const freshConfig = { ...newConfig }; onUpdateProperty(widget.id, "webTypeConfig", freshConfig); }; switch (widget.widgetType) { case "date": case "datetime": return ( ); case "number": case "decimal": return ( ); case "select": case "dropdown": return ( ); case "text": case "email": case "tel": return ( ); case "textarea": return ( ); case "checkbox": case "boolean": return ( ); case "radio": return ( ); case "file": return ( ); case "code": return ( ); case "entity": return ( ); case "button": return ( { Object.entries(updates).forEach(([key, value]) => { onUpdateProperty(widget.id, key, value); }); }} /> ); default: return
해당 웹타입의 상세 설정이 지원되지 않습니다.
; } }, [onUpdateProperty], ); if (!selectedComponent) { return (

컴포넌트를 선택하세요

위젯 컴포넌트를 선택하면 상세 설정을 편집할 수 있습니다.

); } if (selectedComponent.type !== "widget") { return (

위젯 컴포넌트가 아닙니다

상세 설정은 위젯 컴포넌트에서만 사용할 수 있습니다.
현재 선택된 컴포넌트: {selectedComponent.type}

); } const widget = selectedComponent as WidgetComponent; return (
{/* 헤더 */}

상세 설정

웹타입: {widget.widgetType}
컬럼: {widget.columnName}
{/* 상세 설정 영역 */}
{renderWebTypeConfig(widget)}
); }; export default DetailSettingsPanel;