"use client"; import React from "react"; import { ComponentData, WidgetComponent } from "@/types/screen"; import { componentRegistry, ComponentRenderer } from "../DynamicComponentRenderer"; import { Input } from "@/components/ui/input"; import { DynamicWebTypeRenderer } from "../DynamicWebTypeRenderer"; // 위젯 컴포넌트 렌더러 const WidgetRenderer: ComponentRenderer = ({ component, ...props }) => { // 위젯 컴포넌트가 아닌 경우 빈 div 반환 if (component.type !== "widget") { return
위젯이 아닙니다
; } const widget = component as WidgetComponent; const { widgetType, label, placeholder, required, readonly, columnName, style } = widget; // 디버깅: 실제 widgetType 값 확인 console.log("WidgetRenderer - widgetType:", widgetType, "columnName:", columnName); // 사용자가 테두리를 설정했는지 확인 const hasCustomBorder = style && (style.borderWidth || style.borderStyle || style.borderColor || style.border); // 기본 테두리 제거 여부 결정 - Shadcn UI 기본 border 클래스를 덮어쓰기 const borderClass = hasCustomBorder ? "!border-0" : ""; const commonProps = { placeholder: placeholder || "입력하세요...", disabled: readonly, required: required, className: `w-full h-full ${borderClass}`, }; // 동적 웹타입 렌더링 사용 if (widgetType) { try { return (
); } catch (error) { console.error(`웹타입 "${widgetType}" 렌더링 실패:`, error); // 오류 발생 시 폴백으로 기본 input 렌더링 return (
); } } // 웹타입이 없는 경우 기본 input 렌더링 (하위 호환성) return (
); }; // 레지스트리에 등록 componentRegistry.register("widget", WidgetRenderer); export { WidgetRenderer };