import { Navigate, Outlet } from 'react-router-dom' | |
import React from 'react' | |
import { useSelector } from 'react-redux' | |
interface PrivateRouteProps { | |
role: number | |
redirectPath?: string | |
children?: React.ReactNode | |
} | |
const PrivateRoute = ({ | |
role, | |
redirectPath = '/login', | |
children | |
}: PrivateRouteProps) => { | |
const isLogin = useSelector((state: any) => state.user.isLogin) | |
const userRole = useSelector((state: any) => state.user.role) | |
if (!isLogin) { | |
return <Navigate to={redirectPath} replace /> | |
} | |
if (role && role >= userRole) { | |
return <Navigate to={redirectPath} replace /> | |
} | |
return children ? ( | |
<>{children}</> | |
) : ( | |
<Outlet /> | |
) | |
} | |
export default PrivateRoute |