From 90f79a7a691943a496f67f01c1e493256070e4de Mon Sep 17 00:00:00 2001 From: dujinkim Date: Mon, 7 Jul 2025 01:44:45 +0000 Subject: (대표님) 변경사항 20250707 10시 43분 - unstaged 변경사항 추가 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/evaluation-submit/evaluation-page.tsx | 258 ++++++++++++++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 lib/evaluation-submit/evaluation-page.tsx (limited to 'lib/evaluation-submit/evaluation-page.tsx') diff --git a/lib/evaluation-submit/evaluation-page.tsx b/lib/evaluation-submit/evaluation-page.tsx new file mode 100644 index 00000000..810ed03e --- /dev/null +++ b/lib/evaluation-submit/evaluation-page.tsx @@ -0,0 +1,258 @@ +"use client" + +import * as React from "react" +import { useParams, useRouter } from "next/navigation" +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" +import { Button } from "@/components/ui/button" +import { Skeleton } from "@/components/ui/skeleton" +import { AlertCircle, ArrowLeft, RefreshCw } from "lucide-react" +import { Alert, AlertDescription } from "@/components/ui/alert" + +import { getEvaluationFormData, EvaluationFormData } from "./service" +import { EvaluationForm } from "./evaluation-form" + +/** + * 로딩 스켈레톤 컴포넌트 + */ +function EvaluationFormSkeleton() { + return ( +
+ {/* 헤더 스켈레톤 */} +
+
+ +
+ + +
+
+ +
+ + {/* 평가 정보 카드 스켈레톤 */} + + + + + +
+ {[...Array(4)].map((_, i) => ( +
+ + + +
+ ))} +
+
+
+ + {/* 진행률 카드 스켈레톤 */} + + +
+
+ + +
+ +
+
+
+ + {/* 질문 카드들 스켈레톤 */} + {[...Array(3)].map((_, i) => ( + + +
+
+
+ + +
+ + +
+
+
+ +
+ + {[...Array(3)].map((_, j) => ( +
+ +
+ + +
+
+ ))} +
+
+ + +
+
+
+ ))} +
+ ) +} + +/** + * 에러 상태 컴포넌트 + */ +function EvaluationFormError({ + error, + onRetry +}: { + error: string + onRetry: () => void +}) { + const router = useRouter() + + return ( +
+
+ +
+

평가 작성

+

평가를 불러오는 중 오류가 발생했습니다

+
+
+ + + + + {error} + + + + + + 문제 해결 + + 다음 방법들을 시도해보세요: + + + +
    +
  • 페이지를 새로고침해보세요
  • +
  • 인터넷 연결 상태를 확인해보세요
  • +
  • 잠시 후 다시 시도해보세요
  • +
  • 문제가 지속되면 관리자에게 문의하세요
  • +
+ +
+ + +
+
+
+
+ ) +} + +/** + * 평가 작성 페이지 메인 컴포넌트 + */ +export function EvaluationPage() { + const params = useParams() + const router = useRouter() + const [formData, setFormData] = React.useState(null) + const [isLoading, setIsLoading] = React.useState(true) + const [error, setError] = React.useState(null) + + const reviewerEvaluationId = params.id ? parseInt(params.id as string) : null + + // 평가 데이터 로드 + const loadEvaluationData = React.useCallback(async () => { + if (!reviewerEvaluationId) { + setError("잘못된 평가 ID입니다.") + setIsLoading(false) + return + } + + try { + setIsLoading(true) + setError(null) + + const data = await getEvaluationFormData(reviewerEvaluationId) + + if (!data) { + setError("평가 데이터를 찾을 수 없습니다.") + return + } + + setFormData(data) + } catch (err) { + console.error('Failed to load evaluation data:', err) + setError( + err instanceof Error + ? err.message + : "평가 데이터를 불러오는 중 오류가 발생했습니다." + ) + } finally { + setIsLoading(false) + } + }, [reviewerEvaluationId]) + + // 초기 데이터 로드 + React.useEffect(() => { + loadEvaluationData() + }, [loadEvaluationData]) + + // 평가 완료 후 처리 + const handleSubmitSuccess = React.useCallback(() => { + router.push('/evaluations') + }, [router]) + + // 로딩 상태 + if (isLoading) { + return + } + + // 에러 상태 + if (error) { + return ( + + ) + } + + // 데이터가 없는 경우 + if (!formData) { + return ( + + ) + } + + // 정상 상태 - 평가 폼 렌더링 + return ( + + ) +} + +// 페이지 컴포넌트용 기본 export +export default function EvaluationPageWrapper() { + return +} \ No newline at end of file -- cgit v1.2.3