'use client'; import { useMemo } from 'react'; import { useAutocompleteQuery } from '@akinon/next/data/client/misc'; import { ROUTES } from '@theme/routes'; import { LoaderSpinner, Price, Link } from '@theme/components'; import { useDebounce, useLocalization } from '@akinon/next/hooks'; import { Image } from '@akinon/next/components/image'; interface ResultsProps { searchText: string; } const MINIMUM_SEARCH_LENGTH = 3; export default function Results(props: ResultsProps) { const { searchText } = props; const { t } = useLocalization(); const debouncedSearchText = useDebounce(searchText, 400); const { currentData, isFetching, isLoading } = useAutocompleteQuery( debouncedSearchText, { refetchOnMountOrArgChange: true, skip: debouncedSearchText.length < MINIMUM_SEARCH_LENGTH } ); const categories = useMemo( () => currentData?.groups.find((group) => group.suggestion_type === 'Category') ?.entries ?? [], [currentData] ); const products = useMemo( () => currentData?.groups.find((group) => group.suggestion_type === 'Product') ?.entries ?? [], [currentData] ); if ( debouncedSearchText.length < MINIMUM_SEARCH_LENGTH || searchText !== debouncedSearchText ) { return null; } if (isLoading || isFetching) { return ; } if (categories.length === 0 && products.length === 0) { return

{t('common.search.not_found')}

; } return (
{categories.length > 0 && (
{t('common.search.categories')}
    {categories.map((category, index) => (
  • {category.label}
  • ))}
)}
{t('common.search.products_for')}{' '} {debouncedSearchText}
{products.map((product, index) => (
{product.extra.image ? ( {product?.label} ) : ( {product?.label} )}
{product?.label} ))}
{t('common.search.view_all')} {debouncedSearchText.toUpperCase()}
); }