All files / src/common/components ProtectedRoute.tsx

76.47% Statements 13/17
33.33% Branches 1/3
100% Functions 1/1
76.47% Lines 13/17

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 301x 1x               1x 7x 7x 7x 7x 7x   7x       7x         7x 7x   1x  
import { Navigate, useLocation } from 'react-router-dom';
import { useAuth } from '../contexts/AuthContext';
import { ReactNode } from 'react';
 
interface ProtectedRouteProps {
  children: ReactNode;
  redirectTo?: string;
}
 
export const ProtectedRoute = ({ 
  children, 
  redirectTo = '/login' 
}: ProtectedRouteProps) => {
  const { user, loading } = useAuth();
  const location = useLocation();
 
  if (loading) {
    return <div>Loading...</div>; // Or a loading spinner
  }
 
  if (!user) {
    // Redirect to login, but save the current location they were trying to go to
    return <Navigate to={redirectTo} state={{ from: location }} replace />;
  }
 
  return <>{children}</>;
};
 
export default ProtectedRoute;