Добавлены отладочные логи в компонент WizardSearchForm для отслеживания обновлений и сброса параметров. Обновлена логика автовыбора параметров с учетом состояния загрузки. В компонент VinLeftbar добавлена загрузка единиц для категории при открытии. Улучшена обработка SSD при сбросе параметров.
This commit is contained in:
@ -26,6 +26,11 @@ const WizardSearchForm: React.FC<WizardSearchFormProps> = ({
|
||||
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<WizardSearchFormProps> = ({
|
||||
|
||||
// --- Автовыбор единственного варианта для всех шагов ---
|
||||
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<WizardSearchFormProps> = ({
|
||||
|
||||
// Сброс параметра
|
||||
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<WizardSearchFormProps> = ({
|
||||
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 {
|
||||
|
@ -64,6 +64,19 @@ const VinLeftbar: React.FC<VinLeftbarProps> = ({ 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
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user