From 5686a337f304e23187bd69d6102272582dada70f Mon Sep 17 00:00:00 2001 From: ditiqi Date: Tue, 25 Feb 2025 19:50:36 +0800 Subject: [PATCH] add --- apps/server/src/models/term/term.router.ts | 2 +- .../main/courses/components/FilterSection.tsx | 84 +++---------------- .../main/courses/layout/AllCoursesLayout.tsx | 27 ++++++ apps/web/src/app/main/courses/page.tsx | 12 +-- .../components/models/term/term-select.tsx | 17 ---- 5 files changed, 42 insertions(+), 100 deletions(-) create mode 100644 apps/web/src/app/main/courses/layout/AllCoursesLayout.tsx diff --git a/apps/server/src/models/term/term.router.ts b/apps/server/src/models/term/term.router.ts index 43afff5..548526c 100755 --- a/apps/server/src/models/term/term.router.ts +++ b/apps/server/src/models/term/term.router.ts @@ -69,7 +69,7 @@ export class TermRouter { const { staff } = ctx; return await this.termService.getParentSimpleTree(staff, input); }), - getTreeData: this.trpc.protectProcedure + getTreeData: this.trpc.procedure .input(TermMethodSchema.getTreeData) .query(async ({ input }) => { return await this.termService.getTreeData(input); diff --git a/apps/web/src/app/main/courses/components/FilterSection.tsx b/apps/web/src/app/main/courses/components/FilterSection.tsx index 2c754e4..f7a6ced 100755 --- a/apps/web/src/app/main/courses/components/FilterSection.tsx +++ b/apps/web/src/app/main/courses/components/FilterSection.tsx @@ -5,86 +5,26 @@ import { TaxonomySlug, TermDto } from "@nice/common"; import { useEffect, useMemo } from "react"; import { api } from "@nice/client"; import { useSearchParams } from "react-router-dom"; -import TermTree from "@web/src/components/models/term/term-tree"; import TermSelect from "@web/src/components/models/term/term-select"; -interface FilterSectionProps { - selectedCategory: string; - selectedLevel: string; - onCategoryChange: (category: string) => void; - onLevelChange: (level: string) => void; -} - -interface GetTaxonomyProps { - categories: string[]; - isLoading: boolean; -} - -function useGetTaxonomy({ type }): GetTaxonomyProps { - const { data, isLoading }: { data: TermDto[]; isLoading: boolean } = - api.term.findMany.useQuery({ - where: { - taxonomy: { - //TaxonomySlug.CATEGORY - slug: type, - }, - }, - include: { - children: true, - }, - take: 10, // 只取前10个 - orderBy: { - createdAt: "desc", // 按创建时间降序排列 - }, - }); - const categories = useMemo(() => { - const allCategories = isLoading - ? [] - : data?.map((course) => course.name); - return [...Array.from(new Set(allCategories))]; - }, [data]); - return { categories, isLoading }; -} - -export default function FilterSection({ - selectedCategory, - selectedLevel, - onCategoryChange, - onLevelChange, -}: FilterSectionProps) { - const gateGory: GetTaxonomyProps = useGetTaxonomy({ - type: TaxonomySlug.CATEGORY, - }); - const levels: GetTaxonomyProps = useGetTaxonomy({ - type: TaxonomySlug.LEVEL, - }); - - const [searchParams, setSearchParams] = useSearchParams(); - useEffect(() => { - if (searchParams.get("category")) - onCategoryChange(searchParams.get("category")); - }, [searchParams.get("category")]); - +export default function FilterSection() { const { data: taxonomies } = api.taxonomy.getAll.useQuery({}); return ( -
- {taxonomies?.map((tax) => { +
+ {taxonomies?.map((tax, index) => { return ( - <> -
-

- {tax?.name} -

- -
- +
+

+ {tax?.name} +

+ + {index < taxonomies.length - 1 && ( + + )} +
); })} - -
); } diff --git a/apps/web/src/app/main/courses/layout/AllCoursesLayout.tsx b/apps/web/src/app/main/courses/layout/AllCoursesLayout.tsx new file mode 100644 index 0000000..b3089f1 --- /dev/null +++ b/apps/web/src/app/main/courses/layout/AllCoursesLayout.tsx @@ -0,0 +1,27 @@ +import { useMainContext } from "../../layout/MainProvider"; +import CourseList from "../components/CourseList"; +import FilterSection from "../components/FilterSection"; + +export function AllCoursesLayout() { + const { searchValue, setSearchValue } = useMainContext(); + return ( + <> +
+
+
+ +
+
+ +
+
+
+ + ); +} +export default AllCoursesLayout; diff --git a/apps/web/src/app/main/courses/page.tsx b/apps/web/src/app/main/courses/page.tsx index 803b372..0b0fb43 100755 --- a/apps/web/src/app/main/courses/page.tsx +++ b/apps/web/src/app/main/courses/page.tsx @@ -11,24 +11,16 @@ import { import { useSearchParams } from "react-router-dom"; import { set } from "idb-keyval"; import { useMainContext } from "../layout/MainProvider"; +import AllCoursesLayout from "./layout/AllCoursesLayout"; interface paginationData { items: CourseDto[]; totalPages: number; } export default function CoursesPage() { - const { searchValue, setSearchValue } = useMainContext(); - return ( <> -
-
{searchValue}
- -
+ ); } diff --git a/apps/web/src/components/models/term/term-select.tsx b/apps/web/src/components/models/term/term-select.tsx index ce5d9be..07b4741 100755 --- a/apps/web/src/components/models/term/term-select.tsx +++ b/apps/web/src/components/models/term/term-select.tsx @@ -10,8 +10,6 @@ interface TermSelectProps { onChange?: (value: string | string[]) => void; placeholder?: string; multiple?: boolean; - // rootId?: string; - // domain?: boolean; taxonomyId?: string; disabled?: boolean; className?: string; @@ -27,9 +25,7 @@ export default function TermSelect({ multiple = false, taxonomyId, domainId, - // rootId = null, disabled = false, - // domain = undefined, }: TermSelectProps) { const utils = api.useUtils(); const [listTreeData, setListTreeData] = useState< @@ -125,20 +121,9 @@ export default function TermSelect({ }; const handleExpand = async (keys: React.Key[]) => { - // console.log(keys); try { const allKeyIds = keys.map((key) => key.toString()).filter(Boolean) || []; - // const expandedNodes = await Promise.all( - // keys.map(async (key) => { - // return await utils.department.getChildSimpleTree.fetch({ - // deptId: key.toString(), - // domain, - // }); - // }) - // ); - // - //上面那样一个个拉会拉爆,必须直接拉deptIds const expandedNodes = await utils.term.getChildSimpleTree.fetch({ termIds: allKeyIds, taxonomyId, @@ -154,7 +139,6 @@ export default function TermSelect({ console.error("Error expanding nodes with keys", keys, ":", error); } }; - const handleDropdownVisibleChange = async (open: boolean) => { if (open) { // This will attempt to expand all nodes and fetch their children when the dropdown opens @@ -162,7 +146,6 @@ export default function TermSelect({ await handleExpand(allKeys); } }; - return (