"use client"; /** * 메타 컴포넌트 통합 디스패처 * - component.type에 따라 적절한 렌더러에 모든 런타임 props 전달 * - V2 컴포넌트 변환 없이 직접 메타 렌더러 호출 */ import React from "react"; import { FieldRenderer } from "./Field/FieldRenderer"; import { DataViewRenderer } from "./DataView/DataViewRenderer"; import { ActionRenderer } from "./Action/ActionRenderer"; import { LayoutRenderer } from "./Layout/LayoutRenderer"; import { DisplayRenderer } from "./Display/DisplayRenderer"; import { SearchRenderer } from "./Search/SearchRenderer"; import { ModalRenderer } from "./Modal/ModalRenderer"; interface MetaComponentRendererProps { component: { id: string; type: string; config: any; position?: any; }; // 데이터 바인딩 formData?: Record; onFormDataChange?: (fieldName: string, value: any) => void; // 선택된 행 selectedRowsData?: any[]; onSelectedRowsChange?: (rows: any[], data: any[]) => void; // 컨텍스트 tableName?: string; companyCode?: string; screenId?: number; userId?: string; // 콜백 onRefresh?: () => void; // UI 모드 isDesignMode?: boolean; disabled?: boolean; className?: string; // 레이아웃 children children?: React.ReactNode; } export function MetaComponentRenderer({ component, formData, onFormDataChange, selectedRowsData, onSelectedRowsChange, tableName, companyCode, screenId, userId, onRefresh, isDesignMode = false, disabled = false, className, children, }: MetaComponentRendererProps) { const { id, type, config } = component; // type에 따라 적절한 렌더러에 dispatch switch (type) { case "meta-field": return ( ); case "meta-dataview": return ( ); case "meta-action": return ( ); case "meta-layout": return ( ); case "meta-display": return ( ); case "meta-search": return ( ); case "meta-modal": return ( ); default: return (
Unknown component type: {type}
); } }