import React, { useState } from 'react'; import { useLazyQuery } from '@apollo/client'; import { FIND_LAXIMO_VEHICLE, FIND_LAXIMO_VEHICLE_BY_PLATE_GLOBAL } from '@/lib/graphql'; import { LaximoCatalogInfo, LaximoWizardStep, LaximoVehicleSearchResult } from '@/types/laximo'; import VinSearchForm from './VinSearchForm'; import PlateSearchForm from './PlateSearchForm'; import PartSearchForm from './PartSearchForm'; import WizardSearchForm from './WizardSearchForm'; import VehicleSearchResults from './VehicleSearchResults'; interface VehicleSearchSectionProps { catalogInfo: LaximoCatalogInfo; searchType: 'vin' | 'wizard' | 'parts' | 'plate'; onSearchTypeChange: (type: 'vin' | 'wizard' | 'parts' | 'plate') => void; } const VehicleSearchSection: React.FC = ({ catalogInfo, searchType, onSearchTypeChange }) => { const [searchResults, setSearchResults] = useState([]); const [isSearching, setIsSearching] = useState(false); const [hasSearched, setHasSearched] = useState(false); // Query для поиска по VIN const [findVehicle] = useLazyQuery(FIND_LAXIMO_VEHICLE, { onCompleted: (data) => { setSearchResults(data.laximoFindVehicle || []); setIsSearching(false); setHasSearched(true); }, onError: (error) => { console.error('Ошибка поиска автомобиля:', error); setSearchResults([]); setIsSearching(false); setHasSearched(true); } }); // Query для поиска по госномеру const [findVehicleByPlate] = useLazyQuery(FIND_LAXIMO_VEHICLE_BY_PLATE_GLOBAL, { onCompleted: (data) => { setSearchResults(data.laximoFindVehicleByPlateGlobal || []); setIsSearching(false); setHasSearched(true); }, onError: (error) => { console.error('Ошибка поиска автомобиля по госномеру:', error); setSearchResults([]); setIsSearching(false); setHasSearched(true); } }); const handleVinSearch = async (vin: string) => { if (!vin.trim()) return; setIsSearching(true); setSearchResults([]); setHasSearched(false); await findVehicle({ variables: { catalogCode: '', // Пустой для глобального поиска vin: vin.trim() } }); }; const handlePlateSearch = async (plateNumber: string) => { if (!plateNumber.trim()) return; setIsSearching(true); setSearchResults([]); setHasSearched(false); await findVehicleByPlate({ variables: { plateNumber: plateNumber.trim() } }); }; const handleWizardVehicleFound = (vehicles: LaximoVehicleSearchResult[]) => { setSearchResults(vehicles); setIsSearching(false); setHasSearched(true); }; const handlePartsSearchStart = () => { setIsSearching(true); setSearchResults([]); setHasSearched(false); }; const handlePartsVehicleFound = (vehicles: LaximoVehicleSearchResult[]) => { console.log('🔍 Найдено автомобилей по артикулу:', vehicles.length); setSearchResults(vehicles); setIsSearching(false); setHasSearched(true); }; const searchTabs = [ { id: 'vin' as const, name: 'Поиск по VIN/Frame', description: 'Введите VIN или номер кузова автомобиля', enabled: catalogInfo.supportvinsearch, icon: ( ) }, { id: 'wizard' as const, name: 'Поиск автомобиля по параметрам', description: 'Выберите серию и тип кузова', enabled: catalogInfo.supportparameteridentification2, icon: ( ) }, { id: 'parts' as const, name: 'Поиск автомобилей по детали', description: 'Введите артикул (OEM)', enabled: catalogInfo.supportdetailapplicability, icon: ( ) }, { id: 'plate' as const, name: 'Поиск по государственному номеру', description: 'Введите государственный номер автомобиля', enabled: catalogInfo.supportplateidentification ?? true, icon: ( ) } ]; const availableTabs = searchTabs.filter(tab => tab.enabled); return (
{/* Tabs */}
{/* Tab Content */}
{searchType === 'vin' && (

Поиск по VIN/Frame

{catalogInfo.vinexample ? `Введите VIN или номер кузова автомобиля, например: ${catalogInfo.vinexample}` : 'Введите VIN или номер кузова автомобиля' }

)} {searchType === 'wizard' && (

Поиск автомобиля по параметрам

Выберите серию и тип кузова для поиска автомобиля

)} {searchType === 'parts' && (

Поиск автомобилей по детали

Введите артикул (OEM) для поиска применимых автомобилей

)} {searchType === 'plate' && (

Поиск по государственному номеру

Введите государственный номер автомобиля

)}
{/* Search Results */} {searchResults.length > 0 && ( )} {/* No Results */} {!isSearching && searchResults.length === 0 && !hasSearched && (

Выполните поиск, чтобы найти подходящий автомобиль для подбора запчастей

)} {/* Search completed but no results */} {!isSearching && searchResults.length === 0 && hasSearched && (

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

{searchType === 'vin' && 'По указанному VIN/Frame номеру не найдено автомобилей в данном каталоге.'} {searchType === 'parts' && 'По указанному артикулу не найдено применимых автомобилей в данном каталоге.'} {searchType === 'plate' && 'По указанному государственному номеру не найдено автомобилей в данном каталоге.'} {searchType === 'wizard' && 'По заданным параметрам не найдено автомобилей в данном каталоге.'}

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

)}
); }; export default VehicleSearchSection;