diff --git a/frontend/app/(main)/admin/report/designer/[reportId]/page.tsx b/frontend/app/(main)/admin/report/designer/[reportId]/page.tsx new file mode 100644 index 00000000..f4fce164 --- /dev/null +++ b/frontend/app/(main)/admin/report/designer/[reportId]/page.tsx @@ -0,0 +1,88 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { useParams, useRouter } from "next/navigation"; +import { DndProvider } from "react-dnd"; +import { HTML5Backend } from "react-dnd-html5-backend"; +import { ReportDesignerToolbar } from "@/components/report/designer/ReportDesignerToolbar"; +import { ReportDesignerLeftPanel } from "@/components/report/designer/ReportDesignerLeftPanel"; +import { ReportDesignerCanvas } from "@/components/report/designer/ReportDesignerCanvas"; +import { ReportDesignerRightPanel } from "@/components/report/designer/ReportDesignerRightPanel"; +import { ReportDesignerProvider } from "@/contexts/ReportDesignerContext"; +import { reportApi } from "@/lib/api/reportApi"; +import { useToast } from "@/hooks/use-toast"; +import { Loader2 } from "lucide-react"; + +export default function ReportDesignerPage() { + const params = useParams(); + const router = useRouter(); + const reportId = params.reportId as string; + const [isLoading, setIsLoading] = useState(true); + const { toast } = useToast(); + + useEffect(() => { + const loadReport = async () => { + // 'new'는 새 리포트 생성 모드 + if (reportId === "new") { + setIsLoading(false); + return; + } + + try { + const response = await reportApi.getReportById(reportId); + if (!response.success) { + toast({ + title: "오류", + description: "리포트를 찾을 수 없습니다.", + variant: "destructive", + }); + router.push("/admin/report"); + } + } catch (error: any) { + toast({ + title: "오류", + description: error.message || "리포트를 불러오는데 실패했습니다.", + variant: "destructive", + }); + router.push("/admin/report"); + } finally { + setIsLoading(false); + } + }; + + if (reportId) { + loadReport(); + } + }, [reportId, router, toast]); + + if (isLoading) { + return ( +
리포트를 생성하고 관리합니다
-