'use client'; import { useState, useMemo } from "react"; import AdminSidebar from "@/app/components/AdminSidebar"; import CourseRegistrationModal from "./CourseRegistrationModal"; import ChevronDownSvg from "@/app/svgs/chevrondownsvg"; import { MOCK_COURSES, MOCK_CURRENT_USER, type Course } from "./mockData"; export default function AdminCoursesPage() { const [courses, setCourses] = useState(MOCK_COURSES); const [isModalOpen, setIsModalOpen] = useState(false); const [editingCourse, setEditingCourse] = useState(null); const [currentPage, setCurrentPage] = useState(1); const totalCount = useMemo(() => courses.length, [courses]); const ITEMS_PER_PAGE = 10; const sortedCourses = useMemo(() => { return [...courses].sort((a, b) => { // 생성일 내림차순 정렬 (최신 날짜가 먼저) return b.createdAt.localeCompare(a.createdAt); }); }, [courses]); const totalPages = Math.ceil(sortedCourses.length / ITEMS_PER_PAGE); const paginatedCourses = useMemo(() => { const startIndex = (currentPage - 1) * ITEMS_PER_PAGE; const endIndex = startIndex + ITEMS_PER_PAGE; return sortedCourses.slice(startIndex, endIndex); }, [sortedCourses, currentPage]); const handleSaveCourse = (courseName: string, instructorName: string) => { if (editingCourse) { // 수정 모드 setCourses(prev => prev.map(course => course.id === editingCourse.id ? { ...course, courseName, instructorName } : course )); } else { // 등록 모드 const newCourse: Course = { id: String(Date.now()), courseName, instructorName, createdAt: new Date().toISOString().split('T')[0], createdBy: MOCK_CURRENT_USER, hasLessons: false, // 기본값: 미포함 }; setCourses(prev => [...prev, newCourse]); } setIsModalOpen(false); setEditingCourse(null); }; const handleRowClick = (course: Course) => { setEditingCourse(course); setIsModalOpen(true); }; const handleModalClose = () => { setIsModalOpen(false); setEditingCourse(null); }; const handleRegisterClick = () => { setEditingCourse(null); setIsModalOpen(true); }; return (
{/* 메인 레이아웃 */}
{/* 사이드바 */}
{/* 메인 콘텐츠 */}
{/* 제목 영역 */}

교육과정 관리

{/* 헤더 영역 (제목과 콘텐츠 사이) */}

총 {totalCount}건

{/* 콘텐츠 영역 */}
{courses.length === 0 ? (

등록된 교육과정이 없습니다.
과목을 등록해주세요.

) : (
{paginatedCourses.map((course) => ( handleRowClick(course)} > ))}
교육과정명 강사명 생성일 등록자 강좌포함여부
{course.courseName} {course.instructorName} {course.createdAt} {course.createdBy} {course.hasLessons ? (
포함
) : (
미포함
)}
)} {/* 페이지네이션 - 10개 초과일 때만 표시 */} {courses.length > ITEMS_PER_PAGE && (() => { // 페이지 번호를 10단위로 표시 const pageGroup = Math.floor((currentPage - 1) / 10); const startPage = pageGroup * 10 + 1; const endPage = Math.min(startPage + 9, totalPages); const visiblePages = Array.from({ length: endPage - startPage + 1 }, (_, i) => startPage + i); return (
{/* First (맨 앞으로) */} {/* Prev */} {/* Numbers */} {visiblePages.map((n) => { const active = n === currentPage; return ( ); })} {/* Next */} {/* Last (맨 뒤로) */}
); })()}
); }