From e989d402a38c01b1db2be8b507f7505acff786ad Mon Sep 17 00:00:00 2001 From: Bivekich Date: Sat, 5 Jul 2025 12:55:08 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BE=D1=82=D0=BB=D0=B0=D0=B4=D0=BE=D1=87=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=B8=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=20WizardSearchForm?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=82=D1=81=D0=BB=D0=B5=D0=B6?= =?UTF-8?q?=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BE=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B8=20=D1=81=D0=B1?= =?UTF-8?q?=D1=80=D0=BE=D1=81=D0=B0=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=B2.=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B0=D0=B2=D1=82=D0=BE=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=20=D1=81=20=D1=83=D1=87=D0=B5=D1=82=D0=BE=D0=BC=20=D1=81=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8=D1=8F=20=D0=B7=D0=B0=D0=B3?= =?UTF-8?q?=D1=80=D1=83=D0=B7=D0=BA=D0=B8.=20=D0=92=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=20VinLeftbar=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B0=20=D0=B5=D0=B4=D0=B8=D0=BD?= =?UTF-8?q?=D0=B8=D1=86=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=B3=D0=BE=D1=80=D0=B8=D0=B8=20=D0=BF=D1=80=D0=B8=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D1=80=D1=8B=D1=82=D0=B8=D0=B8.=20=D0=A3=D0=BB?= =?UTF-8?q?=D1=83=D1=87=D1=88=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20SSD=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D1=81=D0=B1=D1=80=D0=BE=D1=81=D0=B5=20=D0=BF=D0=B0=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/WizardSearchForm.tsx | 55 ++++++++++++++++++++++++++--- src/components/vin/VinLeftbar.tsx | 13 +++++++ 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/src/components/WizardSearchForm.tsx b/src/components/WizardSearchForm.tsx index 8c698ef..98baa9b 100644 --- a/src/components/WizardSearchForm.tsx +++ b/src/components/WizardSearchForm.tsx @@ -26,6 +26,11 @@ const WizardSearchForm: React.FC = ({ const [getWizard2] = useLazyQuery(GET_LAXIMO_WIZARD2, { onCompleted: (data) => { if (data.laximoWizard2) { + console.log('🔄 Wizard обновлен:', { + steps: data.laximoWizard2.length, + selectedParams: Object.keys(selectedParams).length, + currentSsd + }); setWizardSteps(data.laximoWizard2); setIsLoading(false); } @@ -76,18 +81,28 @@ const WizardSearchForm: React.FC = ({ // --- Автовыбор единственного варианта для всех шагов --- React.useEffect(() => { + // Предотвращаем автовыбор во время загрузки + if (isLoading) return; + wizardSteps.forEach(step => { const options = step.options || []; const selectedKey = selectedParams[step.conditionid]?.key || (step.determined ? options.find(o => o.value === step.value)?.key : ''); - if (options.length === 1 && selectedKey !== options[0].key) { + + // Автовыбираем только если есть единственный вариант и он еще не выбран + if (options.length === 1 && selectedKey !== options[0].key && !selectedParams[step.conditionid]) { handleParamSelect(step, options[0].key, options[0].value); } }); // eslint-disable-next-line - }, [wizardSteps, selectedParams]); + }, [wizardSteps, selectedParams, isLoading]); // Обработка выбора параметра const handleParamSelect = async (step: LaximoWizardStep, optionKey: string, optionValue: string) => { + // Проверяем, не выбран ли уже этот параметр + if (selectedParams[step.conditionid]?.key === optionKey) { + return; + } + setIsLoading(true); setError(''); @@ -118,6 +133,13 @@ const WizardSearchForm: React.FC = ({ // Сброс параметра const handleParamReset = async (step: LaximoWizardStep) => { + console.log('🔄 Сброс параметра:', { + stepName: step.name, + conditionId: step.conditionid, + currentSsd, + selectedParamsBefore: Object.keys(selectedParams) + }); + setIsLoading(true); setError(''); @@ -126,8 +148,33 @@ const WizardSearchForm: React.FC = ({ delete newSelectedParams[step.conditionid]; setSelectedParams(newSelectedParams); - // Используем SSD для сброса параметра, если он есть - const resetSsd = step.ssd || ''; + // Находим правильный SSD для сброса этого параметра + // Нужно найти SSD, который соответствует состоянию до выбора этого параметра + let resetSsd = ''; + + // Ищем среди шагов wizard тот, который имеет правильный SSD для восстановления + const currentStepIndex = wizardSteps.findIndex(s => s.conditionid === step.conditionid); + + // Если есть предыдущие шаги с выбранными параметрами, используем их SSD + for (let i = currentStepIndex - 1; i >= 0; i--) { + const prevStep = wizardSteps[i]; + if (newSelectedParams[prevStep.conditionid]) { + resetSsd = newSelectedParams[prevStep.conditionid].key; + break; + } + } + + // Если не нашли предыдущий SSD, используем step.ssd или пустую строку + if (!resetSsd) { + resetSsd = step.ssd || ''; + } + + console.log('🔄 Новый SSD для сброса:', { + resetSsd, + selectedParamsAfter: Object.keys(newSelectedParams), + stepSsd: step.ssd + }); + setCurrentSsd(resetSsd); try { diff --git a/src/components/vin/VinLeftbar.tsx b/src/components/vin/VinLeftbar.tsx index 182496b..5b6c0a3 100644 --- a/src/components/vin/VinLeftbar.tsx +++ b/src/components/vin/VinLeftbar.tsx @@ -64,6 +64,19 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o setOpenedPath(openedPath.slice(0, level)); } else { setOpenedPath([...openedPath.slice(0, level), categoryId]); + + // Загружаем units для категории, если они еще не загружены + if (activeTabProp === 'manufacturer' && !unitsByCategory[categoryId]) { + lastCategoryIdRef.current = categoryId; + getUnits({ + variables: { + catalogCode, + vehicleId, + ssd, + categoryId + } + }); + } } };