import { Prisma } from "packages/common/dist"; import React, { createContext, ReactNode, useContext, useMemo, useState, } from "react"; interface SelectedTerms { [key: string]: string[]; // 每个 slug 对应一个 string 数组 } interface MainContextType { searchValue?: string; selectedTerms?: SelectedTerms; setSearchValue?: React.Dispatch>; setSelectedTerms?: React.Dispatch>; searchCondition?: Prisma.PostWhereInput; } const MainContext = createContext(null); interface MainProviderProps { children: ReactNode; } 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} ); } export const useMainContext = () => { const context = useContext(MainContext); if (!context) { throw new Error("useMainContext must be used within MainProvider"); } return context; };