This commit is contained in:
ditiqi 2025-02-28 15:45:21 +08:00
parent b947ac2e43
commit c6a40da7c2
1 changed files with 6 additions and 4 deletions

View File

@ -6,6 +6,7 @@ import React, {
useMemo, useMemo,
useState, useState,
} from "react"; } from "react";
import { useDebounce } from "use-debounce";
interface SelectedTerms { interface SelectedTerms {
[key: string]: string[]; // 每个 slug 对应一个 string 数组 [key: string]: string[]; // 每个 slug 对应一个 string 数组
} }
@ -35,7 +36,8 @@ export function MainProvider({ children }: MainProviderProps) {
PostType.COURSE | PostType.PATH | "both" PostType.COURSE | PostType.PATH | "both"
>("both"); >("both");
const [showSearchMode, setShowSearchMode] = useState<boolean>(false); const [showSearchMode, setShowSearchMode] = useState<boolean>(false);
const [searchValue, setSearchValue] = useState(""); const [searchValue, setSearchValue] = useState<string>("");
const [debouncedValue] = useDebounce<string>(searchValue, 500);
const [selectedTerms, setSelectedTerms] = useState<SelectedTerms>({}); // 初始化状态 const [selectedTerms, setSelectedTerms] = useState<SelectedTerms>({}); // 初始化状态
const termFilters = useMemo(() => { const termFilters = useMemo(() => {
return Object.entries(selectedTerms) return Object.entries(selectedTerms)
@ -60,10 +62,10 @@ export function MainProvider({ children }: MainProviderProps) {
}, [termFilters]); }, [termFilters]);
const searchCondition: Prisma.PostWhereInput = useMemo(() => { const searchCondition: Prisma.PostWhereInput = useMemo(() => {
const containTextCondition: Prisma.StringNullableFilter = { const containTextCondition: Prisma.StringNullableFilter = {
contains: searchValue, contains: debouncedValue,
mode: "insensitive" as Prisma.QueryMode, // 使用类型断言 mode: "insensitive" as Prisma.QueryMode, // 使用类型断言
}; };
return searchValue return debouncedValue
? { ? {
OR: [ OR: [
{ title: containTextCondition }, { title: containTextCondition },
@ -79,7 +81,7 @@ export function MainProvider({ children }: MainProviderProps) {
], ],
} }
: {}; : {};
}, [searchValue]); }, [searchValue, debouncedValue]);
return ( return (
<MainContext.Provider <MainContext.Provider
value={{ value={{