import React, { useState } from 'react'; import { useQuery } from '@apollo/client'; import { GET_LAXIMO_CATALOG_INFO, GET_LAXIMO_QUICK_GROUPS_WITH_XML } from '@/lib/graphql'; import { LaximoCatalogInfo, LaximoQuickGroup } from '@/types/laximo'; interface LaximoDiagnosticProps { catalogCode: string; vehicleId: string; ssd?: string; } const LaximoDiagnostic: React.FC = ({ catalogCode, vehicleId, ssd }) => { const [expanded, setExpanded] = useState(false); const [showRawData, setShowRawData] = useState(false); const [showRawXML, setShowRawXML] = useState(false); const [copySuccess, setCopySuccess] = useState(null); const handleCopyToClipboard = async (content: string, type: string) => { try { await navigator.clipboard.writeText(content); setCopySuccess(`${type} скопирован в буфер обмена!`); setTimeout(() => setCopySuccess(null), 3000); } catch (err) { console.error('Ошибка копирования в буфер обмена:', err); setCopySuccess(`Ошибка копирования ${type}`); setTimeout(() => setCopySuccess(null), 3000); } }; // Получаем информацию о каталоге const { data: catalogData, loading: catalogLoading, error: catalogError } = useQuery<{ laximoCatalogInfo: LaximoCatalogInfo }>( GET_LAXIMO_CATALOG_INFO, { variables: { catalogCode }, errorPolicy: 'all' } ); // Получаем группы быстрого поиска с RAW XML const { data: quickGroupsData, loading: quickGroupsLoading, error: quickGroupsError } = useQuery<{ laximoQuickGroupsWithXML: { groups: LaximoQuickGroup[], rawXML: string } }>( GET_LAXIMO_QUICK_GROUPS_WITH_XML, { variables: { catalogCode, vehicleId, ...(ssd && ssd.trim() !== '' && { ssd }) }, skip: !expanded, errorPolicy: 'all' } ); const catalogInfo = catalogData?.laximoCatalogInfo; const quickGroups = quickGroupsData?.laximoQuickGroupsWithXML?.groups || []; const rawXML = quickGroupsData?.laximoQuickGroupsWithXML?.rawXML || ''; if (!expanded) { return (
); } return (

🔧 Диагностика Laximo

{/* Уведомление о копировании */} {copySuccess && (
{copySuccess}
)}
{/* Информация о каталоге */}

📋 Информация о каталоге

{catalogLoading && (
Загрузка информации о каталоге...
)} {catalogError && (
Ошибка загрузки каталога: {catalogError.message}
)} {catalogInfo && (
Код: {catalogInfo.code}
Название: {catalogInfo.name}
Бренд: {catalogInfo.brand}
QuickGroups: {catalogInfo.supportquickgroups ? 'Поддерживается' : 'Не поддерживается'}
{/* Поддерживаемые функции */}
Поддерживаемые функции:
{catalogInfo.features.map((feature, index) => ( {feature.name} {feature.example && ( ({feature.example}) )} ))}
)}
{/* Параметры запроса */}

🔗 Параметры запроса

Каталог: {catalogCode}
ID автомобиля: {vehicleId}
SSD: {ssd && ssd.trim() !== '' ? `Доступен (${ssd.length} символов)` : 'Отсутствует' }
{ssd && ssd.trim() !== '' && (
SSD (первые 100 символов):
{ssd.substring(0, 100)}...
)}
{/* Результат запроса групп быстрого поиска */}

⚡ Группы быстрого поиска

{quickGroups.length > 0 && (
{(showRawData || showRawXML) && ( <> )}
)}
{quickGroupsLoading && (
Загрузка групп быстрого поиска...
🌐 Выполняется SOAP запрос к Laximo API...
📝 Команда: ListQuickGroup:Locale=ru_RU|Catalog={catalogCode}|VehicleId={vehicleId}|ssd=...
🔗 URL: https://ws.laximo.ru/ec.Kito.WebCatalog/services/Catalog.CatalogHttpSoap11Endpoint/
⏱️ Ожидание ответа от сервера...
)} {quickGroupsError && (
Ошибка загрузки групп: {quickGroupsError.message}
❌ SOAP запрос завершился с ошибкой
🔍 Проверьте консоль браузера для детальной информации
💡 Убедитесь, что SSD корректен и каталог поддерживает quickgroups
)} {quickGroups.length > 0 ? (
Всего групп верхнего уровня: {quickGroups.length}
{showRawXML ? ( /* RAW XML ответ от Laximo */
📄 RAW XML ответ от Laximo SOAP API (оригинальный):
                      {rawXML || 'XML данные недоступны'}
                    
{/* Информация о XML */}
📋 Информация о XML:
• Длина XML: {rawXML.length} символов
• Кодировка: UTF-8
• Формат: SOAP XML Response
• API: Laximo WebCatalog
• Команда: ListQuickGroup:Locale=ru_RU|Catalog=...|VehicleId=...|ssd=...
) : showRawData ? ( /* RAW JSON данные от Laximo */
🔍 Обработанные JSON данные от Laximo API (ListQuickGroup):
                      {JSON.stringify(quickGroups, null, 2)}
                    
{/* Дополнительная информация о структуре */}
📊 Анализ структуры данных:
• Общее количество групп: {quickGroups.length}
• Групп с поддержкой деталей (link=true): {quickGroups.filter(g => g.link).length}
• Групп с дочерними элементами: {quickGroups.filter(g => g.children && g.children.length > 0).length}
• Общее количество всех групп (включая дочерние): { quickGroups.reduce((total, group) => { const countChildren = (g: LaximoQuickGroup): number => { let count = 1; if (g.children) { count += g.children.reduce((childTotal, child) => childTotal + countChildren(child), 0); } return count; }; return total + countChildren(group); }, 0) }
{/* Backend Debug Info */}
🔧 Backend Debug Info:
💡 Для полной отладки откройте консоль сервера (backend)
📥 В консоли сервера будет виден полный RAW XML ответ от Laximo SOAP API
🌐 SOAP URL: https://ws.laximo.ru/ec.Kito.WebCatalog/services/Catalog.CatalogHttpSoap11Endpoint/
📝 Команда: ListQuickGroup:Locale=ru_RU|Catalog={catalogCode}|VehicleId={vehicleId}|ssd=...
🔐 Login используется из переменной окружения LAXIMO_LOGIN
🎯 SOAPAction: "urn:QueryDataLogin"
📦 Content-Type: text/xml; charset=utf-8
) : ( /* Табличное представление */
{quickGroups.map((group, index) => ( ))}
ID Название Link Дочерние Code Image
{group.quickgroupid} {group.name} {group.link ? 'true' : 'false'} {group.children?.length || 0} {group.code || '-'} {group.imageurl ? ( ) : ( - )}
)}
) : ( !quickGroupsLoading && !quickGroupsError && (
Группы быстрого поиска не найдены
) )}
{/* Рекомендации */}

💡 Рекомендации

{catalogInfo?.supportquickgroups ? (
✅ Каталог поддерживает группы быстрого поиска
) : (
⚠️ Каталог не поддерживает группы быстрого поиска - используйте категории
)} {ssd && ssd.trim() !== '' ? (
✅ SSD доступен - все функции активны
) : (
⚠️ SSD отсутствует - некоторые функции могут быть недоступны
)} {quickGroups.length > 0 ? (
✅ Группы быстрого поиска загружены успешно
) : ( quickGroupsError ? (
❌ Ошибка загрузки групп быстрого поиска
) : (
ℹ️ Группы быстрого поиска пусты или еще загружаются
) )}
); }; export default LaximoDiagnostic;