import React, { useEffect } from 'react'; import { BrowserRouter as Router, Routes, Route, Navigate, useNavigate } from 'react-router-dom'; import { useSelector } from 'react-redux'; import Login from './features/auth/Login'; import ForgotPassword from './features/auth/ForgotPassword'; import AppLayout from './features/layouts/AppLayout'; import AdminDashboard from './features/dashboard/AdminDashboard'; import ClientDashboard from './features/dashboard/ClientDashboard'; import VendorDashboard from './features/dashboard/VendorDashboard'; import ProtectedRoute from './features/layouts/ProtectedRoute'; import { getDashboardPath } from './services/firestoreService'; import type { RootState } from './store/store'; /** * AppRoutes Component * Defines the main routing structure of the application. * Groups routes by Layout (Public vs App). * Implements role-based redirection after login. */ const AppRoutes: React.FC = () => { return ( {/* Public Routes */} } /> } /> {/* Authenticated Routes */} }> {/* Dashboard Redirect Logic - redirects to user's correct dashboard based on role */} } /> {/* Protected Dashboard Routes */} } /> } /> } /> } /> ); }; /** * RoleDashboardRedirect Component * Dynamically redirects users to their appropriate dashboard based on their role */ const RoleDashboardRedirect: React.FC = () => { const { isAuthenticated, user } = useSelector((state: RootState) => state.auth); const navigate = useNavigate(); useEffect(() => { if (!isAuthenticated) { navigate('/login', { replace: true }); return; } if (user?.userRole) { const dashboardPath = getDashboardPath(user.userRole); navigate(dashboardPath, { replace: true }); } }, [isAuthenticated, user?.userRole, navigate]); return null; }; export default AppRoutes;