import CategoryCard from '@/src/components/categorycard/CategoryCard'; import CategoryCardLoader from '@/src/components/Loader/CategoryCard.loader'; import PageSlider from '@/src/components/pageslider/PageSlider'; import getSearch from '@/src/utils/getSearch.utils'; import { useEffect, useState } from 'react'; import { useSearchParams } from 'react-router-dom'; import { Helmet } from 'react-helmet-async'; import { generateSearchMeta, generatePaginationLinks, generateCanonicalUrl, generateItemListSchema } from '@/src/utils/seo.utils'; function Search() { const [searchParams, setSearchParams] = useSearchParams(); const keyword = searchParams.get("keyword"); const page = parseInt(searchParams.get("page"), 10) || 1; const [searchData, setSearchData] = useState(null); const [totalPages, setTotalPages] = useState(0); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchSearch = async () => { setLoading(true); try { const data = await getSearch(keyword, page); setSearchData(data.data); setTotalPages(data.totalPage); setLoading(false); } catch (err) { console.error("Error fetching anime info:", err); setError(err); setLoading(false); } }; fetchSearch(); window.scrollTo({ top: 0, behavior: 'smooth' }); }, [keyword, page]); const handlePageChange = (newPage) => { setSearchParams({ keyword, page: newPage }); }; const searchGridClass = "grid-cols-6 max-[1200px]:grid-cols-4 max-[758px]:grid-cols-3 max-[478px]:gap-x-2"; const { title, description, keywords } = generateSearchMeta(keyword); const canonicalUrl = generateCanonicalUrl(`/search?keyword=${keyword || ''}${page > 1 ? `&page=${page}` : ''}`); const paginationLinks = generatePaginationLinks('/search', page, totalPages); // Create an ItemList for search results for SEO const itemListSchema = searchData && searchData.length > 0 ? generateItemListSchema(searchData, `Search results for ${keyword}`) : null; return ( <> {title} {paginationLinks.map((link, index) => ( ))} {itemListSchema && ( )}
{loading ? ( ) : page > totalPages ? (

Search Results

You came a long way, go back
nothing is here

) : searchData && searchData.length > 0 ? (

Search Results for: {keyword}

) : error ? (

Search Results

Couldn't get search results, please try again

) : (

Search Results

No results found for: {keyword}

)}
); } export default Search;