2025-01-08 00:56:15 +08:00
|
|
|
import { motion } from "framer-motion";
|
|
|
|
import { useContext, useState } from "react";
|
2025-03-02 11:49:46 +08:00
|
|
|
import { CourseDetailContext } from "./PostDetailContext";
|
2025-01-08 20:29:07 +08:00
|
|
|
|
|
|
|
import CourseDetailDisplayArea from "./CourseDetailDisplayArea";
|
|
|
|
import { CourseSyllabus } from "./CourseSyllabus/CourseSyllabus";
|
2025-03-02 11:49:46 +08:00
|
|
|
import { CourseDto } from "packages/common/dist";
|
2025-01-08 00:56:15 +08:00
|
|
|
|
|
|
|
export default function CourseDetailLayout() {
|
2025-02-21 16:11:02 +08:00
|
|
|
const {
|
2025-03-02 11:49:46 +08:00
|
|
|
post,
|
2025-02-26 11:39:53 +08:00
|
|
|
|
2025-02-21 16:11:02 +08:00
|
|
|
setSelectedLectureId,
|
|
|
|
} = useContext(CourseDetailContext);
|
2025-01-08 00:56:15 +08:00
|
|
|
|
|
|
|
const handleLectureClick = (lectureId: string) => {
|
|
|
|
setSelectedLectureId(lectureId);
|
|
|
|
};
|
2025-02-24 09:41:50 +08:00
|
|
|
const [isSyllabusOpen, setIsSyllabusOpen] = useState(true);
|
2025-01-08 00:56:15 +08:00
|
|
|
return (
|
|
|
|
<div className="relative">
|
2025-02-27 09:28:16 +08:00
|
|
|
<div className="pt-12 px-32">
|
2025-01-08 20:29:07 +08:00
|
|
|
{" "}
|
|
|
|
{/* 添加这个包装 div */}
|
|
|
|
<motion.div
|
2025-02-24 09:41:50 +08:00
|
|
|
initial={{
|
|
|
|
width: "75%",
|
|
|
|
}}
|
2025-01-08 20:29:07 +08:00
|
|
|
animate={{
|
|
|
|
width: isSyllabusOpen ? "75%" : "100%",
|
|
|
|
}}
|
|
|
|
transition={{ type: "spring", stiffness: 300, damping: 30 }}
|
|
|
|
className="relative">
|
2025-02-26 11:39:53 +08:00
|
|
|
<CourseDetailDisplayArea />
|
2025-01-08 20:29:07 +08:00
|
|
|
</motion.div>
|
|
|
|
{/* 课程大纲侧边栏 */}
|
|
|
|
<CourseSyllabus
|
2025-03-02 11:49:46 +08:00
|
|
|
sections={(post as CourseDto)?.sections || []}
|
2025-01-08 20:29:07 +08:00
|
|
|
onLectureClick={handleLectureClick}
|
|
|
|
isOpen={isSyllabusOpen}
|
|
|
|
onToggle={() => setIsSyllabusOpen(!isSyllabusOpen)}
|
2025-01-08 00:56:15 +08:00
|
|
|
/>
|
2025-01-08 20:29:07 +08:00
|
|
|
</div>
|
2025-01-08 00:56:15 +08:00
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|