import React, { useState, useEffect } from 'react'; import { useLazyQuery } from '@apollo/client'; import { SEARCH_LAXIMO_OEM } from '@/lib/graphql'; import { LaximoOEMResult, LaximoOEMCategory, LaximoOEMUnit, LaximoOEMDetail } from '@/types/laximo'; interface OEMSearchSectionProps { catalogCode: string; vehicleId: string; ssd: string; initialOEMNumber?: string; } interface OEMDetailCardProps { detail: LaximoOEMDetail; categoryName: string; unitName: string; } const OEMDetailCard: React.FC = ({ detail, categoryName, unitName }) => { return (

{detail.name}

OEM: {detail.oem}
{detail.brand && ( {detail.brand} )} {detail.amount && ( Кол-во: {detail.amount} )}
Категория:

{categoryName}

Узел:

{unitName}

{detail.range && (
Период применения:

{detail.range}

)} {detail.attributes && detail.attributes.length > 0 && (
Характеристики:
{detail.attributes.map((attr, index) => (
{attr.name || attr.key}: {attr.value}
))}
)}
); }; interface UnitSectionProps { unit: LaximoOEMUnit; categoryName: string; } const UnitSection: React.FC = ({ unit, categoryName }) => { return (
{unit.imageurl && ( {unit.name} { const target = e.target as HTMLImageElement; target.style.display = 'none'; }} /> )}

{unit.name}

{unit.code && (

Код: {unit.code}

)}
{unit.details.map((detail, index) => ( ))}
); }; const OEMSearchSection: React.FC = ({ catalogCode, vehicleId, ssd, initialOEMNumber }) => { const [oemNumber, setOemNumber] = useState(initialOEMNumber || ''); const [searchOEMNumber, setSearchOEMNumber] = useState(initialOEMNumber || ''); const [executeSearch, { data, loading, error }] = useLazyQuery(SEARCH_LAXIMO_OEM, { errorPolicy: 'all' }); const handleSearch = () => { if (oemNumber.trim()) { console.log('🔍 Начинаем поиск OEM:', { catalogCode, vehicleId, oemNumber: oemNumber.trim(), ssd: ssd ? `${ssd.substring(0, 30)}...` : 'отсутствует' }); setSearchOEMNumber(oemNumber.trim()); // Попробуем прямой fetch запрос для диагностики const testFetch = async () => { try { console.log('🚀 Выполняем прямой fetch запрос...'); const response = await fetch('http://localhost:3000/api/graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ query: ` query TestOEM($catalogCode: String!, $vehicleId: String!, $oemNumber: String!, $ssd: String!) { laximoOEMSearch(catalogCode: $catalogCode, vehicleId: $vehicleId, oemNumber: $oemNumber, ssd: $ssd) { oemNumber } } `, variables: { catalogCode, vehicleId, oemNumber: oemNumber.trim(), ssd } }) }); const result = await response.json(); console.log('✅ Прямой fetch результат:', result); if (result.errors) { console.error('❌ GraphQL ошибки:', result.errors); } } catch (err) { console.error('❌ Fetch ошибка:', err); } }; testFetch(); executeSearch({ variables: { catalogCode, vehicleId, oemNumber: oemNumber.trim(), ssd } }); } }; const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { handleSearch(); } }; // Автоматически выполняем поиск при наличии initialOEMNumber useEffect(() => { if (initialOEMNumber && initialOEMNumber.trim() && catalogCode && vehicleId && ssd) { const cleanOEM = initialOEMNumber.trim(); console.log('🔍 Автоматический поиск OEM при загрузке:', cleanOEM); setOemNumber(cleanOEM); handleSearch(); } }, [initialOEMNumber]); const searchResults: LaximoOEMResult | null = data?.laximoOEMSearch || null; return (
{/* Форма поиска */}

Поиск деталей по артикулу (OEM номеру)

{initialOEMNumber && (

🔍 Автоматический поиск по артикулу {initialOEMNumber} из результатов поиска автомобилей

)}
setOemNumber(e.target.value)} onKeyDown={handleKeyDown} placeholder="Введите OEM номер (например: 14G857507)" className="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />

Поиск покажет, где в указанном автомобиле используется данная деталь

{/* Результаты поиска */} {loading && searchOEMNumber && (

Поиск детали по номеру {searchOEMNumber}...

)} {error && (

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

Не удалось выполнить поиск по номеру "{searchOEMNumber}": {error.message}

{(() => { console.log('❌ GraphQL Error:', error); return null; })()}
)} {searchResults && (

Результаты поиска: {searchResults.oemNumber}

Найдено {searchResults.categories.length} категорий с { searchResults.categories.reduce((total, cat) => total + cat.units.length, 0) } узлами

{searchResults.categories.map((category) => (

📂 {category.name}

{category.units.map((unit) => ( ))}
))}
)} {searchOEMNumber && !loading && !searchResults && !error && (

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

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

)}
); }; export default OEMSearchSection;