"use client"; import { useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Eye, Smartphone, Monitor, Tablet } from "lucide-react"; import { LayoutData, ComponentData } from "@/types/screen"; import ContainerComponent from "./layout/ContainerComponent"; import RowComponent from "./layout/RowComponent"; import ColumnComponent from "./layout/ColumnComponent"; import WidgetFactory from "./WidgetFactory"; interface ScreenPreviewProps { layout: LayoutData; screenName: string; className?: string; } type PreviewMode = "desktop" | "tablet" | "mobile"; export default function ScreenPreview({ layout, screenName, className }: ScreenPreviewProps) { const [previewMode, setPreviewMode] = useState("desktop"); const [formData, setFormData] = useState>({}); // 미리보기 모드별 스타일 const getPreviewStyles = (mode: PreviewMode) => { switch (mode) { case "desktop": return "w-full max-w-6xl mx-auto"; case "tablet": return "w-full max-w-2xl mx-auto border-x-8 border-gray-200"; case "mobile": return "w-full max-w-sm mx-auto border-x-4 border-gray-200"; default: return "w-full"; } }; // 폼 데이터 변경 처리 const handleFormChange = (fieldId: string, value: any) => { setFormData((prev) => ({ ...prev, [fieldId]: value, })); }; // 컴포넌트 렌더링 (미리보기용) const renderPreviewComponent = (component: ComponentData) => { const isSelected = false; // 미리보기에서는 선택 불가 switch (component.type) { case "container": return ( {}}> {layout.components.filter((c) => c.parentId === component.id).map(renderPreviewComponent)} ); case "row": return ( {}}> {layout.components.filter((c) => c.parentId === component.id).map(renderPreviewComponent)} ); case "column": return ( {}}> {layout.components.filter((c) => c.parentId === component.id).map(renderPreviewComponent)} ); case "widget": return (
handleFormChange(component.id, value)} />
); default: return null; } }; // 그리드 레이아웃으로 컴포넌트 배치 const renderGridLayout = () => { const { gridSettings } = layout; const { columns, gap, padding } = gridSettings; return (
{layout.components .filter((c) => !c.parentId) // 최상위 컴포넌트만 렌더링 .map(renderPreviewComponent)}
); }; // 폼 데이터 초기화 const resetFormData = () => { setFormData({}); }; // 폼 데이터 출력 const logFormData = () => { console.log("폼 데이터:", formData); }; return (
{/* 미리보기 헤더 */}
{screenName} - 미리보기
{/* 미리보기 모드 선택 */}
{/* 미리보기 컨텐츠 */}
{layout.components.length > 0 ? ( renderGridLayout() ) : (

미리보기할 컴포넌트가 없습니다

화면 설계기에서 컴포넌트를 추가해주세요

)}
); }