import React, { useState } from 'react'; import { useQuery, useApolloClient } from '@apollo/client'; import { GET_LAXIMO_UNITS } from '@/lib/graphql/laximo'; import { useRouter } from 'next/router'; import UnitDetailsSection from './UnitDetailsSection'; interface UnitsSectionProps { catalogCode: string; vehicleId: string; ssd?: string; categoryId: string; categoryName: string; onBack: () => void; } interface LaximoUnit { quickgroupid: string; // unitid в API name: string; link: boolean; code?: string; imageurl?: string; largeimageurl?: string; } const UnitsSection: React.FC = ({ catalogCode, vehicleId, ssd, categoryId, categoryName, onBack }) => { const router = useRouter(); const apolloClient = useApolloClient(); const [selectedUnit, setSelectedUnit] = useState<{ unitId: string; unitName: string } | null>(null); // Функция для правильного формирования URL изображения const getImageUrl = (baseUrl: string, size: string = '250') => { if (!baseUrl) return ''; // Декодируем HTML-сущности и заменяем размер const decodedUrl = baseUrl .replace(/&/g, '&') .replace(/</g, '<') .replace(/>/g, '>') .replace(/"/g, '"') .replace('%size%', size); return decodedUrl; }; // Получаем список узлов для выбранной категории const { data: unitsData, loading: unitsLoading, error: unitsError } = useQuery<{ laximoUnits: LaximoUnit[] }>( GET_LAXIMO_UNITS, { variables: { catalogCode, vehicleId, categoryId, ...(ssd && ssd.trim() !== '' && { ssd }) }, skip: !catalogCode || vehicleId === undefined || vehicleId === null || !categoryId, errorPolicy: 'all', fetchPolicy: 'no-cache', // Полностью отключаем кэширование для гарантии свежих данных notifyOnNetworkStatusChange: true } ); const handleUnitSelect = (unitId: string, unitName: string) => { console.log('Выбран узел:', { unitId, unitName }); setSelectedUnit({ unitId, unitName }); }; const handleBackToUnits = () => { setSelectedUnit(null); }; const handleClearCache = async () => { console.log('🧹 Очищаем кэш Apollo Client...'); try { await apolloClient.clearStore(); console.log('✅ Кэш очищен успешно'); // Принудительный refetch данных window.location.reload(); } catch (error) { console.error('❌ Ошибка очистки кэша:', error); } }; // Если выбран узел, показываем детали узла if (selectedUnit) { return ( ); } if (unitsLoading) { return (

{categoryName}

Загружаем узлы категории...

); } if (unitsError) { console.error('Ошибка загрузки узлов:', unitsError); return (

{categoryName}

Ошибка загрузки узлов

Не удалось загрузить узлы категории

{unitsError.message}

); } const units = unitsData?.laximoUnits || []; // Отладочная информация console.log('🔍 UnitsSection: RAW данные от Apollo:', unitsData); console.log('🔍 UnitsSection: полученные данные узлов:', { categoryId, categoryName, unitsCount: units.length, units: units.map(unit => ({ id: unit.quickgroupid, name: unit.name, code: unit.code, hasImageUrl: !!unit.imageurl, imageUrl: unit.imageurl || 'отсутствует' })) }); // Дополнительная отладка первого узла if (units.length > 0) { console.log('🔍 Первый узел (полные данные):', units[0]); console.log('🔍 Все поля первого узла:', Object.keys(units[0])); } return (

{categoryName}

{/* Кнопка отладки - очистка кэша */}
{units.length === 0 ? (

Узлы не найдены

В данной категории узлы недоступны

) : ( <>

Найдено узлов: {units.length}. Выберите узел для просмотра деталей.

{units.map((unit) => ( ))}

Готово к использованию

Нажмите на любой узел, чтобы просмотреть его детали с изображениями и схемами. Функция полностью реализована согласно API Laximo.

)}
); }; export default UnitsSection;