"use client"; import React from "react"; import { AutoRegisteringComponentRenderer } from "../../AutoRegisteringComponentRenderer"; import { V2InputDefinition } from "./index"; import { V2Input } from "@/components/v2/V2Input"; /** * V2Input 렌더러 * 자동 등록 시스템을 사용하여 컴포넌트를 레지스트리에 등록 */ export class V2InputRenderer extends AutoRegisteringComponentRenderer { static componentDefinition = V2InputDefinition; render(): React.ReactElement { const { component, formData, onFormDataChange, isDesignMode, isSelected, isInteractive, ...restProps } = this.props; // 컴포넌트 설정 추출 const config = component.componentConfig || component.config || {}; const columnName = component.columnName; const tableName = component.tableName || this.props.tableName; // formData에서 현재 값 가져오기 const currentValue = formData?.[columnName] ?? component.value ?? ""; // 값 변경 핸들러 const handleChange = (value: any) => { console.log("🔄 [V2InputRenderer] handleChange 호출:", { columnName, value, isInteractive, hasOnFormDataChange: !!onFormDataChange, }); if (isInteractive && onFormDataChange && columnName) { onFormDataChange(columnName, value); } else { console.warn("⚠️ [V2InputRenderer] onFormDataChange 호출 스킵:", { isInteractive, hasOnFormDataChange: !!onFormDataChange, columnName, }); } }; // 라벨: style.labelText 우선, 없으면 component.label 사용 // style.labelDisplay가 false면 라벨 숨김 const style = component.style || {}; const effectiveLabel = style.labelDisplay === false ? undefined : (style.labelText || component.label); return ( ); } } // 자동 등록 실행 V2InputRenderer.registerSelf(); // Hot Reload 지원 (개발 모드) if (process.env.NODE_ENV === "development") { V2InputRenderer.enableHotReload(); }