"use client"; import React from "react"; import { Settings } from "lucide-react"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { ComponentData, WidgetComponent, FileComponent, WebTypeConfig, DateTypeConfig, NumberTypeConfig, SelectTypeConfig, TextTypeConfig, TextareaTypeConfig, CheckboxTypeConfig, RadioTypeConfig, FileTypeConfig, CodeTypeConfig, EntityTypeConfig, ButtonTypeConfig, TableInfo, } 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"; import { FileComponentConfigPanel } from "./FileComponentConfigPanel"; interface DetailSettingsPanelProps { selectedComponent?: ComponentData; onUpdateProperty: (componentId: string, path: string, value: any) => void; currentTable?: TableInfo; // 현재 화면의 테이블 정보 currentTableName?: string; // 현재 화면의 테이블명 } export const DetailSettingsPanel: React.FC = ({ selectedComponent, onUpdateProperty, currentTable, currentTableName, }) => { // 입력 가능한 웹타입들 정의 const inputableWebTypes = [ "text", "number", "decimal", "date", "datetime", "select", "dropdown", "textarea", "email", "tel", "code", "entity", "file", "checkbox", "radio", ]; // 웹타입별 상세 설정 렌더링 함수 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" && selectedComponent.type !== "file") { return (

설정할 수 없는 컴포넌트입니다

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

); } // 파일 컴포넌트인 경우 FileComponentConfigPanel 렌더링 if (selectedComponent.type === "file") { const fileComponent = selectedComponent as FileComponent; return (
{/* 헤더 */}

파일 컴포넌트 설정

타입: 파일 업로드
문서 타입: {fileComponent.fileConfig.docTypeName}
{/* 파일 컴포넌트 설정 영역 */}
); } const widget = selectedComponent as WidgetComponent; return (
{/* 헤더 */}

상세 설정

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