import { useState, useEffect } from 'react';
import {
FileText,
LogOut,
ChevronLeft,
ChevronRight,
User,
RefreshCw,
} from 'lucide-react';
import { useDispatch, useSelector } from 'react-redux';
import { useNavigate, Routes, Route, useParams, useLocation } from 'react-router-dom';
import { RootState } from '@/store';
import { logout } from '@/store/slices/authSlice';
import { toast } from 'sonner';
import { API } from '@/api/API';
import { formatDateTime } from '@/components/ui/utils';
import { ProspectiveApplicationDetails } from '@/features/onboarding/pages/ProspectiveApplicationDetails';
export function ProspectiveDashboardPage() {
const dispatch = useDispatch();
const navigate = useNavigate();
const location = useLocation();
const { user } = useSelector((state: RootState) => state.auth);
const [collapsed, setCollapsed] = useState(false);
const [activeTab, setActiveTab] = useState('applicant');
const handleLogout = () => {
dispatch(logout());
toast.info('Logged out successfully');
navigate('/');
};
return (
{/* Sidebar */}
{!collapsed ? (
setCollapsed(true)}
className="p-1 hover:bg-slate-800 rounded transition-colors"
title="Collapse sidebar"
>
Applicant Portal
) : (
setCollapsed(false)}
className="p-1 hover:bg-slate-800 rounded transition-colors"
title="Expand sidebar"
>
)}
{
setActiveTab('applicant');
navigate('/prospective-dashboard');
}}
className={`w-full flex items-center gap-3 px-4 py-3 rounded-lg transition-colors ${activeTab === 'applicant' ? 'bg-re-red text-white hover:bg-re-red-hover' : 'text-slate-300 hover:bg-slate-800 hover:text-white'}`}
>
{!collapsed && My Applications }
{!collapsed && (
{user?.name?.charAt(0) || 'A'}
{user?.name || 'Applicant'}
{user?.role || 'Prospective'}
)}
{!collapsed && Logout }
{/* Main Content */}
{location.pathname.includes('/application/')
? 'Application details'
: 'Applicant management'}
{location.pathname.includes('/application/')
? 'Review and update statutory information and required documents for this application. Progress is coordinated by Royal Enfield after you submit.'
: 'Start or continue your dealership application, upload documents, and use links we email you (for example the questionnaire).'}
{user?.name || 'Applicant'}
{user?.role || 'User'}
window.location.reload()}>
} />
} />
);
}
function ProspectiveApplicationList() {
const navigate = useNavigate();
const { user } = useSelector((state: RootState) => state.auth);
const [applications, setApplications] = useState([]);
useEffect(() => {
if (user?.id) {
fetchApplications();
}
}, [user?.id]);
const fetchApplications = async () => {
try {
const response: any = await API.getApplications();
if (response.data?.success) {
setApplications(response.data.data);
}
} catch (error) {
console.error('Failed to fetch applications', error);
}
};
return (
My Applications
Track and manage your dealership applications
{applications.length === 0 ? (
No applications found
You haven't submitted any dealership applications yet.
) : (
{applications.map((app) => (
navigate(`/prospective-dashboard/application/${app.id}`)}
>
{app.applicationId}
{app.city}, {app.state}
Applied
{formatDateTime(app.createdAt)}
))}
)}
);
}
function ProspectiveApplicationDetailsWrapper() {
const { id } = useParams<{ id: string }>();
const navigate = useNavigate();
if (!id) return null;
return (
navigate('/prospective-dashboard')}
/>
);
}