11"use client" ;
2- import React from "react" ;
2+
3+ import React , { useEffect , useState } from "react" ;
34import QuizCorrectRates from "./QuizCorrectRates/QuizCorrectRates" ;
45import AverageCorrectRate from "./AverageCorrectRate/AverageCorrectRate" ;
56import QuizDetailChart from "./QuizDetailChart/QuizDetailChart" ;
67import styles from "./StatisticsContainer.module.scss" ;
78import Masonry from "react-masonry-css" ;
9+ import {
10+ fetchQuizDetailStatResult ,
11+ QuizDetailStat ,
12+ } from "@/types/quizzes/fetchQuizDetailStatTypes" ;
13+ import { useParams } from "next/navigation" ;
14+ import { fetchQuizDetailStat } from "@/api/quizzes/fetchQuizDetailStat" ;
815
916interface StatData {
1017 averageCorrectRate : number ;
@@ -23,46 +30,20 @@ export default function StatisticsContainer({
2330 statData,
2431} : StatisticsContainerProps ) {
2532 // 두 번째 데이터: 퀴즈별 분포/상세용
26- const detailData = [
27- {
28- quizId : "qz-001" ,
29- quizOrder : 1 ,
30- type : "multipleChoice" ,
31- 1 : 70.0 ,
32- 2 : 20.0 ,
33- 3 : 0.0 ,
34- 4 : 10.0 ,
35- } ,
36- {
37- quizId : "qz-002" ,
38- quizOrder : 2 ,
39- type : "trueFalse" ,
40- O : 80.0 ,
41- X : 20.0 ,
42- } ,
43- {
44- quizId : "qz-003" ,
45- quizOrder : 3 ,
46- type : "shortAnswer" ,
47- top3Answers : [
48- { answer : "배깅" , rate : 50.0 } ,
49- { answer : "부스팅" , rate : 20.0 } ,
50- { answer : "스태킹" , rate : 10.0 } ,
51- ] ,
52- etcAnswers : [ "Voting" , "랜덤포레스트" ] ,
53- } ,
54- {
55- quizId : "qz-004" ,
56- quizOrder : 4 ,
57- type : "shortAnswer" ,
58- top3Answers : [
59- { answer : "복원 추출" , rate : 30.0 } ,
60- { answer : "순차 샘플링" , rate : 20.0 } ,
61- { answer : "K-켭 교차 검증" , rate : 10.0 } ,
62- ] ,
63- etcAnswers : [ "부스트랩 샘플링" , "계층 샘플링" , "단순 샘플링" ] ,
64- } ,
65- ] ;
33+ const [ detailData , setDetailData ] =
34+ useState < fetchQuizDetailStatResult | null > ( null ) ;
35+ const { lectureId } = useParams < { lectureId : string } > ( ) ;
36+
37+ useEffect ( ( ) => {
38+ if ( ! lectureId ) return ;
39+ fetchQuizDetailStat ( lectureId ) . then ( ( res ) => {
40+ if ( res . isSuccess && res . result ) {
41+ setDetailData ( res . result ) ;
42+ } else {
43+ setDetailData ( null ) ;
44+ }
45+ } ) ;
46+ } , [ lectureId ] ) ;
6647
6748 return (
6849 < Masonry
@@ -75,15 +56,13 @@ export default function StatisticsContainer({
7556 totalQuizCount = { statData . totalQuizCount }
7657 />
7758 < QuizCorrectRates quizList = { statData . quizList } />
78- { detailData . map ( ( quiz ) => (
79- < QuizDetailChart
80- key = { quiz . quizId }
81- quiz = { {
82- ...quiz ,
83- type : quiz . type as "multipleChoice" | "trueFalse" | "shortAnswer" ,
84- } }
85- />
86- ) ) }
59+ { detailData && detailData . length > 0 ? (
60+ detailData . map ( ( quiz : QuizDetailStat ) => (
61+ < QuizDetailChart key = { quiz . quizId } quiz = { quiz } />
62+ ) )
63+ ) : (
64+ < div className = { styles . noData } > 퀴즈 상세 통계 데이터가 없습니다.</ div >
65+ ) }
8766 </ Masonry >
8867 ) ;
8968}
0 commit comments