import React, { useState, useEffect } from 'react'; import { useRouter } from 'next/router'; import { useQuery } from '@apollo/client'; import Head from 'next/head'; import Header from '@/components/Header'; import Footer from '@/components/Footer'; import MobileMenuBottomSection from '@/components/MobileMenuBottomSection'; import { DOC_FIND_OEM, FIND_LAXIMO_VEHICLES_BY_PART_NUMBER } from '@/lib/graphql'; import { LaximoDocFindOEMResult, LaximoVehiclesByPartResult, LaximoVehicleSearchResult } from '@/types/laximo'; import MetaTags from '@/components/MetaTags'; import { getMetaByPath } from '@/lib/meta-config'; type SearchMode = 'parts' | 'vehicles'; const InfoSearch = () => (
Главная
Поиск деталей по артикулу

Поиск деталей по артикулу

); const SearchPage = () => { const router = useRouter(); const { q, mode } = router.query; const [searchQuery, setSearchQuery] = useState(""); const [searchMode, setSearchMode] = useState('parts'); useEffect(() => { if (q && typeof q === 'string') { setSearchQuery(q.trim().toUpperCase()); } if (mode && typeof mode === 'string' && (mode === 'parts' || mode === 'vehicles')) { setSearchMode(mode); } }, [q, mode]); const { data: partsData, loading: partsLoading, error: partsError } = useQuery(DOC_FIND_OEM, { variables: { oemNumber: searchQuery }, skip: !searchQuery || searchMode !== 'parts', errorPolicy: 'all' }); const { data: vehiclesData, loading: vehiclesLoading, error: vehiclesError } = useQuery(FIND_LAXIMO_VEHICLES_BY_PART_NUMBER, { variables: { partNumber: searchQuery }, skip: !searchQuery || searchMode !== 'vehicles', errorPolicy: 'all' }); const handleSearchModeChange = (mode: SearchMode) => { setSearchMode(mode); if (searchQuery) { router.push(`/search?q=${encodeURIComponent(searchQuery)}&mode=${mode}`, undefined, { shallow: true }); } }; const handleSearchSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!searchQuery.trim()) return; router.push(`/search?q=${encodeURIComponent(searchQuery.trim().toUpperCase())}&mode=${searchMode}`); }; const handlePartDetail = (detail: any) => { router.push(`/search-result?article=${encodeURIComponent(detail.formattedoem)}&brand=${encodeURIComponent(detail.manufacturer)}`); }; const handleVehicleSelect = (vehicle: LaximoVehicleSearchResult) => { const vehicleBrand = vehicle.brand || vehicle.name?.split(' ')[0] || 'UNKNOWN'; const url = `/search-result?article=${encodeURIComponent(searchQuery)}&brand=${encodeURIComponent(vehicleBrand)}`; router.push(url); }; const handleShowAllVehicles = (catalogCode?: string) => { const url = catalogCode ? `/vehicles-by-part?partNumber=${encodeURIComponent(searchQuery)}&catalogCode=${catalogCode}` : `/vehicles-by-part?partNumber=${encodeURIComponent(searchQuery)}`; router.push(url); }; const isLoading = (searchMode === 'parts' && partsLoading) || (searchMode === 'vehicles' && vehiclesLoading); const hasError = (searchMode === 'parts' && partsError) || (searchMode === 'vehicles' && vehiclesError); const partsResult: LaximoDocFindOEMResult | null = partsData?.laximoDocFindOEM || null; const vehiclesResult: LaximoVehiclesByPartResult | null = vehiclesData?.laximoFindVehiclesByPartNumber || null; const hasPartsResults = partsResult && partsResult.details && partsResult.details.length > 0; const hasVehiclesResults = vehiclesResult && vehiclesResult.totalVehicles > 0; const metaData = getMetaByPath('/search'); return ( <>
{/* Переключатель режима поиска */} {/* {searchQuery && (
)} */} {/* Обработка ошибок */} {searchQuery && hasError && (

Ошибка поиска

Произошла ошибка при поиске. Попробуйте еще раз.

)} {/* Загрузка */} {searchQuery && isLoading && (

Поиск по артикулу...

)} {/* Результаты поиска */} {searchQuery && !isLoading && !hasError && (
{/* Результаты поиска запчастей */} {searchMode === 'parts' && ( <> {!hasPartsResults && (

Детали не найдены

По артикулу {searchQuery} детали не найдены.

Попробуйте изменить запрос или проверьте правильность написания артикула.

)} {hasPartsResults && (

Поиск деталей по артикулу: {searchQuery}

Выберите нужную деталь

{partsResult!.details.map((detail, index) => (
))}
)} )} {/* Результаты поиска автомобилей */} {searchMode === 'vehicles' && (

Поиск автомобилей по артикулу: {searchQuery}

{hasVehiclesResults && ( Найдено {vehiclesResult!.totalVehicles} автомобилей в {vehiclesResult!.catalogs.length} каталогах )}
{hasVehiclesResults ? ( <>
{vehiclesResult!.catalogs.map((catalog) => ( { router.push(`/search-result?article=${encodeURIComponent(searchQuery)}&brand=${encodeURIComponent(catalog.brand)}`); }} > ))}
Бренд Артикул Наименование Рынок
{catalog.brand}
{searchQuery}
ГАЕЧНЫЙ КЛЮЧ
{catalog.catalogCode}
) : (

Автомобили не найдены

Автомобили с артикулом {searchQuery} не найдены в каталогах

)}
)}
)}
); }; export default SearchPage;