diff --git a/frontend/src/Assignment.jsx b/frontend/src/Assignment.jsx index bad9e46..cff140f 100644 --- a/frontend/src/Assignment.jsx +++ b/frontend/src/Assignment.jsx @@ -1,61 +1,66 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; import WeeklyListBlock from "./components/WeeklyListBlock"; import Header from "./components/Header"; import AssignmentInfoBlock from "./components/AssignmentInfoBlock"; import styles from "./Assignment.module.css"; +import { mapStatus } from "./utils/AssignmentStatus.js"; const Assignment = () => { - const weeks = [ - { - label: "2주차 JS개론/웹개론", - details: [ - { - day: "화", - subject: "Git HTML CSS", - tasks: [ - { label: "제로초 인강", status: "done" }, - { label: "깃허브 클론 코딩", status: "progress" }, - ], - }, - { - day: "목", - subject: "Git HTML CSS", - tasks: [ - { label: "제로초 인강", status: "fail" }, - { label: "깃허브 클론 코딩", status: "progress" }, - ], - }, - ], - }, - { - label: "3주차 JS개론/웹개론", - details: [ - { - day: "화", - subject: "Git HTML CSS", - tasks: [], - }, - ], - }, - ]; - - //Assignment-Info-Block(형광 초록색카드 더미데이터) - const cardData = { - weekLabel: "3주차", - day: "화", - tasks: [{ label: "Django girls 과제" }, { label: "Django girls 과제" }], - }; + const [weeks, setWeeks] = useState([]); + const [highlightCard, setHighlightCard] = useState(null); + + useEffect(() => { + const user = JSON.parse(localStorage.getItem("user")); + const userId = user?.id; + + if (!userId) return; + + fetchAssignmentsByUser(userId) + .then((weekData) => { + const formatted = weekData.map((weekItem) => ({ + label: `${weekItem.week}주차 ${weekItem.title}`, + details: weekItem.days.map((dayItem) => ({ + day: dayItem.day, + subject: weekItem.title, + tasks: dayItem.details.map((task) => ({ + label: task.assignmentName, + status: mapStatus(task.status), + })), + })), + })); + + setWeeks(formatted); + + // 형광 카드용 하이라이트 카드 추출 (가장 최근 주차 + 첫 요일)=>운영진용 페이지 만든 후 수정필요 + // 운영진이 가장 최근 공개한 과제로. + if (formatted.length > 0 && formatted[0].details.length > 0) { + const first = formatted[0]; + const firstDay = first.details[0]; + + setHighlightCard({ + weekLabel: first.label, + day: firstDay.day, + tasks: firstDay.tasks, + }); + } + }) + .catch(() => { + alert("과제 정보를 불러오지 못했습니다."); + }); + }, []); return (