update search ui

This commit is contained in:
Samandar Turgunboyev
2026-03-07 10:24:55 +05:00
parent 855600cfe2
commit 68dad90900

View File

@@ -3,13 +3,14 @@
import { product_api } from '@/shared/config/api/product/api'; import { product_api } from '@/shared/config/api/product/api';
import { ProductListResult } from '@/shared/config/api/product/type'; import { ProductListResult } from '@/shared/config/api/product/type';
import { useRouter } from '@/shared/config/i18n/navigation'; import { useRouter } from '@/shared/config/i18n/navigation';
import { Button } from '@/shared/ui/button';
import { Input } from '@/shared/ui/input'; import { Input } from '@/shared/ui/input';
import { ProductCard } from '@/widgets/categories/ui/product-card'; import { ProductCard } from '@/widgets/categories/ui/product-card';
import { useQuery } from '@tanstack/react-query'; import { useQuery } from '@tanstack/react-query';
import { Search, X } from 'lucide-react'; import { Search } from 'lucide-react';
import { useTranslations } from 'next-intl'; import { useTranslations } from 'next-intl';
import { useSearchParams } from 'next/navigation'; import { useSearchParams } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useState } from 'react';
const SearchResult = () => { const SearchResult = () => {
const router = useRouter(); const router = useRouter();
@@ -19,25 +20,6 @@ const SearchResult = () => {
const query = searchParams.get('search') || ''; const query = searchParams.get('search') || '';
const [inputValue, setInputValue] = useState(query); const [inputValue, setInputValue] = useState(query);
/* 🔹 URL → Input sync */
useEffect(() => {
setInputValue(query);
}, [query]);
/* 🔹 Debounce → Input → URL sync */
useEffect(() => {
const delay = setTimeout(() => {
if (!inputValue.trim()) {
router.replace('/search');
} else {
router.replace(`/search?search=${encodeURIComponent(inputValue)}`);
}
}, 400);
return () => clearTimeout(delay);
}, [inputValue, router]);
/* 🔹 Default product list */
const { data: productList, isLoading: listLoading } = useQuery({ const { data: productList, isLoading: listLoading } = useQuery({
queryKey: ['product_list'], queryKey: ['product_list'],
queryFn: () => product_api.list({ page: 1, page_size: 12 }), queryFn: () => product_api.list({ page: 1, page_size: 12 }),
@@ -46,12 +28,11 @@ const SearchResult = () => {
staleTime: 0, staleTime: 0,
}); });
/* 🔹 Search query */
const { data: searchList, isLoading: searchLoading } = useQuery({ const { data: searchList, isLoading: searchLoading } = useQuery({
queryKey: ['search', query, inputValue], queryKey: ['search', query],
queryFn: () => queryFn: () =>
product_api.search({ product_api.search({
search: inputValue, // agar backend `q` kutsa → q: query search: query,
page: 1, page: 1,
page_size: 12, page_size: 12,
}), }),
@@ -63,12 +44,6 @@ const SearchResult = () => {
const data = query ? (searchList ?? []) : (productList ?? []); const data = query ? (searchList ?? []) : (productList ?? []);
const isLoading = query ? searchLoading : listLoading; const isLoading = query ? searchLoading : listLoading;
/* 🔹 Handlers */
const clearSearch = () => {
setInputValue('');
router.replace('/search');
};
return ( return (
<div className="custom-container min-h-screen"> <div className="custom-container min-h-screen">
{/* 🔍 Search input */} {/* 🔍 Search input */}
@@ -83,14 +58,23 @@ const SearchResult = () => {
className="w-full pl-10 pr-10 h-12" className="w-full pl-10 pr-10 h-12"
/> />
{inputValue && ( <Button
className="absolute top-0 right-0 h-12 cursor-pointer"
onClick={() =>
router.replace(`/search?search=${encodeURIComponent(inputValue)}`)
}
>
{t('Qidirish')}
</Button>
{/* {inputValue && (
<button <button
onClick={clearSearch} onClick={clearSearch}
className="absolute right-3 top-1/2 -translate-y-1/2" className="absolute right-3 top-1/2 -translate-y-1/2"
> >
<X className="w-5 h-5" /> <X className="w-5 h-5" />
</button> </button>
)} )} */}
</div> </div>
</div> </div>