From 47ccacfee2c50237d1ab8700f285b193b16d5a4c Mon Sep 17 00:00:00 2001 From: ditiqi Date: Thu, 27 Feb 2025 08:25:39 +0800 Subject: [PATCH] add --- apps/web/src/app/main/layout/MainHeader.tsx | 5 +-- apps/web/src/app/main/layout/MainProvider.tsx | 34 ++++++++++++++++++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/apps/web/src/app/main/layout/MainHeader.tsx b/apps/web/src/app/main/layout/MainHeader.tsx index f86fd6b..5087709 100755 --- a/apps/web/src/app/main/layout/MainHeader.tsx +++ b/apps/web/src/app/main/layout/MainHeader.tsx @@ -15,7 +15,7 @@ export function MainHeader() { const navigate = useNavigate(); const { searchValue, setSearchValue } = useMainContext(); const { update } = useStaff(); - + return (
@@ -42,7 +42,8 @@ export function MainHeader() { if ( !window.location.pathname.startsWith( "/courses/" - ) + ) && + !window.location.pathname.startsWith("my") ) { navigate(`/courses/`); window.scrollTo({ diff --git a/apps/web/src/app/main/layout/MainProvider.tsx b/apps/web/src/app/main/layout/MainProvider.tsx index 0952268..979d110 100644 --- a/apps/web/src/app/main/layout/MainProvider.tsx +++ b/apps/web/src/app/main/layout/MainProvider.tsx @@ -1,4 +1,11 @@ -import React, { createContext, ReactNode, useContext, useState } from "react"; +import { Prisma } from "packages/common/dist"; +import React, { + createContext, + ReactNode, + useContext, + useMemo, + useState, +} from "react"; interface SelectedTerms { [key: string]: string[]; // 每个 slug 对应一个 string 数组 } @@ -8,6 +15,7 @@ interface MainContextType { selectedTerms?: SelectedTerms; setSearchValue?: React.Dispatch>; setSelectedTerms?: React.Dispatch>; + searchCondition?: Prisma.PostWhereInput; } const MainContext = createContext(null); @@ -18,6 +26,29 @@ interface MainProviderProps { export function MainProvider({ children }: MainProviderProps) { const [searchValue, setSearchValue] = useState(""); const [selectedTerms, setSelectedTerms] = useState({}); // 初始化状态 + + const searchCondition: Prisma.PostWhereInput = useMemo(() => { + const containTextCondition: Prisma.StringNullableFilter = { + contains: searchValue, + mode: "insensitive" as Prisma.QueryMode, // 使用类型断言 + }; + return searchValue + ? { + OR: [ + { title: containTextCondition }, + { subTitle: containTextCondition }, + { content: containTextCondition }, + { + terms: { + some: { + name: containTextCondition, + }, + }, + }, + ], + } + : {}; + }, [searchValue]); return ( {children}