import { ContentContainer, Page } from "@/components/layouts"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Toaster } from "@/components/ui/toaster"; import { useToast } from "@/components/ui/use-toast"; import { Footer } from "@/components/utils/Footer"; import { NavBar } from "@/components/utils/NavBar"; import { SEO } from "@/components/utils/SEO"; import { Config } from "@/data/config"; import { isEmptyString } from "@/lib/utils"; import { fontFangZhengXiaoBiaoSongCN, fontSourceSerifScreenCN } from "@/styles/font"; import { TSearchResultItem } from "@/types/search-result"; import axios from "axios"; import { nanoid } from "nanoid"; import Link from "next/link"; import { ChangeEvent, KeyboardEvent, useState } from "react"; import { useQuery } from "react-query"; export default function SearchPage() { const [searchText, setSearchText] = useState(""); const [searchResult, setSearchResult] = useState([]); const { toast } = useToast(); const fetchSearchAPI = async (param: string) => { const response = (await axios.get(`/api/search/${param}`)).data; return response; }; const querySearch = useQuery("searchData", () => fetchSearchAPI(searchText), { enabled: false, onSuccess: (data) => { setSearchResult(data); if (data.length === 0) { toast({ title: "Empty Result", description: "No results were found for this keyword. Try another keyword." }); } }, onError: () => { toast({ title: "Network Error", description: "Please try it later." }); }, }); const handleInputSearchText = (event: ChangeEvent) => { setSearchText(event.target.value); }; const handleEnterKeySearch = (event: KeyboardEvent) => { (event.key === "Go" || event.key === "Enter") && handleMakeSearch(); }; const handleMakeSearch = () => { if (isEmptyString(searchText)) { toast({ title: "Enter a Keyword", description: "Please enter one keyword at least." }); return; } if (searchText.length < 4) { toast({ title: "Keywords too short", description: "Keyword length must be at least 5." }); return; } querySearch.refetch(); }; return (

{"SEARCH POSTS"}

{querySearch.isSuccess && searchResult.map((item, index) => (
{item.title}
{item.tags?.map((tagitem) => (
{tagitem}
))}
))}