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 30 | 1x 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;
|