From 55a7e1dc89468e76f6702c2a1b05c2ac206046b1 Mon Sep 17 00:00:00 2001 From: kjs Date: Wed, 3 Sep 2025 11:55:38 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8B=A4=EC=A0=9C=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=EA=B3=BC=20=EB=8F=99=EC=9D=BC=ED=95=98=EA=B2=8C=20=EB=B3=B4?= =?UTF-8?q?=EC=97=AC=EC=A7=80=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/(main)/screens/[screenId]/page.tsx | 278 ++++++------------ 1 file changed, 97 insertions(+), 181 deletions(-) diff --git a/frontend/app/(main)/screens/[screenId]/page.tsx b/frontend/app/(main)/screens/[screenId]/page.tsx index 7963e380..24e9fd69 100644 --- a/frontend/app/(main)/screens/[screenId]/page.tsx +++ b/frontend/app/(main)/screens/[screenId]/page.tsx @@ -2,10 +2,8 @@ import { useEffect, useState } from "react"; import { useParams } from "next/navigation"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; -import { Badge } from "@/components/ui/badge"; -import { ArrowLeft, Save, Loader2 } from "lucide-react"; +import { Loader2 } from "lucide-react"; import { screenApi } from "@/lib/api/screen"; import { ScreenDefinition, LayoutData } from "@/types/screen"; import { InteractiveScreenViewer } from "@/components/screen/InteractiveScreenViewer"; @@ -21,7 +19,6 @@ export default function ScreenViewPage() { const [layout, setLayout] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); - const [saving, setSaving] = useState(false); const [formData, setFormData] = useState>({}); useEffect(() => { @@ -59,30 +56,9 @@ export default function ScreenViewPage() { } }, [screenId]); - // 폼 데이터 저장 함수 - const handleSaveData = async () => { - if (!screen) return; - - try { - setSaving(true); - console.log("저장할 데이터:", formData); - console.log("화면 정보:", screen); - - // 여기에 실제 데이터 저장 API 호출을 추가할 수 있습니다 - // await saveFormData(screen.tableName, formData); - - toast.success("데이터가 성공적으로 저장되었습니다."); - } catch (error) { - console.error("데이터 저장 실패:", error); - toast.error("데이터 저장에 실패했습니다."); - } finally { - setSaving(false); - } - }; - if (loading) { return ( -
+

화면을 불러오는 중...

@@ -93,7 +69,7 @@ export default function ScreenViewPage() { if (error || !screen) { return ( -
+
⚠️ @@ -101,7 +77,6 @@ export default function ScreenViewPage() {

화면을 찾을 수 없습니다

{error || "요청하신 화면이 존재하지 않습니다."}

@@ -110,167 +85,108 @@ export default function ScreenViewPage() { } return ( -
- {/* 헤더 */} -
-
- -
-

{screen.screenName}

-
- - {screen.screenCode} - - - {screen.tableName} - - - {screen.isActive === "Y" ? "활성" : "비활성"} - -
-
-
-
- 생성일: {screen.createdDate.toLocaleDateString()} -
-
+
+ {layout && layout.components.length > 0 ? ( + // 캔버스 컴포넌트들만 표시 - 전체 화면 사용 +
+ {layout.components + .filter((comp) => !comp.parentId) // 최상위 컴포넌트만 렌더링 (그룹 포함) + .map((component) => { + // 그룹 컴포넌트인 경우 특별 처리 + if (component.type === "group") { + const groupChildren = layout.components.filter((child) => child.parentId === component.id); - {/* 메인 컨텐츠 영역 */} -
- {layout && layout.components.length > 0 ? ( -
- - - - {screen.screenName} - - - {screen.description &&

{screen.description}

} -
- - {/* 실제 화면 렌더링 영역 */} -
- {layout.components - .filter((comp) => !comp.parentId) // 최상위 컴포넌트만 렌더링 (그룹 포함) - .map((component) => { - // 그룹 컴포넌트인 경우 특별 처리 - if (component.type === "group") { - const groupChildren = layout.components.filter((child) => child.parentId === component.id); - return ( -
- {/* 그룹 제목 */} - {(component as any).title && ( -
{(component as any).title}
- )} - - {/* 그룹 내 자식 컴포넌트들 렌더링 */} - {groupChildren.map((child) => ( -
- { - setFormData((prev) => ({ - ...prev, - [fieldName]: value, - })); - }} - /> -
- ))} -
- ); - } - - // 일반 컴포넌트 렌더링 - return ( -
( +
+ { + setFormData((prev) => ({ + ...prev, + [fieldName]: value, + })); }} - > - { - setFormData((prev) => ({ - ...prev, - [fieldName]: value, - })); - }} - /> -
- ); - })} + /> +
+ ))} +
+ ); + } + + // 일반 컴포넌트 렌더링 + return ( +
+ { + setFormData((prev) => ({ + ...prev, + [fieldName]: value, + })); + }} + />
-
-
-
- ) : ( -
-
-
- 📄 -
-

화면이 비어있습니다

-

이 화면에는 아직 설계된 컴포넌트가 없습니다.

+ ); + })} +
+ ) : ( + // 빈 화면일 때도 깔끔하게 표시 +
+
+
+ 📄
+

화면이 비어있습니다

+

이 화면에는 아직 설계된 컴포넌트가 없습니다.

- )} -
+
+ )}
); }