Добавлены отладочные логи в компонент WizardSearchForm для отслеживания обновлений и сброса параметров. Обновлена логика автовыбора параметров с учетом состояния загрузки. В компонент VinLeftbar добавлена загрузка единиц для категории при открытии. Улучшена обработка SSD при сбросе параметров.
This commit is contained in:
@ -26,6 +26,11 @@ const WizardSearchForm: React.FC<WizardSearchFormProps> = ({
|
|||||||
const [getWizard2] = useLazyQuery(GET_LAXIMO_WIZARD2, {
|
const [getWizard2] = useLazyQuery(GET_LAXIMO_WIZARD2, {
|
||||||
onCompleted: (data) => {
|
onCompleted: (data) => {
|
||||||
if (data.laximoWizard2) {
|
if (data.laximoWizard2) {
|
||||||
|
console.log('🔄 Wizard обновлен:', {
|
||||||
|
steps: data.laximoWizard2.length,
|
||||||
|
selectedParams: Object.keys(selectedParams).length,
|
||||||
|
currentSsd
|
||||||
|
});
|
||||||
setWizardSteps(data.laximoWizard2);
|
setWizardSteps(data.laximoWizard2);
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
}
|
}
|
||||||
@ -76,18 +81,28 @@ const WizardSearchForm: React.FC<WizardSearchFormProps> = ({
|
|||||||
|
|
||||||
// --- Автовыбор единственного варианта для всех шагов ---
|
// --- Автовыбор единственного варианта для всех шагов ---
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
|
// Предотвращаем автовыбор во время загрузки
|
||||||
|
if (isLoading) return;
|
||||||
|
|
||||||
wizardSteps.forEach(step => {
|
wizardSteps.forEach(step => {
|
||||||
const options = step.options || [];
|
const options = step.options || [];
|
||||||
const selectedKey = selectedParams[step.conditionid]?.key || (step.determined ? options.find(o => o.value === step.value)?.key : '');
|
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);
|
handleParamSelect(step, options[0].key, options[0].value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
}, [wizardSteps, selectedParams]);
|
}, [wizardSteps, selectedParams, isLoading]);
|
||||||
|
|
||||||
// Обработка выбора параметра
|
// Обработка выбора параметра
|
||||||
const handleParamSelect = async (step: LaximoWizardStep, optionKey: string, optionValue: string) => {
|
const handleParamSelect = async (step: LaximoWizardStep, optionKey: string, optionValue: string) => {
|
||||||
|
// Проверяем, не выбран ли уже этот параметр
|
||||||
|
if (selectedParams[step.conditionid]?.key === optionKey) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
setError('');
|
setError('');
|
||||||
|
|
||||||
@ -118,6 +133,13 @@ const WizardSearchForm: React.FC<WizardSearchFormProps> = ({
|
|||||||
|
|
||||||
// Сброс параметра
|
// Сброс параметра
|
||||||
const handleParamReset = async (step: LaximoWizardStep) => {
|
const handleParamReset = async (step: LaximoWizardStep) => {
|
||||||
|
console.log('🔄 Сброс параметра:', {
|
||||||
|
stepName: step.name,
|
||||||
|
conditionId: step.conditionid,
|
||||||
|
currentSsd,
|
||||||
|
selectedParamsBefore: Object.keys(selectedParams)
|
||||||
|
});
|
||||||
|
|
||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
setError('');
|
setError('');
|
||||||
|
|
||||||
@ -126,8 +148,33 @@ const WizardSearchForm: React.FC<WizardSearchFormProps> = ({
|
|||||||
delete newSelectedParams[step.conditionid];
|
delete newSelectedParams[step.conditionid];
|
||||||
setSelectedParams(newSelectedParams);
|
setSelectedParams(newSelectedParams);
|
||||||
|
|
||||||
// Используем SSD для сброса параметра, если он есть
|
// Находим правильный SSD для сброса этого параметра
|
||||||
const resetSsd = step.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);
|
setCurrentSsd(resetSsd);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -64,6 +64,19 @@ const VinLeftbar: React.FC<VinLeftbarProps> = ({ vehicleInfo, onSearchResults, o
|
|||||||
setOpenedPath(openedPath.slice(0, level));
|
setOpenedPath(openedPath.slice(0, level));
|
||||||
} else {
|
} else {
|
||||||
setOpenedPath([...openedPath.slice(0, level), categoryId]);
|
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