import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useOrg } from '../contexts/OrgContext'; import { Card, Button } from '../components/UiKit'; import { FigmaProgress } from '../components/figma/FigmaProgress'; import { FigmaInput } from '../components/figma/FigmaInput'; import { FigmaAlert } from '../components/figma/FigmaAlert'; interface OnboardingData { // Step 1: Company Basics companyName: string; industry: string; size: string; description: string; // Step 2: Mission & Vision mission: string; vision: string; values: string[]; // Step 3: Company Evolution & History foundingYear: string; evolution: string; majorMilestones: string; // Step 4: Competitive Landscape advantages: string; vulnerabilities: string; competitors: string; marketPosition: string; // Step 5: Current Challenges & Goals currentChallenges: string[]; shortTermGoals: string; longTermGoals: string; keyMetrics: string; // Step 6: Team & Culture cultureDescription: string; workEnvironment: string; leadershipStyle: string; communicationStyle: string; // Step 7: Final Review additionalContext: string; } const Onboarding: React.FC = () => { const { org, upsertOrg, generateCompanyWiki } = useOrg(); const navigate = useNavigate(); useEffect(() => { if (org?.onboardingCompleted) { navigate('/reports', { replace: true }); } }, [org, navigate]); const [step, setStep] = useState(0); const [isGeneratingReport, setIsGeneratingReport] = useState(false); const [formData, setFormData] = useState({ companyName: org?.name || '', industry: '', size: '', description: '', mission: '', vision: '', values: [], foundingYear: '', evolution: '', majorMilestones: '', advantages: '', vulnerabilities: '', competitors: '', marketPosition: '', currentChallenges: [], shortTermGoals: '', longTermGoals: '', keyMetrics: '', cultureDescription: '', workEnvironment: '', leadershipStyle: '', communicationStyle: '', additionalContext: '' }); const steps = [ { title: 'Company Basics', description: 'Tell us about your company fundamentals' }, { title: 'Mission & Vision', description: 'Define your purpose and direction' }, { title: 'Evolution & History', description: 'Share your company\'s journey' }, { title: 'Competitive Position', description: 'Understand your market position' }, { title: 'Goals & Challenges', description: 'Current objectives and obstacles' }, { title: 'Team & Culture', description: 'Describe your work environment' }, { title: 'Final Review', description: 'Complete your company profile' } ]; const handleNext = async () => { // Prevent re-entry during generation if (isGeneratingReport) return; if (step < steps.length - 1) { setStep(prev => prev + 1); return; } // Final step: persist org & generate report setIsGeneratingReport(true); console.log('Starting onboarding completion...', { step }); try { const newOrgData = { name: formData.companyName, industry: formData.industry, size: formData.size, description: formData.description, mission: formData.mission, vision: formData.vision, values: formData.values.join(','), foundingYear: formData.foundingYear, evolution: formData.evolution, majorMilestones: formData.majorMilestones, advantages: formData.advantages, vulnerabilities: formData.vulnerabilities, competitors: formData.competitors, marketPosition: formData.marketPosition, currentChallenges: formData.currentChallenges.join(','), shortTermGoals: formData.shortTermGoals, longTermGoals: formData.longTermGoals, keyMetrics: formData.keyMetrics, cultureDescription: formData.cultureDescription, workEnvironment: formData.workEnvironment, leadershipStyle: formData.leadershipStyle, communicationStyle: formData.communicationStyle, additionalContext: formData.additionalContext, onboardingCompleted: true }; console.log('Saving org data...', newOrgData); await upsertOrg(newOrgData); console.log('Org data saved successfully'); console.log('Generating company wiki...'); await generateCompanyWiki({ ...newOrgData, orgId: org!.orgId }); console.log('Company wiki generated successfully'); // Small delay to ensure states are updated, then redirect console.log('Redirecting to reports...'); setTimeout(() => { console.log('Navigation executing...'); navigate('/reports', { replace: true }); console.log('Navigation called successfully'); }, 100); } catch (error) { console.error('Error completing onboarding:', error); // Show detailed error to user for debugging const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'; alert(`There was an error completing the setup: ${errorMessage}. Please check the console for more details and try again.`); } finally { setIsGeneratingReport(false); } }; const handleBack = () => { if (step > 0) setStep(step - 1); }; const addToArray = (field: 'values' | 'currentChallenges', value: string) => { if (value.trim()) { setFormData(prev => ({ ...prev, [field]: [...prev[field], value.trim()] })); } }; const removeFromArray = (field: 'values' | 'currentChallenges', index: number) => { setFormData(prev => ({ ...prev, [field]: prev[field].filter((_, i) => i !== index) })); }; const renderStep = () => { switch (step) { case 0: return (
setFormData(prev => ({ ...prev, companyName: e.target.value }))} className="w-full px-3 py-2 border border-[--border-color] rounded-lg bg-[--background-secondary] text-[--text-primary] focus:outline-none focus:ring-2 focus:ring-blue-500" placeholder="Enter your company name" />