From 4a3da4d5c5af238b2ea8f4db5804dcb32e27d04d Mon Sep 17 00:00:00 2001 From: Bivekich Date: Mon, 30 Jun 2025 00:39:55 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2=20=D0=B2=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=D0=B0=D1=85,=20?= =?UTF-8?q?=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20=D1=83=D1=87=D0=B8=D1=82=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D1=8C=20=D1=81=D0=BB=D1=83=D1=87=D0=B0=D0=B8?= =?UTF-8?q?,=20=D0=BA=D0=BE=D0=B3=D0=B4=D0=B0=20vehicleId=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B6=D0=B5=D1=82=20=D0=B1=D1=8B=D1=82=D1=8C=20undefined=20?= =?UTF-8?q?=D0=B8=D0=BB=D0=B8=20null.=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=B8=20=D0=B2=20=D1=81=D0=BB=D0=B5=D0=B4=D1=83?= =?UTF-8?q?=D1=8E=D1=89=D0=B8=D1=85=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=85:=20CatalogGroupsSection,=20Categ?= =?UTF-8?q?oriesSection,=20GroupDetailsSection,=20QuickGroupsSection,=20Un?= =?UTF-8?q?itDetailsSection,=20UnitsSection,=20KnotIn,=20VinCategory,=20Vi?= =?UTF-8?q?nLeftbar,=20VehicleDetailsPage=20=D0=B8=20PartDetailPage.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/CatalogGroupsSection.tsx | 2 +- src/components/CategoriesSection.tsx | 2 +- src/components/GroupDetailsSection.tsx | 6 +- src/components/QuickGroupsSection.tsx | 76 ++++++++++++++++--- src/components/UnitDetailsSection.tsx | 6 +- src/components/UnitsSection.tsx | 2 +- src/components/vin/KnotIn.tsx | 4 +- src/components/vin/VinCategory.tsx | 2 +- src/components/vin/VinLeftbar.tsx | 32 ++++++-- .../vehicle-search/[brand]/[vehicleId].tsx | 14 ++-- .../[brand]/[vehicleId]/part/[oemNumber].tsx | 4 +- 11 files changed, 114 insertions(+), 36 deletions(-) diff --git a/src/components/CatalogGroupsSection.tsx b/src/components/CatalogGroupsSection.tsx index b0551c2..45d3dfd 100644 --- a/src/components/CatalogGroupsSection.tsx +++ b/src/components/CatalogGroupsSection.tsx @@ -208,7 +208,7 @@ const CatalogGroupsSection: React.FC = ({ vehicleId, ...(ssd && ssd.trim() !== '' && { ssd }) }, - skip: !catalogCode || !vehicleId || catalogType !== 'quickGroups', + skip: !catalogCode || vehicleId === undefined || vehicleId === null || catalogType !== 'quickGroups', errorPolicy: 'all' } ); diff --git a/src/components/CategoriesSection.tsx b/src/components/CategoriesSection.tsx index ce1516d..2f96a59 100644 --- a/src/components/CategoriesSection.tsx +++ b/src/components/CategoriesSection.tsx @@ -33,7 +33,7 @@ const CategoriesSection: React.FC = ({ vehicleId, ...(ssd && ssd.trim() !== '' && { ssd }) }, - skip: !catalogCode || !vehicleId, + skip: !catalogCode || vehicleId === undefined || vehicleId === null, errorPolicy: 'all' } ); diff --git a/src/components/GroupDetailsSection.tsx b/src/components/GroupDetailsSection.tsx index 86f6d2b..70da51f 100644 --- a/src/components/GroupDetailsSection.tsx +++ b/src/components/GroupDetailsSection.tsx @@ -187,13 +187,13 @@ const GroupDetailsSection: React.FC = ({ const { data, loading, error } = useQuery<{ laximoQuickDetail: LaximoQuickDetail }>( GET_LAXIMO_QUICK_DETAIL, { - variables: { + variables: quickGroupId ? { catalogCode, vehicleId, quickGroupId, ssd - }, - skip: !catalogCode || !vehicleId || !quickGroupId || !ssd, + } : undefined, + skip: !catalogCode || vehicleId === undefined || vehicleId === null || !quickGroupId || !ssd || ssd.trim() === '', errorPolicy: 'all' } ); diff --git a/src/components/QuickGroupsSection.tsx b/src/components/QuickGroupsSection.tsx index abbbab6..85afa4b 100644 --- a/src/components/QuickGroupsSection.tsx +++ b/src/components/QuickGroupsSection.tsx @@ -154,13 +154,13 @@ const QuickDetailSection: React.FC = ({ const { data: quickDetailData, loading: quickDetailLoading, error: quickDetailError } = useQuery<{ laximoQuickDetail: LaximoQuickDetail }>( GET_LAXIMO_QUICK_DETAIL, { - variables: { + variables: selectedGroup?.quickgroupid ? { catalogCode, vehicleId, quickGroupId: selectedGroup.quickgroupid, ssd - }, - skip: !catalogCode || !vehicleId || !selectedGroup.quickgroupid || !ssd, + } : undefined, + skip: !catalogCode || vehicleId === undefined || vehicleId === null || !selectedGroup?.quickgroupid || !ssd || ssd.trim() === '', errorPolicy: 'all', fetchPolicy: 'cache-and-network' // Принудительно запрашиваем данные } @@ -169,11 +169,28 @@ const QuickDetailSection: React.FC = ({ const quickDetail = quickDetailData?.laximoQuickDetail; // Добавляем отладочную информацию - console.log('🔍 QuickDetailSection Debug:'); - console.log('📊 quickDetailData:', quickDetailData); - console.log('📋 quickDetail:', quickDetail); - console.log('🏗️ quickDetail.units:', quickDetail?.units); - console.log('⚙️ Variables:', { catalogCode, vehicleId, quickGroupId: selectedGroup.quickgroupid, ssd }); + console.log('🔍 QuickDetailSection Debug:', { + catalogCode, + vehicleId, + vehicleIdType: typeof vehicleId, + quickGroupId: selectedGroup?.quickgroupid, + quickGroupIdType: typeof selectedGroup?.quickgroupid, + ssd: ssd ? `${ssd.substring(0, 30)}...` : 'отсутствует', + ssdType: typeof ssd, + ssdLength: ssd?.length, + hasData: !!quickDetailData, + hasQuickDetail: !!quickDetail, + unitsCount: quickDetail?.units?.length || 0, + loading: quickDetailLoading, + error: quickDetailError?.message, + skipCondition: !catalogCode || vehicleId === undefined || vehicleId === null || !selectedGroup?.quickgroupid || !ssd, + skipDetails: { + noCatalogCode: !catalogCode, + noVehicleId: vehicleId === undefined || vehicleId === null, + noQuickGroupId: !selectedGroup?.quickgroupid, + noSsd: !ssd + } + }); // Если выбран узел для детального просмотра, показываем UnitDetailsSection if (selectedUnit) { @@ -213,6 +230,20 @@ const QuickDetailSection: React.FC = ({ } if (quickDetailError) { + console.error('🚨 QuickDetailSection Error Details:', { + message: quickDetailError.message, + graphQLErrors: quickDetailError.graphQLErrors, + networkError: quickDetailError.networkError, + extraInfo: quickDetailError.extraInfo, + selectedGroup: selectedGroup, + variables: selectedGroup?.quickgroupid ? { + catalogCode, + vehicleId, + quickGroupId: selectedGroup.quickgroupid, + ssd + } : 'undefined (no variables sent)' + }); + return (
@@ -231,6 +262,33 @@ const QuickDetailSection: React.FC = ({

Ошибка загрузки деталей

Не удалось загрузить детали для группы "{selectedGroup.name}"

Ошибка: {quickDetailError.message}

+ + {/* Отладочная информация */} +
+ + 🔧 Показать отладочную информацию + +
+
Catalog Code: {catalogCode}
+
Vehicle ID: {vehicleId} (type: {typeof vehicleId})
+
Quick Group ID: {selectedGroup?.quickgroupid} (type: {typeof selectedGroup?.quickgroupid})
+
SSD: {ssd ? `${ssd.substring(0, 100)}...` : 'отсутствует'} (length: {ssd?.length})
+
+ GraphQL Errors: +
+                  {JSON.stringify(quickDetailError.graphQLErrors, null, 2)}
+                
+
+ {quickDetailError.networkError && ( +
+ Network Error: +
+                    {JSON.stringify(quickDetailError.networkError, null, 2)}
+                  
+
+ )} +
+
); @@ -464,7 +522,7 @@ const QuickGroupsSection: React.FC = ({ vehicleId, ...(ssd && ssd.trim() !== '' && { ssd }) }, - skip: !catalogCode || !vehicleId, + skip: !catalogCode || vehicleId === undefined || vehicleId === null, errorPolicy: 'all' } ); diff --git a/src/components/UnitDetailsSection.tsx b/src/components/UnitDetailsSection.tsx index 6c3d14d..6054a4d 100644 --- a/src/components/UnitDetailsSection.tsx +++ b/src/components/UnitDetailsSection.tsx @@ -39,7 +39,7 @@ const UnitDetailsSection: React.FC = ({ unitId, ssd: ssd || '' }, - skip: !catalogCode || !vehicleId || !unitId, + skip: !catalogCode || vehicleId === undefined || vehicleId === null || !unitId, errorPolicy: 'all' } ); @@ -54,7 +54,7 @@ const UnitDetailsSection: React.FC = ({ unitId, ssd: ssd || '' }, - skip: !catalogCode || !vehicleId || !unitId, + skip: !catalogCode || vehicleId === undefined || vehicleId === null || !unitId, errorPolicy: 'all' } ); @@ -69,7 +69,7 @@ const UnitDetailsSection: React.FC = ({ unitId, ssd: ssd || '' }, - skip: !catalogCode || !vehicleId || !unitId, + skip: !catalogCode || vehicleId === undefined || vehicleId === null || !unitId, errorPolicy: 'all' } ); diff --git a/src/components/UnitsSection.tsx b/src/components/UnitsSection.tsx index 8c38199..3fbbc87 100644 --- a/src/components/UnitsSection.tsx +++ b/src/components/UnitsSection.tsx @@ -59,7 +59,7 @@ const UnitsSection: React.FC = ({ categoryId, ...(ssd && ssd.trim() !== '' && { ssd }) }, - skip: !catalogCode || !vehicleId || !categoryId, + skip: !catalogCode || vehicleId === undefined || vehicleId === null || !categoryId, errorPolicy: 'all', fetchPolicy: 'no-cache', // Полностью отключаем кэширование для гарантии свежих данных notifyOnNetworkStatusChange: true diff --git a/src/components/vin/KnotIn.tsx b/src/components/vin/KnotIn.tsx index dcf5d31..f7e1e5f 100644 --- a/src/components/vin/KnotIn.tsx +++ b/src/components/vin/KnotIn.tsx @@ -47,7 +47,7 @@ const KnotIn: React.FC = ({ catalogCode, vehicleId, ssd, unitId, un GET_LAXIMO_UNIT_INFO, { variables: { catalogCode, vehicleId, unitId, ssd: ssd || '' }, - skip: !catalogCode || !vehicleId || !unitId, + skip: !catalogCode || vehicleId === undefined || vehicleId === null || !unitId, errorPolicy: 'all', } ); @@ -56,7 +56,7 @@ const KnotIn: React.FC = ({ catalogCode, vehicleId, ssd, unitId, un GET_LAXIMO_UNIT_IMAGE_MAP, { variables: { catalogCode, vehicleId, unitId, ssd: ssd || '' }, - skip: !catalogCode || !vehicleId || !unitId, + skip: !catalogCode || vehicleId === undefined || vehicleId === null || !unitId, errorPolicy: 'all', } ); diff --git a/src/components/vin/VinCategory.tsx b/src/components/vin/VinCategory.tsx index 60d23b8..e5a4d87 100644 --- a/src/components/vin/VinCategory.tsx +++ b/src/components/vin/VinCategory.tsx @@ -12,7 +12,7 @@ interface VinCategoryProps { const VinCategory: React.FC = ({ catalogCode, vehicleId, ssd, onNodeSelect }) => { const { data: categoriesData, loading: categoriesLoading, error: categoriesError } = useQuery(GET_LAXIMO_CATEGORIES, { variables: { catalogCode, vehicleId, ssd }, - skip: !catalogCode || !vehicleId, + skip: !catalogCode || vehicleId === undefined || vehicleId === null, errorPolicy: "all", }); const categories = categoriesData?.laximoCategories || []; diff --git a/src/components/vin/VinLeftbar.tsx b/src/components/vin/VinLeftbar.tsx index 9880da4..4fadda7 100644 --- a/src/components/vin/VinLeftbar.tsx +++ b/src/components/vin/VinLeftbar.tsx @@ -25,7 +25,7 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o const { data: categoriesData, loading: categoriesLoading, error: categoriesError } = useQuery(GET_LAXIMO_CATEGORIES, { variables: { catalogCode, vehicleId, ssd }, - skip: !catalogCode || !vehicleId, + skip: !catalogCode || vehicleId === undefined || vehicleId === null, errorPolicy: 'all' }); const categories = categoriesData?.laximoCategories || []; @@ -88,7 +88,7 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o }, [searchResults, searchQuery, onSearchResults]); // --- Новый блок: вычисляем доступность поиска --- - const isSearchAvailable = !!catalogCode && !!vehicleId && !!ssd && ssd.trim() !== ''; + const isSearchAvailable = !!catalogCode && vehicleId !== undefined && vehicleId !== null && !!ssd && ssd.trim() !== ''; const showWarning = !isSearchAvailable; const showError = !!error && isSearchAvailable && searchQuery.trim(); const showNotFound = isSearchAvailable && searchQuery.trim() && !loading && data && searchResults && searchResults.details && searchResults.details.length === 0; @@ -98,7 +98,7 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o const [selectedQuickGroup, setSelectedQuickGroup] = useState(null); const { data: quickGroupsData, loading: quickGroupsLoading, error: quickGroupsError } = useQuery(GET_LAXIMO_QUICK_GROUPS, { variables: { catalogCode, vehicleId, ssd }, - skip: !catalogCode || !vehicleId || activeTab !== 'manufacturer', + skip: !catalogCode || vehicleId === undefined || vehicleId === null || activeTab !== 'manufacturer', errorPolicy: 'all' }); const quickGroups = quickGroupsData?.laximoQuickGroups || []; @@ -136,12 +136,30 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o const skipQuickDetail = !selectedQuickGroup || !catalogCode || - !vehicleId || - !selectedQuickGroup.quickgroupid || - !ssd; + vehicleId === undefined || + vehicleId === null || + !selectedQuickGroup?.quickgroupid || + !ssd || + ssd.trim() === ''; + + console.log('QuickDetail QUERY VARS', { + catalogCode, + vehicleId, + quickGroupId: selectedQuickGroup?.quickgroupid, + ssd: ssd ? `${ssd.substring(0, 30)}...` : 'отсутствует' + }); + + console.log('QuickDetail SKIP CONDITIONS', { + hasSelectedQuickGroup: !!selectedQuickGroup, + hasCatalogCode: !!catalogCode, + hasVehicleId: vehicleId !== undefined && vehicleId !== null, + hasQuickGroupId: !!selectedQuickGroup?.quickgroupid, + hasSsd: !!ssd && ssd.trim() !== '', + skipQuickDetail + }); const { data: quickDetailData, loading: quickDetailLoading, error: quickDetailError } = useQuery(GET_LAXIMO_QUICK_DETAIL, { - variables: selectedQuickGroup ? { + variables: selectedQuickGroup?.quickgroupid && !skipQuickDetail ? { catalogCode, vehicleId, quickGroupId: selectedQuickGroup.quickgroupid, diff --git a/src/pages/vehicle-search/[brand]/[vehicleId].tsx b/src/pages/vehicle-search/[brand]/[vehicleId].tsx index f3c311b..f1cea15 100644 --- a/src/pages/vehicle-search/[brand]/[vehicleId].tsx +++ b/src/pages/vehicle-search/[brand]/[vehicleId].tsx @@ -123,7 +123,7 @@ const VehicleDetailsPage = () => { ...(finalSsd && { ssd: finalSsd }), localized: true }, - skip: !brand || !vehicleId, + skip: !brand || vehicleId === undefined || vehicleId === null, errorPolicy: 'all' } ); @@ -194,8 +194,9 @@ const VehicleDetailsPage = () => { ); } - // Если vehicleId невалидный (например, '0'), показываем предупреждение и не рендерим поиск - if (!vehicleId || vehicleId === '0') { + // Если vehicleId отсутствует или пустой, показываем предупреждение + // Важно: vehicleId может быть '0' для некоторых автомобилей, найденных по VIN + if (!vehicleId || vehicleId === '') { return (
@@ -214,7 +215,8 @@ const VehicleDetailsPage = () => { // Гарантируем, что vehicleId — строка const vehicleIdStr = Array.isArray(vehicleId) ? (vehicleId[0] || '') : (vehicleId || ''); - const fallbackVehicleId = (vehicleIdStr !== '0' ? vehicleIdStr : ''); + // Для Laximo API vehicleId может быть '0' для автомобилей, найденных по VIN + const fallbackVehicleId = vehicleIdStr; let vehicleInfo = vehicleData?.laximoVehicleInfo || { vehicleid: fallbackVehicleId, @@ -225,8 +227,8 @@ const VehicleDetailsPage = () => { attributes: [] as never[] }; - // Если вдруг с сервера пришёл vehicleid: '0', подменяем на корректный - if (vehicleInfo.vehicleid === '0' && fallbackVehicleId) { + // Убеждаемся, что vehicleid соответствует параметру из URL + if (vehicleInfo.vehicleid !== fallbackVehicleId && fallbackVehicleId) { vehicleInfo = { ...vehicleInfo, vehicleid: fallbackVehicleId }; } diff --git a/src/pages/vehicle-search/[brand]/[vehicleId]/part/[oemNumber].tsx b/src/pages/vehicle-search/[brand]/[vehicleId]/part/[oemNumber].tsx index 97f84da..1d782d1 100644 --- a/src/pages/vehicle-search/[brand]/[vehicleId]/part/[oemNumber].tsx +++ b/src/pages/vehicle-search/[brand]/[vehicleId]/part/[oemNumber].tsx @@ -74,12 +74,12 @@ const PartDetailPage = () => { oemNumber: oemNumber, ssd: finalSsd }, - skip: !brand || !vehicleId || !oemNumber || !finalSsd, + skip: !brand || vehicleId === undefined || vehicleId === null || !oemNumber || !finalSsd, errorPolicy: 'all' } ); - if (!brand || !vehicleId || !oemNumber) { + if (!brand || vehicleId === undefined || vehicleId === null || !oemNumber) { return ( <>