training_data/apps/web/src/app/main/courses/components/CoursesContainer.tsx

41 lines
1.0 KiB
TypeScript
Raw Normal View History

2025-02-25 20:40:34 +08:00
import { useMainContext } from "../../layout/MainProvider";
import { PostType, Prisma } from "@nice/common";
2025-02-26 23:18:14 +08:00
import PostList from "@web/src/components/models/course/list/PostList";
2025-02-25 20:40:34 +08:00
import { useMemo } from "react";
2025-02-26 23:18:14 +08:00
import CourseCard from "./CourseCard";
2025-02-25 20:40:34 +08:00
export function CoursesContainer() {
2025-02-27 08:25:34 +08:00
const { selectedTerms, searchCondition } = useMainContext();
2025-02-25 20:40:34 +08:00
const termFilters = useMemo(() => {
return Object.entries(selectedTerms)
.filter(([, terms]) => terms.length > 0)
.map(([, terms]) => terms);
}, [selectedTerms]);
2025-02-27 08:25:34 +08:00
2025-02-25 20:40:34 +08:00
return (
<>
2025-02-26 23:18:14 +08:00
<PostList
2025-02-27 08:00:11 +08:00
renderItem={(post) => <CourseCard course={post} edit={false}></CourseCard>}
2025-02-25 20:40:34 +08:00
params={{
pageSize: 12,
where: {
type: PostType.COURSE,
AND: termFilters.map((termFilter) => ({
terms: {
some: {
id: {
in: termFilter, // 确保至少有一个 term.id 在当前 termFilter 中
},
},
},
})),
2025-02-27 08:25:34 +08:00
...searchCondition,
2025-02-25 20:40:34 +08:00
},
}}
2025-02-26 23:18:14 +08:00
cols={4}></PostList>
2025-02-25 20:40:34 +08:00
</>
);
}
export default CoursesContainer;