28 lines
664 B
TypeScript
28 lines
664 B
TypeScript
import React from 'react';
|
|
import { Route, Redirect, RouteProps } from 'react-router-dom';
|
|
import { useAuth } from '../contexts/AuthContext';
|
|
|
|
interface ProtectedRouteProps extends RouteProps {
|
|
component: React.ComponentType<any>;
|
|
}
|
|
|
|
const ProtectedRoute: React.FC<ProtectedRouteProps> = ({
|
|
component: Component,
|
|
...rest
|
|
}) => {
|
|
const { user, loading } = useAuth();
|
|
|
|
return (
|
|
<Route
|
|
{...rest}
|
|
render={(props) => {
|
|
if (loading) return null; // AuthProvider already handles spinner, but double safety
|
|
|
|
return user ? <Component {...props} /> : <Redirect to="/auth" />;
|
|
}}
|
|
/>
|
|
);
|
|
};
|
|
|
|
export default ProtectedRoute;
|