From efb61510baff6afae455129788a70dc4331cdf64 Mon Sep 17 00:00:00 2001 From: Imggaggu Date: Sun, 1 Jun 2025 16:41:53 +0900 Subject: [PATCH] [Feat] add assignment delete button&api to admin assignment page --- frontend/src/api/managetask.js | 5 +++ frontend/src/components/TaskModal.jsx | 50 ++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/frontend/src/api/managetask.js b/frontend/src/api/managetask.js index 86b799c..d17cb2b 100644 --- a/frontend/src/api/managetask.js +++ b/frontend/src/api/managetask.js @@ -15,3 +15,8 @@ export const getAssignments = async () => { export const putAssignment = async (assignmentId, data) => { return api.put(`/admin/assignment/${assignmentId}`, data); }; + +// 과제 삭제 +export const deleteAssignment = async (assignmentId) => { + return api.delete(`/admin/assignment/${assignmentId}`); +}; diff --git a/frontend/src/components/TaskModal.jsx b/frontend/src/components/TaskModal.jsx index a54153d..ed0b2de 100644 --- a/frontend/src/components/TaskModal.jsx +++ b/frontend/src/components/TaskModal.jsx @@ -1,6 +1,6 @@ import { useState, useEffect } from "react"; import styles from "../pages/admin/ManageTask.module.css"; -import { postAssignment, putAssignment } from "../api/managetask"; +import { postAssignment, putAssignment, deleteAssignment } from "../api/managetask"; const TaskModal = ({ weekInfo, onClose, onSubmit }) => { const [topic, setTopic] = useState(""); @@ -86,6 +86,46 @@ const TaskModal = ({ weekInfo, onClose, onSubmit }) => { } }; + //과제 삭제 + const handleDeleteAssignment = async (groupIdx, assignmentIdx) => { + const group = taskGroups[groupIdx]; + const assignmentId = group.ids?.[assignmentIdx]; + + if (!assignmentId) { + // 로컬에만 존재하는 입력이면 그냥 삭제 + const updated = [...taskGroups]; + updated[groupIdx].assignments[assignmentIdx] = ""; + setTaskGroups(updated); + return; + } + + const confirm = window.confirm("정말 이 과제를 삭제하시겠습니까?"); + if (!confirm) return; + + try { + await deleteAssignment(assignmentId); + const updated = [...taskGroups]; + updated[groupIdx].assignments[assignmentIdx] = ""; + updated[groupIdx].ids[assignmentIdx] = null; + + // 그룹 전체가 빈 경우 제거 + const filtered = updated.filter(group => group.assignments.some(a => a.trim() !== "")); + + if (filtered.length === 0) { + alert("모든 과제가 삭제되어 주차 정보도 제거됩니다."); + onSubmit && onSubmit([]); // 부모에서 주차 제거 + onClose(); + return; + } + + setTaskGroups(filtered); + } catch (err) { + console.error("삭제 오류:", err); + alert("과제 삭제 중 오류가 발생했습니다."); + } +}; + + return (
@@ -115,6 +155,7 @@ const TaskModal = ({ weekInfo, onClose, onSubmit }) => {
{group.assignments.map((assignment, i) => ( +
{ handleAssignmentChange(groupIdx, i, e.target.value) } /> + +
))}