import { Navigate } from "react-router-dom"; import { useSelector } from "react-redux"; import PropTypes from "prop-types"; /** * ProtectedRoute is a higher-order component that wraps the `Route` component from `react-router-dom` * to create a protected route. It uses Redux to check if the user is authenticated. If the user is * authenticated, it renders the component passed to it; otherwise, it redirects the user to the login page. * * @param {Object} props - The props passed to the ProtectedRoute component. * @param {React.ComponentType} props.Component - The component to render if the user is authenticated. * @param {Object} rest - The remaining props passed to the Route component. * @returns {React.ReactElement} A Route component that conditionally renders the passed Component or redirects to the login page. */ const ProtectedRoute = ({ Component, ...rest }) => { const authState = useSelector((state) => state.auth); return authState.authToken ? ( ) : ( ); }; ProtectedRoute.propTypes = { Component: PropTypes.elementType.isRequired, }; export default ProtectedRoute;