"use client"; import React from "react"; import { ComponentData, AreaComponent, AreaLayoutType } from "@/types/screen"; import { componentRegistry, ComponentRenderer } from "../DynamicComponentRenderer"; import { Square, CreditCard, Layout, Grid3x3, Columns, Rows, SidebarOpen, Folder } from "lucide-react"; // 영역 레이아웃에 따른 아이콘 반환 const getAreaIcon = (layoutType: AreaLayoutType): React.ReactNode => { const iconMap: Record = { container: , card: , panel: , grid: , flex_row: , flex_column: , sidebar: , section: , }; return iconMap[layoutType] || ; }; // 영역 렌더링 함수 const renderArea = (component: ComponentData, children?: React.ReactNode) => { const area = component as AreaComponent; const { title, description, layoutType = "container" } = area; const renderPlaceholder = () => (
{getAreaIcon(layoutType)}
{title || "영역"}
{description &&
{description}
}
레이아웃: {layoutType}
); return (
{children && React.Children.count(children) > 0 ? children : renderPlaceholder()}
); }; // 영역 컴포넌트 렌더러 const AreaRenderer: ComponentRenderer = ({ component, children, ...props }) => { return renderArea(component, children); }; // 레지스트리에 등록 componentRegistry.register("area", AreaRenderer); export { AreaRenderer };