'use client'; import LogosProduct from '@/assets/product.png'; import { product_api } from '@/shared/config/api/product/api'; import { ProductListResult, SearchDataPro, } from '@/shared/config/api/product/type'; import { BASE_URL } from '@/shared/config/api/URLs'; import { useRouter } from '@/shared/config/i18n/navigation'; import formatPrice from '@/shared/lib/formatPrice'; import { Skeleton } from '@/shared/ui/skeleton'; import { useQuery } from '@tanstack/react-query'; import { PackageOpen } from 'lucide-react'; import { useTranslations } from 'next-intl'; import Image from 'next/image'; type SearchResultProps = { query: string; }; export const SearchResult = ({ query }: SearchResultProps) => { const router = useRouter(); const t = useTranslations(); /* 🔹 Default products - query bo'lmaganda */ const { data: products, isLoading: isLoadingDefault } = useQuery< ProductListResult[] >({ queryKey: ['product_list'], queryFn: async () => { const res = await product_api.list({ page: 1, page_size: 10 }); return res.data.results; }, enabled: !query, }); /* 🔹 Search - query bo'lganda */ const { data: searchData, isLoading: isLoadingSearch } = useQuery< ProductListResult[] >({ queryKey: ['search', query], queryFn: async () => { const res = await product_api.search({ search: query, page: 1, page_size: 10, }); // API response strukturasiga qarab to'g'rilash kerak // Agar res.data.products array bo'lsa: return Array.isArray(res.data.products) ? res.data.products : (res.data.products as SearchDataPro[]).map( // eslint-disable-next-line @typescript-eslint/no-explicit-any (item: any) => item.products || item, ); }, enabled: !!query && query.trim().length > 0, }); const isLoading = query ? isLoadingSearch : isLoadingDefault; const list: ProductListResult[] = query ? (searchData ?? []) : (products ?? []); if (isLoading) { return (
{query ? t('Hech narsa topilmadi') : t('Mahsulotlar mavjud emas')}
{query ? t('Qidiruv natijalari') : t('Tavsiya etiladi')}
{list .filter((item) => item.state === 'A') .slice(0, 5) .map((product) => { const image = product.images.length > 0 ? product?.images[0].image?.includes(BASE_URL) ? product.images[0].image : BASE_URL + product.images[0].image : LogosProduct; const price = product.prices?.[0]?.price; return ({product.name}
{price && ({formatPrice(price)}
)}