Redirection working

This commit is contained in:
Federico Kereki
2018-07-25 22:24:16 -03:00
parent 9cf4a01c2c
commit ea98091c89
5 changed files with 50 additions and 20 deletions
+4 -16
View File
@@ -2,22 +2,11 @@
import React, { Component } from "react"; import React, { Component } from "react";
import { Provider } from "react-redux"; import { Provider } from "react-redux";
import { BrowserRouter, Switch, Route, Redirect } from "react-router-dom"; import { BrowserRouter, Switch, Route } from "react-router-dom";
import { ConnectedLogin } from "./routingApp"; import { ConnectedLogin, ConnectedProtectedRoutes } from "./routingApp";
import { store } from "./routingApp/store"; import { store } from "./routingApp/store";
/* eslint-disable */
class ProtectedRoutes extends React.Component {
render() {
return store.getState().token ? (
this.props.children
) : (
<Redirect to="/login" />
);
}
}
class App extends Component<{}> { class App extends Component<{}> {
render() { render() {
return ( return (
@@ -25,10 +14,9 @@ class App extends Component<{}> {
<BrowserRouter> <BrowserRouter>
<Switch> <Switch>
<Route path="/login" component={ConnectedLogin} /> <Route path="/login" component={ConnectedLogin} />
<ProtectedRoutes> <ConnectedProtectedRoutes>
<Route <Route
path="/" path="/"
exact
render={() => <div>HOME SWEET HOME</div>} render={() => <div>HOME SWEET HOME</div>}
/> />
<Route <Route
@@ -39,7 +27,7 @@ class App extends Component<{}> {
path="/BBB" path="/BBB"
render={() => <div>BBB</div>} render={() => <div>BBB</div>}
/> />
</ProtectedRoutes> </ConnectedProtectedRoutes>
<Route render={() => <div>404 ERROR!</div>} /> <Route render={() => <div>404 ERROR!</div>} />
</Switch> </Switch>
</BrowserRouter> </BrowserRouter>
+2 -1
View File
@@ -1,5 +1,6 @@
/* @flow */ /* @flow */
import { ConnectedLogin } from "./login.connected.js"; import { ConnectedLogin } from "./login.connected.js";
import { ConnectedProtectedRoutes } from "./protectedRoutes.connected.js";
export { ConnectedLogin }; export { ConnectedLogin, ConnectedProtectedRoutes };
+5 -3
View File
@@ -1,4 +1,4 @@
/* noaunflow */ /* @flow */
import React from "react"; import React from "react";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
@@ -11,7 +11,7 @@ export class Login extends React.PureComponent<{
onLogin: PropTypes.func.isRequired, onLogin: PropTypes.func.isRequired,
logging: PropTypes.bool.isRequired, logging: PropTypes.bool.isRequired,
token: PropTypes.string.isRequired, token: PropTypes.string.isRequired,
routeAfter: PropTypes.string.isRequired location: PropTypes.object
}; };
state = { state = {
@@ -32,7 +32,9 @@ export class Login extends React.PureComponent<{
this.state.password && this.state.password &&
this.props.token this.props.token
) { ) {
return <Redirect to={this.props.routeAfter} />; return (
<Redirect to={this.props.location.state.from.pathname} />
);
} else { } else {
return ( return (
<div> <div>
@@ -0,0 +1,30 @@
/* @flow */
import React from "react";
import { Redirect } from "react-router-dom";
import PropTypes from "prop-types";
export class ProtectedRoutes extends React.Component<{
token: string,
children: [{}],
location: object
}> {
static propTypes = {
token: PropTypes.string.isRequired,
children: PropTypes.arrayOf(PropTypes.object).isRequired,
location: PropTypes.object
};
render() {
return this.props.token ? (
this.props.children
) : (
<Redirect
to={{
pathname: "/login",
state: { from: this.props.location }
}}
/>
);
}
}
@@ -0,0 +1,9 @@
/* @flow */
import { connect } from "react-redux";
import { ProtectedRoutes } from "./protectedRoutes.component";
export const ConnectedProtectedRoutes = connect(state => ({
token: state.token
}))(ProtectedRoutes);