공지사항 admin ok
This commit is contained in:
@@ -8,6 +8,7 @@ import BackArrowSvg from "@/app/svgs/backarrow";
|
||||
import { getCourses, type Course } from "@/app/admin/courses/mockData";
|
||||
import CloseXOSvg from "@/app/svgs/closexo";
|
||||
import apiService from "@/app/lib/apiService";
|
||||
import NoChangesModal from "@/app/admin/notices/NoChangesModal";
|
||||
|
||||
export default function LessonEditPage() {
|
||||
const params = useParams();
|
||||
@@ -20,7 +21,6 @@ export default function LessonEditPage() {
|
||||
const vrFileInputRef = useRef<HTMLInputElement>(null);
|
||||
const csvFileInputRef = useRef<HTMLInputElement>(null);
|
||||
const [courses, setCourses] = useState<Course[]>([]);
|
||||
const [showToast, setShowToast] = useState(false);
|
||||
|
||||
// 폼 상태
|
||||
const [selectedCourse, setSelectedCourse] = useState<string>("");
|
||||
@@ -49,6 +49,9 @@ export default function LessonEditPage() {
|
||||
const [pendingFiles, setPendingFiles] = useState<File[]>([]);
|
||||
const [pendingFileType, setPendingFileType] = useState<'video' | 'vr' | 'csv' | null>(null);
|
||||
|
||||
// 변경사항 없음 모달 상태
|
||||
const [isNoChangesModalOpen, setIsNoChangesModalOpen] = useState(false);
|
||||
|
||||
// 원본 데이터 저장 (변경사항 비교용)
|
||||
const [originalData, setOriginalData] = useState<{
|
||||
title?: string;
|
||||
@@ -359,16 +362,6 @@ export default function LessonEditPage() {
|
||||
};
|
||||
}, [isDropdownOpen]);
|
||||
|
||||
// 토스트 자동 닫기
|
||||
useEffect(() => {
|
||||
if (showToast) {
|
||||
const timer = setTimeout(() => {
|
||||
setShowToast(false);
|
||||
}, 3000); // 3초 후 자동 닫기
|
||||
|
||||
return () => clearTimeout(timer);
|
||||
}
|
||||
}, [showToast]);
|
||||
|
||||
const handleBackClick = () => {
|
||||
router.push(`/admin/lessons/${params.id}`);
|
||||
@@ -763,7 +756,7 @@ export default function LessonEditPage() {
|
||||
|
||||
// 변경사항이 없으면 알림
|
||||
if (Object.keys(requestBody).length === 0) {
|
||||
alert('변경된 내용이 없습니다.');
|
||||
setIsNoChangesModalOpen(true);
|
||||
setIsSaving(false);
|
||||
return;
|
||||
}
|
||||
@@ -771,13 +764,8 @@ export default function LessonEditPage() {
|
||||
// 강좌 수정 API 호출 (PATCH /lectures/{id})
|
||||
await apiService.updateLecture(params.id as string, requestBody);
|
||||
|
||||
// 성공 시 토스트 표시
|
||||
setShowToast(true);
|
||||
|
||||
// 토스트 표시 후 상세 페이지로 이동 (새로고침하여 최신 데이터 표시)
|
||||
setTimeout(() => {
|
||||
router.push(`/admin/lessons/${params.id}?refresh=${Date.now()}`);
|
||||
}, 1500);
|
||||
// 성공 시 강좌 리스트로 이동 (토스트는 리스트 페이지에서 표시)
|
||||
router.push('/admin/lessons?updated=true');
|
||||
} catch (error) {
|
||||
console.error('강좌 수정 실패:', error);
|
||||
const errorMessage = error instanceof Error ? error.message : '강좌 수정 중 오류가 발생했습니다.';
|
||||
@@ -1369,7 +1357,7 @@ export default function LessonEditPage() {
|
||||
</div>
|
||||
)}
|
||||
{/* CSV 표 */}
|
||||
<div className="m-[24px] border border-[#dee1e6] border-solid relative bg-white max-h-[400px] overflow-y-auto">
|
||||
<div className="m-[24px] border border-[#dee1e6] border-solid relative bg-white max-h-[400px] overflow-y-auto csv-table-scroll">
|
||||
<div className="content-stretch flex flex-col items-start justify-center relative size-full">
|
||||
{/* 헤더 */}
|
||||
<div className="bg-[#f1f8ff] content-stretch flex h-[48px] items-center overflow-clip relative shrink-0 w-full sticky top-0 z-10">
|
||||
@@ -1455,23 +1443,6 @@ export default function LessonEditPage() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* 강좌 수정 완료 토스트 */}
|
||||
{showToast && (
|
||||
<div className="fixed right-[60px] bottom-[60px] z-50">
|
||||
<div className="bg-white border border-[#dee1e6] rounded-[8px] p-4 min-w-[360px] flex gap-[10px] items-center">
|
||||
<div className="relative shrink-0 w-[16.667px] h-[16.667px]">
|
||||
<svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="8.5" cy="8.5" r="8.5" fill="#384FBF"/>
|
||||
<path d="M5.5 8.5L7.5 10.5L11.5 6.5" stroke="white" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round"/>
|
||||
</svg>
|
||||
</div>
|
||||
<p className="text-[15px] font-medium leading-[1.5] text-[#1b2027] text-nowrap">
|
||||
강좌가 수정되었습니다.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* 파일 교체 확인 모달 */}
|
||||
{isFileReplaceModalOpen && (
|
||||
<div className="fixed inset-0 z-[60] flex items-center justify-center">
|
||||
@@ -1517,6 +1488,12 @@ export default function LessonEditPage() {
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* 변경사항 없음 모달 */}
|
||||
<NoChangesModal
|
||||
open={isNoChangesModalOpen}
|
||||
onClose={() => setIsNoChangesModalOpen(false)}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user