// Packages import React, { ComponentType, Fragment } from 'react'; import { connect } from 'react-redux'; import { Route, Redirect } from 'react-router-dom'; // Project import { isLoggedSelector } from '../../selectors/session'; interface IProps { fetching: Boolean, isLogged: Boolean, path: string, component: ComponentType }; const ProtectedRoute = ({ fetching, isLogged, component: Component, ...rest }: Partial<IProps>): JSX.Element => { return ( <Fragment> {!fetching && ( isLogged ? <Route {...rest} render={props => <Component {...rest} {...props} />} /> : <Redirect to="/auth?mode=login" /> ) } </Fragment> ); } const mapStateToProps = state => ({ isLogged: isLoggedSelector(state), fetching: state.session.fetching, }); export default connect(mapStateToProps)(ProtectedRoute);