"use client"; import React, { useState, useEffect } from "react"; import { ConditionalSectionViewerProps } from "./types"; import { InteractiveScreenViewer } from "@/components/screen/InteractiveScreenViewer"; import { cn } from "@/lib/utils"; import { Loader2 } from "lucide-react"; import { screenApi } from "@/lib/api/screen"; import { ComponentData } from "@/types/screen"; /** * 조건부 섹션 뷰어 컴포넌트 * 각 조건에 해당하는 화면을 표시 */ export function ConditionalSectionViewer({ sectionId, condition, label, screenId, screenName, isActive, isDesignMode, showBorder = true, formData, onFormDataChange, }: ConditionalSectionViewerProps) { const [isLoading, setIsLoading] = useState(false); const [components, setComponents] = useState([]); const [screenInfo, setScreenInfo] = useState<{ id: number; tableName?: string } | null>(null); // 화면 로드 useEffect(() => { if (!screenId) { setComponents([]); setScreenInfo(null); return; } const loadScreen = async () => { setIsLoading(true); try { const [layout, screen] = await Promise.all([ screenApi.getLayout(screenId), screenApi.getScreen(screenId), ]); setComponents(layout.components || []); setScreenInfo({ id: screenId, tableName: screen.tableName, }); } catch (error) { console.error("화면 로드 실패:", error); setComponents([]); setScreenInfo(null); } finally { setIsLoading(false); } }; loadScreen(); }, [screenId]); // 디자인 모드가 아니고 비활성 섹션이면 렌더링하지 않음 if (!isDesignMode && !isActive) { return null; } return (
{/* 섹션 라벨 (디자인 모드에서만 표시) */} {isDesignMode && (
{label} {isActive && "(활성)"} {screenId && ` - 화면 ID: ${screenId}`}
)} {/* 화면 미선택 안내 (디자인 모드 + 화면 없을 때) */} {isDesignMode && !screenId && (

설정 패널에서 화면을 선택하세요

조건: {condition}

)} {/* 로딩 중 */} {isLoading && (

화면 로드 중...

)} {/* 화면 렌더링 */} {screenId && components.length > 0 && (
{components.map((component) => ( ))}
)}
); }