diff --git a/frontend/src/components/domain/onboarding/UnifiedOnboardingWizard.tsx b/frontend/src/components/domain/onboarding/UnifiedOnboardingWizard.tsx index aadde9c3..93be1085 100644 --- a/frontend/src/components/domain/onboarding/UnifiedOnboardingWizard.tsx +++ b/frontend/src/components/domain/onboarding/UnifiedOnboardingWizard.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import React, { useState, useEffect, useMemo } from 'react'; import { useNavigate, useSearchParams } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { Button } from '../../ui/Button'; @@ -167,15 +167,24 @@ const OnboardingWizardContent: React.FC = () => { ]; // Filter visible steps based on wizard context - const getVisibleSteps = (): StepConfig[] => { - return ALL_STEPS.filter(step => { + // useMemo ensures VISIBLE_STEPS recalculates when wizard context state changes + // This fixes the bug where conditional steps (suppliers, ml-training) weren't showing + const VISIBLE_STEPS = useMemo(() => { + const visibleSteps = ALL_STEPS.filter(step => { if (!step.isConditional) return true; if (!step.condition) return true; return step.condition(wizardContext); }); - }; - const VISIBLE_STEPS = getVisibleSteps(); + console.log('🔄 VISIBLE_STEPS recalculated:', visibleSteps.map(s => s.id)); + console.log('📊 Wizard state:', { + stockEntryCompleted: wizardContext.state.stockEntryCompleted, + aiAnalysisComplete: wizardContext.state.aiAnalysisComplete, + categorizationCompleted: wizardContext.state.categorizationCompleted, + }); + + return visibleSteps; + }, [wizardContext.state, wizardContext.tenantId]); const isNewTenant = searchParams.get('new') === 'true'; const [currentStepIndex, setCurrentStepIndex] = useState(0); @@ -286,16 +295,6 @@ const OnboardingWizardContent: React.FC = () => { } }, [userProgress, isInitialized, currentStepIndex, isNewTenant, VISIBLE_STEPS]); - // Recalculate visible steps when wizard context changes - useEffect(() => { - const newVisibleSteps = getVisibleSteps(); - // If current step is no longer visible, move to next visible step - const currentStep = VISIBLE_STEPS[currentStepIndex]; - if (currentStep && !newVisibleSteps.find(s => s.id === currentStep.id)) { - setCurrentStepIndex(0); // Reset to first visible step - } - }, [wizardContext.state]); - const currentStep = VISIBLE_STEPS[currentStepIndex]; const handleStepComplete = async (data?: any) => {