Redirection working
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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 };
|
||||||
|
|||||||
@@ -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);
|
||||||
Reference in New Issue
Block a user