diff --git a/src/app/admin/courses/CourseRegistrationModal.tsx b/src/app/admin/courses/CourseRegistrationModal.tsx index 917f1c7..cf05938 100644 --- a/src/app/admin/courses/CourseRegistrationModal.tsx +++ b/src/app/admin/courses/CourseRegistrationModal.tsx @@ -10,14 +10,16 @@ type Props = { open: boolean; onClose: () => void; onSave?: (courseName: string, instructorName: string) => void; + onDelete?: () => void; editingCourse?: Course | null; }; -export default function CourseRegistrationModal({ open, onClose, onSave, editingCourse }: Props) { +export default function CourseRegistrationModal({ open, onClose, onSave, onDelete, editingCourse }: Props) { const [courseName, setCourseName] = useState(""); const [instructorId, setInstructorId] = useState(""); const [isDropdownOpen, setIsDropdownOpen] = useState(false); const [errors, setErrors] = useState>({}); + const [isDeleteConfirmOpen, setIsDeleteConfirmOpen] = useState(false); const dropdownRef = useRef(null); const modalRef = useRef(null); @@ -46,6 +48,7 @@ export default function CourseRegistrationModal({ open, onClose, onSave, editing setInstructorId(""); setIsDropdownOpen(false); setErrors({}); + setIsDeleteConfirmOpen(false); } }, [open, editingCourse, instructors]); @@ -96,6 +99,25 @@ export default function CourseRegistrationModal({ open, onClose, onSave, editing } }; + // 삭제 버튼 클릭 핸들러 + const handleDeleteClick = () => { + setIsDeleteConfirmOpen(true); + }; + + // 삭제 확인 핸들러 + const handleDeleteConfirm = () => { + if (onDelete) { + onDelete(); + setIsDeleteConfirmOpen(false); + onClose(); + } + }; + + // 삭제 취소 핸들러 + const handleDeleteCancel = () => { + setIsDeleteConfirmOpen(false); + }; + if (!open) return null; return ( @@ -275,6 +297,15 @@ export default function CourseRegistrationModal({ open, onClose, onSave, editing {/* Actions Container */}
+ {editingCourse && ( + + )}
+ + {/* 삭제 확인 모달 */} + {isDeleteConfirmOpen && ( +
+ + )}
); } diff --git a/src/app/admin/courses/page.tsx b/src/app/admin/courses/page.tsx index 4438957..32e0449 100644 --- a/src/app/admin/courses/page.tsx +++ b/src/app/admin/courses/page.tsx @@ -11,6 +11,7 @@ export default function AdminCoursesPage() { const [isModalOpen, setIsModalOpen] = useState(false); const [editingCourse, setEditingCourse] = useState(null); const [currentPage, setCurrentPage] = useState(1); + const [showToast, setShowToast] = useState(false); const totalCount = useMemo(() => courses.length, [courses]); @@ -68,6 +69,17 @@ export default function AdminCoursesPage() { setIsModalOpen(true); }; + const handleDeleteCourse = () => { + if (editingCourse) { + setCourses(prev => prev.filter(course => course.id !== editingCourse.id)); + setEditingCourse(null); + setShowToast(true); + setTimeout(() => { + setShowToast(false); + }, 3000); + } + }; + return (
{/* 메인 레이아웃 */} @@ -265,8 +277,26 @@ export default function AdminCoursesPage() { open={isModalOpen} onClose={handleModalClose} onSave={handleSaveCourse} + onDelete={handleDeleteCourse} editingCourse={editingCourse} /> + + {/* 삭제 완료 토스트 */} + {showToast && ( +
+
+
+ + + + +
+

+ 교육과정을 삭제했습니다. +

+
+
+ )}
); } \ No newline at end of file diff --git a/src/app/admin/lessons/page.tsx b/src/app/admin/lessons/page.tsx index 32b6878..eb68c65 100644 --- a/src/app/admin/lessons/page.tsx +++ b/src/app/admin/lessons/page.tsx @@ -9,6 +9,8 @@ export default function AdminLessonsPage() { const items: any[] = []; const [currentPage, setCurrentPage] = useState(1); + const totalCount = useMemo(() => items.length, [items]); + const ITEMS_PER_PAGE = 10; const totalPages = Math.ceil(items.length / ITEMS_PER_PAGE); const paginatedItems = useMemo(() => { @@ -26,7 +28,6 @@ export default function AdminLessonsPage() {
- {/* 메인 콘텐츠 */}
@@ -37,12 +38,27 @@ export default function AdminLessonsPage() {
+ {/* 헤더 영역 (제목과 콘텐츠 사이) */} +
+

+ 총 {totalCount}건 +

+ +
+ {/* 콘텐츠 영역 */} -
+
{items.length === 0 ? (

- 현재 관리할 수 있는 항목이 없습니다. + 등록된 강좌가 없습니다. +
+ 강좌를 등록해주세요.

) : (