import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { apiCall } from '../utils/api'; import { useToast } from '../contexts/ToastContext'; import { LoadingSpinner } from './LoadingSpinner'; interface OnboardingData { requestedRole: 'coordinator' | 'driver' | 'viewer'; phone: string; organization: string; reason: string; // Driver-specific fields vehicleType?: string; vehicleCapacity?: number; licensePlate?: string; } const UserOnboarding: React.FC = () => { const navigate = useNavigate(); const { showToast } = useToast(); const [loading, setLoading] = useState(false); const [formData, setFormData] = useState({ requestedRole: 'viewer', phone: '', organization: '', reason: '', }); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); try { const token = localStorage.getItem('authToken'); const response = await apiCall('/api/users/complete-onboarding', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ onboardingData: formData, phone: formData.phone, organization: formData.organization, }), }); if (response.ok) { showToast('Onboarding completed! Your account is pending approval.', 'success'); navigate('/pending-approval'); } else { showToast('Failed to complete onboarding. Please try again.', 'error'); } } catch (error) { showToast('An error occurred. Please try again.', 'error'); } finally { setLoading(false); } }; const handleRoleChange = (role: 'coordinator' | 'driver' | 'viewer') => { setFormData(prev => ({ ...prev, requestedRole: role, // Clear driver fields if not driver vehicleType: role === 'driver' ? prev.vehicleType : undefined, vehicleCapacity: role === 'driver' ? prev.vehicleCapacity : undefined, licensePlate: role === 'driver' ? prev.licensePlate : undefined, })); }; return (

Welcome to VIP Coordinator

Please complete your profile to request access

{/* Role Selection */}
{/* Common Fields */}
setFormData(prev => ({ ...prev, phone: e.target.value }))} className="form-input w-full" placeholder="+1 (555) 123-4567" />
setFormData(prev => ({ ...prev, organization: e.target.value }))} className="form-input w-full" placeholder="Your company or department" />
{/* Driver-specific Fields */} {formData.requestedRole === 'driver' && (

Driver Information

setFormData(prev => ({ ...prev, vehicleCapacity: parseInt(e.target.value) }))} className="form-input w-full" placeholder="4" />
setFormData(prev => ({ ...prev, licensePlate: e.target.value }))} className="form-input w-full" placeholder="ABC-1234" />
)} {/* Reason for Access */}