"use client"; import React, { useMemo } from "react"; import { WebTypeRegistry } from "./WebTypeRegistry"; import { WebTypeConfigPanelProps } from "./types"; /** * 동적 설정 패널 렌더러 컴포넌트 * 레지스트리에서 웹타입을 조회하여 해당 설정 패널을 동적으로 렌더링합니다. */ export const DynamicConfigPanel: React.FC< WebTypeConfigPanelProps & { webType: string; } > = ({ webType, component, onUpdateComponent, onUpdateProperty }) => { // 레지스트리에서 웹타입 정의 조회 const webTypeDefinition = useMemo(() => { return WebTypeRegistry.getWebType(webType); }, [webType]); // 웹타입이 등록되지 않은 경우 if (!webTypeDefinition) { console.warn(`웹타입 "${webType}"이 레지스트리에 등록되지 않았습니다.`); return (
⚠️ 설정 패널 없음

웹타입 "{webType}"의 설정 패널을 찾을 수 없습니다.

); } // 설정 패널 컴포넌트가 없는 경우 if (!webTypeDefinition.configPanel) { return (
⚠️ 설정 패널 미구현

웹타입 "{webType}"에 대한 설정 패널이 구현되지 않았습니다.

); } const ConfigPanelComponent = webTypeDefinition.configPanel; // 설정 패널 props 구성 const configPanelProps: WebTypeConfigPanelProps = { component, onUpdateComponent, onUpdateProperty, }; try { return ; } catch (error) { console.error(`웹타입 "${webType}" 설정 패널 렌더링 중 오류 발생:`, error); return (
💥 설정 패널 오류

웹타입 "{webType}" 설정 패널 렌더링 중 오류가 발생했습니다.

{process.env.NODE_ENV === "development" && (
            {error instanceof Error ? error.stack : String(error)}
          
)}
); } }; DynamicConfigPanel.displayName = "DynamicConfigPanel"; /** * 웹타입별 설정 패널을 렌더링하는 헬퍼 함수 */ export function renderConfigPanel( webType: string, component: any, onUpdateComponent: (component: any) => void, onUpdateProperty: (property: string, value: any) => void, ): React.ReactElement | null { return ( ); } /** * 웹타입이 설정 패널을 지원하는지 확인하는 헬퍼 함수 */ export function hasConfigPanel(webType: string): boolean { const webTypeDefinition = WebTypeRegistry.getWebType(webType); return !!(webTypeDefinition && webTypeDefinition.configPanel); } /** * 웹타입의 기본 설정을 가져오는 헬퍼 함수 */ export function getDefaultConfig(webType: string): Record | null { const webTypeDefinition = WebTypeRegistry.getWebType(webType); return webTypeDefinition ? webTypeDefinition.defaultConfig : null; }