You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
773 B
30 lines
773 B
import PropTypes from "prop-types"; |
|
import React from "react"; |
|
import { connect } from "react-redux"; |
|
import { Redirect, Route } from "react-router-dom"; |
|
|
|
const propTypes = { |
|
path: PropTypes.string.isRequired, |
|
userToken: PropTypes.string.isRequired, |
|
component: PropTypes.oneOfType([PropTypes.element, PropTypes.func]).isRequired |
|
}; |
|
|
|
const PrivateRoute = ({ userToken, component, ...rest }) => { |
|
return ( |
|
<Route |
|
{...rest} |
|
render={props => { |
|
if (!!userToken) return React.createElement(component, props); |
|
return <Redirect to="/auth/login" />; |
|
}} |
|
/> |
|
); |
|
}; |
|
|
|
PrivateRoute.propTypes = propTypes; |
|
|
|
const mapStateToProps = state => ({ |
|
userToken: state.auth.userToken |
|
}); |
|
|
|
export default connect(mapStateToProps)(PrivateRoute);
|
|
|