admin 페이지들 버튼 커서 변경1

This commit is contained in:
2025-11-19 11:56:13 +09:00
parent dbac109f5b
commit f1515cdd72
10 changed files with 491 additions and 164 deletions

View File

@@ -65,7 +65,7 @@ export default function AdminCertificatesPage() {
type="button" type="button"
onClick={() => setCurrentPage(1)} onClick={() => setCurrentPage(1)}
aria-label="맨 앞 페이지" aria-label="맨 앞 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">
@@ -79,7 +79,7 @@ export default function AdminCertificatesPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.max(1, p - 1))} onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}
aria-label="이전 페이지" aria-label="이전 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<ChevronDownSvg width={14.8} height={14.8} className="rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="rotate-90" />
@@ -95,7 +95,7 @@ export default function AdminCertificatesPage() {
onClick={() => setCurrentPage(n)} onClick={() => setCurrentPage(n)}
aria-current={active ? 'page' : undefined} aria-current={active ? 'page' : undefined}
className={[ className={[
'flex items-center justify-center rounded-[1000px] size-[32px]', 'flex items-center justify-center rounded-[1000px] size-[32px] cursor-pointer',
active ? 'bg-[#ecf0ff]' : 'bg-white', active ? 'bg-[#ecf0ff]' : 'bg-white',
].join(' ')} ].join(' ')}
> >
@@ -109,7 +109,7 @@ export default function AdminCertificatesPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))} onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))}
aria-label="다음 페이지" aria-label="다음 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" />
@@ -120,7 +120,7 @@ export default function AdminCertificatesPage() {
type="button" type="button"
onClick={() => setCurrentPage(totalPages)} onClick={() => setCurrentPage(totalPages)}
aria-label="맨 뒤 페이지" aria-label="맨 뒤 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">

View File

@@ -193,7 +193,7 @@ export default function CourseRegistrationModal({ open, onClose, onSave, onDelet
<button <button
type="button" type="button"
onClick={() => setIsDropdownOpen(!isDropdownOpen)} onClick={() => setIsDropdownOpen(!isDropdownOpen)}
className={`w-full h-[40px] px-3 py-2 border rounded-[8px] bg-white flex items-center justify-between text-left focus:outline-none focus:ring-2 ${ className={`w-full h-[40px] px-3 py-2 border rounded-[8px] bg-white flex items-center justify-between text-left focus:outline-none focus:ring-2 cursor-pointer ${
errors.instructor errors.instructor
? "border-[#f64c4c] focus:ring-[#f64c4c] focus:border-[#f64c4c]" ? "border-[#f64c4c] focus:ring-[#f64c4c] focus:border-[#f64c4c]"
: "border-[#dee1e6] focus:ring-[#1f2b91] focus:border-transparent" : "border-[#dee1e6] focus:ring-[#1f2b91] focus:border-transparent"
@@ -230,7 +230,7 @@ export default function CourseRegistrationModal({ open, onClose, onSave, onDelet
}); });
} }
}} }}
className={`w-full px-3 py-2 text-left text-[16px] font-normal leading-[1.5] hover:bg-[#f1f3f5] transition-colors ${ className={`w-full px-3 py-2 text-left text-[16px] font-normal leading-[1.5] hover:bg-[#f1f3f5] transition-colors cursor-pointer ${
instructorId === instructor.id instructorId === instructor.id
? "bg-[#ecf0ff] text-[#1f2b91] font-semibold" ? "bg-[#ecf0ff] text-[#1f2b91] font-semibold"
: "text-[#1b2027]" : "text-[#1b2027]"
@@ -301,7 +301,7 @@ export default function CourseRegistrationModal({ open, onClose, onSave, onDelet
<button <button
type="button" type="button"
onClick={handleDeleteClick} onClick={handleDeleteClick}
className="h-[48px] px-4 rounded-[10px] bg-[#fef2f2] text-[16px] font-semibold leading-[1.5] text-[#f64c4c] w-[136px] hover:bg-[#fae6e6] transition-colors" className="h-[48px] px-4 rounded-[10px] bg-[#fef2f2] text-[16px] font-semibold leading-[1.5] text-[#f64c4c] w-[136px] hover:bg-[#fae6e6] transition-colors cursor-pointer"
> >
</button> </button>
@@ -309,14 +309,14 @@ export default function CourseRegistrationModal({ open, onClose, onSave, onDelet
<button <button
type="button" type="button"
onClick={onClose} onClick={onClose}
className="h-[48px] px-4 rounded-[10px] bg-[#f1f3f5] text-[16px] font-semibold leading-[1.5] text-[#4c5561] w-[136px] hover:bg-[#e5e7eb] transition-colors" className="h-[48px] px-4 rounded-[10px] bg-[#f1f3f5] text-[16px] font-semibold leading-[1.5] text-[#4c5561] w-[136px] hover:bg-[#e5e7eb] transition-colors cursor-pointer"
> >
</button> </button>
<button <button
type="button" type="button"
onClick={handleSave} onClick={handleSave}
className="h-[48px] px-4 rounded-[10px] bg-[#1f2b91] text-[16px] font-semibold leading-[1.5] text-white w-[136px] hover:bg-[#1a2478] transition-colors" className="h-[48px] px-4 rounded-[10px] bg-[#1f2b91] text-[16px] font-semibold leading-[1.5] text-white w-[136px] hover:bg-[#1a2478] transition-colors cursor-pointer"
> >
</button> </button>

View File

@@ -107,7 +107,7 @@ export default function AdminCoursesPage() {
<button <button
type="button" type="button"
onClick={handleRegisterClick} onClick={handleRegisterClick}
className="h-[40px] px-4 rounded-[8px] bg-[#1f2b91] text-[16px] font-semibold leading-[1.5] text-white whitespace-nowrap hover:bg-[#1a2478] transition-colors" className="h-[40px] px-4 rounded-[8px] bg-[#1f2b91] text-[16px] font-semibold leading-[1.5] text-white whitespace-nowrap hover:bg-[#1a2478] transition-colors cursor-pointer"
> >
</button> </button>
@@ -201,7 +201,7 @@ export default function AdminCoursesPage() {
type="button" type="button"
onClick={() => setCurrentPage(1)} onClick={() => setCurrentPage(1)}
aria-label="맨 앞 페이지" aria-label="맨 앞 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">
@@ -215,7 +215,7 @@ export default function AdminCoursesPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.max(1, p - 1))} onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}
aria-label="이전 페이지" aria-label="이전 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<ChevronDownSvg width={14.8} height={14.8} className="rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="rotate-90" />
@@ -231,7 +231,7 @@ export default function AdminCoursesPage() {
onClick={() => setCurrentPage(n)} onClick={() => setCurrentPage(n)}
aria-current={active ? 'page' : undefined} aria-current={active ? 'page' : undefined}
className={[ className={[
'flex items-center justify-center rounded-[1000px] size-[32px]', 'flex items-center justify-center rounded-[1000px] size-[32px] cursor-pointer',
active ? 'bg-[#ecf0ff]' : 'bg-white', active ? 'bg-[#ecf0ff]' : 'bg-white',
].join(' ')} ].join(' ')}
> >
@@ -245,7 +245,7 @@ export default function AdminCoursesPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))} onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))}
aria-label="다음 페이지" aria-label="다음 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" />
@@ -256,7 +256,7 @@ export default function AdminCoursesPage() {
type="button" type="button"
onClick={() => setCurrentPage(totalPages)} onClick={() => setCurrentPage(totalPages)}
aria-label="맨 뒤 페이지" aria-label="맨 뒤 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">

View File

@@ -186,7 +186,7 @@ export default function AdminIdPage() {
type="button" type="button"
onClick={() => setActiveTab(tab.id)} onClick={() => setActiveTab(tab.id)}
className={[ className={[
"pb-4 px-1 text-[16px] font-medium leading-[1.5] transition-colors relative", "pb-4 px-1 text-[16px] font-medium leading-[1.5] transition-colors relative cursor-pointer",
activeTab === tab.id activeTab === tab.id
? "text-[#1f2b91] font-semibold" ? "text-[#1f2b91] font-semibold"
: "text-[#6c7682]", : "text-[#6c7682]",
@@ -269,7 +269,7 @@ export default function AdminIdPage() {
type="button" type="button"
onClick={() => changeUserRole(user.id, role)} onClick={() => changeUserRole(user.id, role)}
className={[ className={[
"w-full px-4 py-2 text-left text-[14px] leading-[1.5] hover:bg-gray-50 transition-colors", "w-full px-4 py-2 text-left text-[14px] leading-[1.5] hover:bg-gray-50 transition-colors cursor-pointer",
user.role === role user.role === role
? "text-[#1f2b91] font-semibold bg-[#ecf0ff]" ? "text-[#1f2b91] font-semibold bg-[#ecf0ff]"
: "text-[#1b2027]", : "text-[#1b2027]",
@@ -303,7 +303,7 @@ export default function AdminIdPage() {
<button <button
type="button" type="button"
onClick={() => toggleAccountStatus(user.id)} onClick={() => toggleAccountStatus(user.id)}
className="text-[12px] text-blue-500 underline underline-offset-[3px] cursor-pointer whitespace-nowrap" className="text-[12px] text-blue-500 underline underline-offset-[3px] cursor-pointer whitespace-nowrap hover:opacity-80"
> >
{user.status === 'active' ? '비활성화 처리' : '활성화 처리'} {user.status === 'active' ? '비활성화 처리' : '활성화 처리'}
</button> </button>
@@ -331,7 +331,7 @@ export default function AdminIdPage() {
type="button" type="button"
onClick={() => setCurrentPage(1)} onClick={() => setCurrentPage(1)}
aria-label="맨 앞 페이지" aria-label="맨 앞 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">
@@ -345,7 +345,7 @@ export default function AdminIdPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.max(1, p - 1))} onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}
aria-label="이전 페이지" aria-label="이전 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<ChevronDownSvg width={14.8} height={14.8} className="rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="rotate-90" />
@@ -361,7 +361,7 @@ export default function AdminIdPage() {
onClick={() => setCurrentPage(n)} onClick={() => setCurrentPage(n)}
aria-current={active ? 'page' : undefined} aria-current={active ? 'page' : undefined}
className={[ className={[
'flex items-center justify-center rounded-[1000px] size-[32px]', 'flex items-center justify-center rounded-[1000px] size-[32px] cursor-pointer',
active ? 'bg-[#ecf0ff]' : 'bg-white', active ? 'bg-[#ecf0ff]' : 'bg-white',
].join(' ')} ].join(' ')}
> >
@@ -375,7 +375,7 @@ export default function AdminIdPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))} onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))}
aria-label="다음 페이지" aria-label="다음 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" />
@@ -386,7 +386,7 @@ export default function AdminIdPage() {
type="button" type="button"
onClick={() => setCurrentPage(totalPages)} onClick={() => setCurrentPage(totalPages)}
aria-label="맨 뒤 페이지" aria-label="맨 뒤 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">
@@ -426,14 +426,14 @@ export default function AdminIdPage() {
<button <button
type="button" type="button"
onClick={handleActivateCancel} onClick={handleActivateCancel}
className="h-[40px] px-2 rounded-[8px] bg-[#f1f3f5] text-[16px] font-semibold leading-[1.5] text-[#4c5561] w-[80px]" className="h-[40px] px-2 rounded-[8px] bg-[#f1f3f5] text-[16px] font-semibold leading-[1.5] text-[#4c5561] w-[80px] cursor-pointer hover:bg-[#e5e7eb] transition-colors"
> >
</button> </button>
<button <button
type="button" type="button"
onClick={handleActivateConfirm} onClick={handleActivateConfirm}
className="h-[40px] px-4 rounded-[8px] bg-[#1f2b91] text-[16px] font-semibold leading-[1.5] text-white" className="h-[40px] px-4 rounded-[8px] bg-[#1f2b91] text-[16px] font-semibold leading-[1.5] text-white cursor-pointer hover:bg-[#1a2478] transition-colors"
> >
</button> </button>
@@ -465,14 +465,14 @@ export default function AdminIdPage() {
<button <button
type="button" type="button"
onClick={handleDeactivateCancel} onClick={handleDeactivateCancel}
className="h-[40px] px-2 rounded-[8px] bg-[#f1f3f5] text-[16px] font-semibold leading-[1.5] text-[#4c5561] w-[80px]" className="h-[40px] px-2 rounded-[8px] bg-[#f1f3f5] text-[16px] font-semibold leading-[1.5] text-[#4c5561] w-[80px] cursor-pointer hover:bg-[#e5e7eb] transition-colors"
> >
</button> </button>
<button <button
type="button" type="button"
onClick={handleDeactivateConfirm} onClick={handleDeactivateConfirm}
className="h-[40px] px-4 rounded-[8px] bg-red-50 text-[16px] font-semibold leading-[1.5] text-[#f64c4c]" className="h-[40px] px-4 rounded-[8px] bg-red-50 text-[16px] font-semibold leading-[1.5] text-[#f64c4c] cursor-pointer hover:bg-red-100 transition-colors"
> >
</button> </button>

View File

@@ -1,13 +1,25 @@
'use client'; 'use client';
import { useState, useMemo } from "react"; import { useState, useMemo, useRef, useEffect } from "react";
import AdminSidebar from "@/app/components/AdminSidebar"; import AdminSidebar from "@/app/components/AdminSidebar";
import ChevronDownSvg from "@/app/svgs/chevrondownsvg"; import ChevronDownSvg from "@/app/svgs/chevrondownsvg";
import DropdownIcon from "@/app/svgs/dropdownicon";
import BackArrowSvg from "@/app/svgs/backarrow";
export default function AdminLessonsPage() { export default function AdminLessonsPage() {
// TODO: 나중에 실제 데이터로 교체 // TODO: 나중에 실제 데이터로 교체
const items: any[] = []; const items: any[] = [];
const [currentPage, setCurrentPage] = useState(1); const [currentPage, setCurrentPage] = useState(1);
const [isRegistrationMode, setIsRegistrationMode] = useState(false);
const [isDropdownOpen, setIsDropdownOpen] = useState(false);
const dropdownRef = useRef<HTMLDivElement>(null);
// 등록 폼 상태
const [selectedCourse, setSelectedCourse] = useState<string>("");
const [lessonName, setLessonName] = useState("");
const [learningGoal, setLearningGoal] = useState("");
const [courseVideoCount, setCourseVideoCount] = useState(0);
const [vrContentCount, setVrContentCount] = useState(0);
const totalCount = useMemo(() => items.length, [items]); const totalCount = useMemo(() => items.length, [items]);
@@ -19,6 +31,47 @@ export default function AdminLessonsPage() {
return items.slice(startIndex, endIndex); return items.slice(startIndex, endIndex);
}, [items, currentPage]); }, [items, currentPage]);
// TODO: 나중에 실제 데이터로 교체
const courseOptions = [
{ id: "1", name: "교육과정 1" },
{ id: "2", name: "교육과정 2" },
{ id: "3", name: "교육과정 3" },
];
// 외부 클릭 시 드롭다운 닫기
useEffect(() => {
const handleClickOutside = (event: MouseEvent) => {
if (
dropdownRef.current &&
!dropdownRef.current.contains(event.target as Node)
) {
setIsDropdownOpen(false);
}
};
if (isDropdownOpen) {
document.addEventListener("mousedown", handleClickOutside);
}
return () => {
document.removeEventListener("mousedown", handleClickOutside);
};
}, [isDropdownOpen]);
const handleBackClick = () => {
setIsRegistrationMode(false);
// 폼 초기화
setSelectedCourse("");
setLessonName("");
setLearningGoal("");
setCourseVideoCount(0);
setVrContentCount(0);
};
const handleRegisterClick = () => {
setIsRegistrationMode(true);
};
return ( return (
<div className="min-h-screen flex flex-col bg-white"> <div className="min-h-screen flex flex-col bg-white">
{/* 메인 레이아웃 */} {/* 메인 레이아웃 */}
@@ -31,6 +84,236 @@ export default function AdminLessonsPage() {
{/* 메인 콘텐츠 */} {/* 메인 콘텐츠 */}
<main className="flex-1 min-w-0 bg-white"> <main className="flex-1 min-w-0 bg-white">
<div className="h-full flex flex-col"> <div className="h-full flex flex-col">
{isRegistrationMode ? (
/* 등록 모드 */
<div className="flex flex-col h-full">
{/* 헤더 */}
<div className="h-[100px] flex items-center px-[32px]">
<div className="flex items-center gap-[12px]">
<button
type="button"
onClick={handleBackClick}
className="flex items-center justify-center size-[32px] cursor-pointer hover:opacity-80"
aria-label="뒤로가기"
>
<BackArrowSvg width={32} height={32} />
</button>
<h1 className="text-[24px] font-bold leading-[1.5] text-[#1b2027]">
</h1>
</div>
</div>
{/* 폼 콘텐츠 */}
<div className="flex-1 overflow-y-auto px-[32px] pb-[80px] pt-[32px]">
<div className="flex flex-col gap-[40px]">
{/* 강좌 정보 */}
<div className="flex flex-col gap-[8px]">
<h2 className="text-[18px] font-bold leading-[1.5] text-[#1b2027]">
</h2>
<div className="flex flex-col gap-[24px]">
{/* 교육 과정 */}
<div className="flex flex-col gap-[8px]">
<label className="text-[15px] font-semibold leading-[1.5] text-[#6c7682]">
</label>
<div className="relative" ref={dropdownRef}>
<button
type="button"
onClick={() => setIsDropdownOpen(!isDropdownOpen)}
className="w-full h-[40px] px-[12px] py-[8px] border border-[#dee1e6] rounded-[8px] bg-white flex items-center justify-between focus:outline-none focus:ring-2 focus:ring-[#1f2b91] focus:border-transparent cursor-pointer"
>
<span className={`text-[16px] font-normal leading-[1.5] flex-1 text-left ${
selectedCourse ? 'text-[#1b2027]' : 'text-[#6c7682]'
}`}>
{selectedCourse
? courseOptions.find(c => c.id === selectedCourse)?.name
: '교육과정을 선택해 주세요.'}
</span>
<DropdownIcon stroke="#8C95A1" className="shrink-0" />
</button>
{isDropdownOpen && (
<div className="absolute top-full left-0 right-0 mt-1 bg-white border border-[#dee1e6] rounded-[8px] shadow-lg z-20 max-h-[200px] overflow-y-auto">
{courseOptions.map((course, index) => (
<button
key={course.id}
type="button"
onClick={() => {
setSelectedCourse(course.id);
setIsDropdownOpen(false);
}}
className={`w-full px-3 py-2 text-left text-[16px] font-normal leading-[1.5] hover:bg-[#f1f3f5] transition-colors cursor-pointer ${
selectedCourse === course.id
? "bg-[#ecf0ff] text-[#1f2b91] font-semibold"
: "text-[#1b2027]"
} ${
index === 0 ? "rounded-t-[8px]" : ""
} ${
index === courseOptions.length - 1 ? "rounded-b-[8px]" : ""
}`}
>
{course.name}
</button>
))}
</div>
)}
</div>
</div>
{/* 강좌명 */}
<div className="flex flex-col gap-[8px]">
<label className="text-[15px] font-semibold leading-[1.5] text-[#6c7682]">
</label>
<input
type="text"
value={lessonName}
onChange={(e) => setLessonName(e.target.value)}
placeholder="강좌명을 입력해 주세요."
className="h-[40px] px-[12px] py-[8px] border border-[#dee1e6] rounded-[8px] bg-white text-[16px] font-normal leading-[1.5] text-[#1b2027] placeholder:text-[#b1b8c0] focus:outline-none focus:ring-2 focus:ring-[#1f2b91] focus:border-transparent"
/>
</div>
{/* 학습 목표 */}
<div className="flex flex-col gap-[8px]">
<label className="text-[15px] font-semibold leading-[1.5] text-[#6c7682]">
</label>
<div className="relative">
<textarea
value={learningGoal}
onChange={(e) => {
if (e.target.value.length <= 1000) {
setLearningGoal(e.target.value);
}
}}
placeholder="내용을 입력해 주세요. (최대 1,000자)"
className="w-full h-[160px] px-[12px] py-[8px] border border-[#dee1e6] rounded-[8px] bg-white text-[16px] font-normal leading-[1.5] text-[#1b2027] placeholder:text-[#b1b8c0] focus:outline-none focus:ring-2 focus:ring-[#1f2b91] focus:border-transparent resize-none"
/>
<div className="absolute bottom-[8px] right-[12px]">
<p className="text-[13px] font-normal leading-[1.4] text-[#6c7682] text-right">
{learningGoal.length}/1000
</p>
</div>
</div>
</div>
</div>
</div>
{/* 파일 첨부 */}
<div className="flex flex-col gap-[8px]">
<h2 className="text-[18px] font-bold leading-[1.5] text-[#1b2027]">
</h2>
<div className="flex flex-col gap-[24px]">
{/* 강좌 영상 */}
<div className="flex flex-col gap-[8px]">
<div className="flex items-center justify-between h-[32px]">
<div className="flex items-center gap-[8px]">
<label className="text-[15px] font-semibold leading-[1.5] text-[#6c7682]">
({courseVideoCount}/10)
</label>
<span className="text-[13px] font-normal leading-[1.4] text-[#8c95a1]">
30MB
</span>
</div>
<button
type="button"
className="h-[32px] px-[4px] py-[3px] border border-[#8c95a1] rounded-[6px] bg-white text-[13px] font-medium leading-[1.4] text-[#4c5561] whitespace-nowrap hover:bg-gray-50 transition-colors cursor-pointer"
>
</button>
</div>
<div className="h-[64px] border border-[#dee1e6] rounded-[8px] bg-gray-50 flex items-center justify-center">
<p className="text-[14px] font-normal leading-[1.5] text-[#8c95a1] text-center">
.
</p>
</div>
</div>
{/* VR 콘텐츠 */}
<div className="flex flex-col gap-[8px]">
<div className="flex items-center justify-between h-[32px]">
<div className="flex items-center gap-[8px]">
<label className="text-[15px] font-semibold leading-[1.5] text-[#6c7682]">
VR <span className="font-normal">({vrContentCount}/10)</span>
</label>
<span className="text-[13px] font-normal leading-[1.4] text-[#8c95a1]">
30MB
</span>
</div>
<button
type="button"
className="h-[32px] px-[4px] py-[3px] border border-[#8c95a1] rounded-[6px] bg-white text-[13px] font-medium leading-[1.4] text-[#4c5561] whitespace-nowrap hover:bg-gray-50 transition-colors cursor-pointer"
>
</button>
</div>
<div className="h-[64px] border border-[#dee1e6] rounded-[8px] bg-gray-50 flex items-center justify-center">
<p className="text-[14px] font-normal leading-[1.5] text-[#8c95a1] text-center">
VR .
</p>
</div>
</div>
{/* 학습 평가 문제 */}
<div className="flex flex-col gap-[8px]">
<div className="flex items-center justify-between h-[32px]">
<div className="flex items-center gap-[8px]">
<label className="text-[15px] font-semibold leading-[1.5] text-[#6c7682]">
</label>
<span className="text-[13px] font-normal leading-[1.4] text-[#8c95a1]">
CSV
</span>
</div>
<div className="flex items-center gap-[8px]">
<button
type="button"
className="h-[32px] px-[16px] py-[3px] border border-[#b1b8c0] rounded-[6px] bg-white text-[13px] font-medium leading-[1.4] text-[#b1b8c0] whitespace-nowrap hover:bg-gray-50 transition-colors cursor-pointer"
>
</button>
<button
type="button"
className="h-[32px] px-[4px] py-[3px] border border-[#8c95a1] rounded-[6px] bg-white text-[13px] font-medium leading-[1.4] text-[#4c5561] whitespace-nowrap hover:bg-gray-50 transition-colors cursor-pointer"
>
</button>
</div>
</div>
<div className="h-[64px] border border-[#dee1e6] rounded-[8px] bg-gray-50 flex items-center justify-center">
<p className="text-[14px] font-normal leading-[1.5] text-[#8c95a1] text-center">
.
</p>
</div>
</div>
</div>
</div>
{/* 액션 버튼 */}
<div className="flex items-center justify-center gap-[12px]">
<button
type="button"
onClick={handleBackClick}
className="h-[48px] px-[8px] rounded-[10px] bg-[#f1f3f5] text-[16px] font-semibold leading-[1.5] text-[#4c5561] min-w-[80px] hover:bg-[#e5e7eb] transition-colors cursor-pointer"
>
</button>
<button
type="button"
className="h-[48px] px-[16px] rounded-[10px] bg-[#1f2b91] text-[16px] font-semibold leading-[1.5] text-white hover:bg-[#1a2478] transition-colors cursor-pointer"
>
</button>
</div>
</div>
</div>
</div>
) : (
/* 목록 모드 */
<>
{/* 제목 영역 */} {/* 제목 영역 */}
<div className="h-[100px] flex items-center"> <div className="h-[100px] flex items-center">
<h1 className="text-[24px] font-bold leading-[1.5] text-[#1b2027]"> <h1 className="text-[24px] font-bold leading-[1.5] text-[#1b2027]">
@@ -45,7 +328,8 @@ export default function AdminLessonsPage() {
</p> </p>
<button <button
type="button" type="button"
className="h-[40px] px-4 rounded-[8px] bg-[#1f2b91] text-[16px] font-semibold leading-[1.5] text-white whitespace-nowrap hover:bg-[#1a2478] transition-colors" onClick={handleRegisterClick}
className="h-[40px] px-4 rounded-[8px] bg-[#1f2b91] text-[16px] font-semibold leading-[1.5] text-white whitespace-nowrap hover:bg-[#1a2478] transition-colors cursor-pointer"
> >
</button> </button>
@@ -81,7 +365,7 @@ export default function AdminLessonsPage() {
type="button" type="button"
onClick={() => setCurrentPage(1)} onClick={() => setCurrentPage(1)}
aria-label="맨 앞 페이지" aria-label="맨 앞 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">
@@ -95,7 +379,7 @@ export default function AdminLessonsPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.max(1, p - 1))} onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}
aria-label="이전 페이지" aria-label="이전 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<ChevronDownSvg width={14.8} height={14.8} className="rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="rotate-90" />
@@ -111,7 +395,7 @@ export default function AdminLessonsPage() {
onClick={() => setCurrentPage(n)} onClick={() => setCurrentPage(n)}
aria-current={active ? 'page' : undefined} aria-current={active ? 'page' : undefined}
className={[ className={[
'flex items-center justify-center rounded-[1000px] size-[32px]', 'flex items-center justify-center rounded-[1000px] size-[32px] cursor-pointer',
active ? 'bg-[#ecf0ff]' : 'bg-white', active ? 'bg-[#ecf0ff]' : 'bg-white',
].join(' ')} ].join(' ')}
> >
@@ -125,7 +409,7 @@ export default function AdminLessonsPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))} onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))}
aria-label="다음 페이지" aria-label="다음 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" />
@@ -136,7 +420,7 @@ export default function AdminLessonsPage() {
type="button" type="button"
onClick={() => setCurrentPage(totalPages)} onClick={() => setCurrentPage(totalPages)}
aria-label="맨 뒤 페이지" aria-label="맨 뒤 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">
@@ -151,6 +435,8 @@ export default function AdminLessonsPage() {
</> </>
)} )}
</div> </div>
</>
)}
</div> </div>
</main> </main>
</div> </div>

View File

@@ -65,7 +65,7 @@ export default function AdminLogsPage() {
type="button" type="button"
onClick={() => setCurrentPage(1)} onClick={() => setCurrentPage(1)}
aria-label="맨 앞 페이지" aria-label="맨 앞 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">
@@ -79,7 +79,7 @@ export default function AdminLogsPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.max(1, p - 1))} onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}
aria-label="이전 페이지" aria-label="이전 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<ChevronDownSvg width={14.8} height={14.8} className="rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="rotate-90" />
@@ -95,7 +95,7 @@ export default function AdminLogsPage() {
onClick={() => setCurrentPage(n)} onClick={() => setCurrentPage(n)}
aria-current={active ? 'page' : undefined} aria-current={active ? 'page' : undefined}
className={[ className={[
'flex items-center justify-center rounded-[1000px] size-[32px]', 'flex items-center justify-center rounded-[1000px] size-[32px] cursor-pointer',
active ? 'bg-[#ecf0ff]' : 'bg-white', active ? 'bg-[#ecf0ff]' : 'bg-white',
].join(' ')} ].join(' ')}
> >
@@ -109,7 +109,7 @@ export default function AdminLogsPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))} onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))}
aria-label="다음 페이지" aria-label="다음 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" />
@@ -120,7 +120,7 @@ export default function AdminLogsPage() {
type="button" type="button"
onClick={() => setCurrentPage(totalPages)} onClick={() => setCurrentPage(totalPages)}
aria-label="맨 뒤 페이지" aria-label="맨 뒤 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">

View File

@@ -65,7 +65,7 @@ export default function AdminNoticesPage() {
type="button" type="button"
onClick={() => setCurrentPage(1)} onClick={() => setCurrentPage(1)}
aria-label="맨 앞 페이지" aria-label="맨 앞 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">
@@ -79,7 +79,7 @@ export default function AdminNoticesPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.max(1, p - 1))} onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}
aria-label="이전 페이지" aria-label="이전 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<ChevronDownSvg width={14.8} height={14.8} className="rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="rotate-90" />
@@ -95,7 +95,7 @@ export default function AdminNoticesPage() {
onClick={() => setCurrentPage(n)} onClick={() => setCurrentPage(n)}
aria-current={active ? 'page' : undefined} aria-current={active ? 'page' : undefined}
className={[ className={[
'flex items-center justify-center rounded-[1000px] size-[32px]', 'flex items-center justify-center rounded-[1000px] size-[32px] cursor-pointer',
active ? 'bg-[#ecf0ff]' : 'bg-white', active ? 'bg-[#ecf0ff]' : 'bg-white',
].join(' ')} ].join(' ')}
> >
@@ -109,7 +109,7 @@ export default function AdminNoticesPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))} onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))}
aria-label="다음 페이지" aria-label="다음 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" />
@@ -120,7 +120,7 @@ export default function AdminNoticesPage() {
type="button" type="button"
onClick={() => setCurrentPage(totalPages)} onClick={() => setCurrentPage(totalPages)}
aria-label="맨 뒤 페이지" aria-label="맨 뒤 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">

View File

@@ -65,7 +65,7 @@ export default function AdminQuestionsPage() {
type="button" type="button"
onClick={() => setCurrentPage(1)} onClick={() => setCurrentPage(1)}
aria-label="맨 앞 페이지" aria-label="맨 앞 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">
@@ -79,7 +79,7 @@ export default function AdminQuestionsPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.max(1, p - 1))} onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}
aria-label="이전 페이지" aria-label="이전 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<ChevronDownSvg width={14.8} height={14.8} className="rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="rotate-90" />
@@ -95,7 +95,7 @@ export default function AdminQuestionsPage() {
onClick={() => setCurrentPage(n)} onClick={() => setCurrentPage(n)}
aria-current={active ? 'page' : undefined} aria-current={active ? 'page' : undefined}
className={[ className={[
'flex items-center justify-center rounded-[1000px] size-[32px]', 'flex items-center justify-center rounded-[1000px] size-[32px] cursor-pointer',
active ? 'bg-[#ecf0ff]' : 'bg-white', active ? 'bg-[#ecf0ff]' : 'bg-white',
].join(' ')} ].join(' ')}
> >
@@ -109,7 +109,7 @@ export default function AdminQuestionsPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))} onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))}
aria-label="다음 페이지" aria-label="다음 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" />
@@ -120,7 +120,7 @@ export default function AdminQuestionsPage() {
type="button" type="button"
onClick={() => setCurrentPage(totalPages)} onClick={() => setCurrentPage(totalPages)}
aria-label="맨 뒤 페이지" aria-label="맨 뒤 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">

View File

@@ -65,7 +65,7 @@ export default function AdminResourcesPage() {
type="button" type="button"
onClick={() => setCurrentPage(1)} onClick={() => setCurrentPage(1)}
aria-label="맨 앞 페이지" aria-label="맨 앞 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">
@@ -79,7 +79,7 @@ export default function AdminResourcesPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.max(1, p - 1))} onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}
aria-label="이전 페이지" aria-label="이전 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === 1} disabled={currentPage === 1}
> >
<ChevronDownSvg width={14.8} height={14.8} className="rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="rotate-90" />
@@ -95,7 +95,7 @@ export default function AdminResourcesPage() {
onClick={() => setCurrentPage(n)} onClick={() => setCurrentPage(n)}
aria-current={active ? 'page' : undefined} aria-current={active ? 'page' : undefined}
className={[ className={[
'flex items-center justify-center rounded-[1000px] size-[32px]', 'flex items-center justify-center rounded-[1000px] size-[32px] cursor-pointer',
active ? 'bg-[#ecf0ff]' : 'bg-white', active ? 'bg-[#ecf0ff]' : 'bg-white',
].join(' ')} ].join(' ')}
> >
@@ -109,7 +109,7 @@ export default function AdminResourcesPage() {
type="button" type="button"
onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))} onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))}
aria-label="다음 페이지" aria-label="다음 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" /> <ChevronDownSvg width={14.8} height={14.8} className="-rotate-90" />
@@ -120,7 +120,7 @@ export default function AdminResourcesPage() {
type="button" type="button"
onClick={() => setCurrentPage(totalPages)} onClick={() => setCurrentPage(totalPages)}
aria-label="맨 뒤 페이지" aria-label="맨 뒤 페이지"
className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40" className="flex items-center justify-center rounded-[1000px] p-[8.615px] size-[32px] text-[#333c47] disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed"
disabled={currentPage === totalPages} disabled={currentPage === totalPages}
> >
<div className="relative flex items-center justify-center w-full h-full"> <div className="relative flex items-center justify-center w-full h-full">

View File

@@ -0,0 +1,41 @@
import React from "react";
type BackArrowProps = React.SVGProps<SVGSVGElement>;
export default function BackArrowSvg(props: BackArrowProps) {
return (
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M16 4V4C22.628 4 28 9.372 28 16V16C28 22.628 22.628 28 16 28V28C9.372 28 4 22.628 4 16V16C4 9.372 9.372 4 16 4Z"
fill="#8C95A1"
stroke="#8C95A1"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M10.6667 16.0002H21.3334"
stroke="white"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M14.6667 20L10.6667 16L14.6667 12"
stroke="white"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
);
}