From e8a8f41d8166580cdd1be64fb277b3ca0fd9bf1f Mon Sep 17 00:00:00 2001 From: Kyle Gill Date: Wed, 3 Apr 2019 18:14:17 -0600 Subject: [PATCH] feat: protected routes --- src/App.js | 18 ++++++++++++++---- src/components/Icon/Icon.js | 13 ++++++++++++- src/components/Navbar/Navbar.js | 10 +++++++--- src/components/PrivateRoute/PrivateRoute.js | 21 +++++++++++++++++++++ src/components/PrivateRoute/index.js | 2 ++ 5 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 src/components/PrivateRoute/PrivateRoute.js create mode 100644 src/components/PrivateRoute/index.js diff --git a/src/App.js b/src/App.js index 9cc38cd..7d964c2 100644 --- a/src/App.js +++ b/src/App.js @@ -14,6 +14,7 @@ import Year from "./components/screens/Year" import User from "./components/screens/User" import Login from "./components/screens/Login" import Register from "./components/screens/Register" +import PrivateRoute from "./components/PrivateRoute" import { withAuthentication } from "./components/session" import { withFirebase } from "./components/firebase" @@ -63,7 +64,9 @@ class App extends Component { } render() { - const { selectedTheme } = this.state + const { selectedTheme, authUser } = this.state + const { authUser: propAuthUser } = this.props + const authed = !!propAuthUser || !!authUser const currentTheme = theme[selectedTheme] return ( @@ -71,13 +74,20 @@ class App extends Component { - - + - ( +const Icon = ({ name, tabindex, label, ...rest }) => ( + {label && ( + + {label} + + )} + {name === "ArrowRightCircle" && } + {name === "ArrowRight" && } {name === "Book" && } {name === "Calendar" && } {name === "ChevronLeft" && } {name === "ChevronRight" && } {name === "Circle" && } {name === "Edit2" && } + {name === "LogIn" && } {name === "Moon" && } {name === "Sun" && } {name === "User" && } diff --git a/src/components/Navbar/Navbar.js b/src/components/Navbar/Navbar.js index 2266cab..ad5a344 100644 --- a/src/components/Navbar/Navbar.js +++ b/src/components/Navbar/Navbar.js @@ -1,6 +1,8 @@ import React from "react" import { StyledLink as Link } from "../elements" import styled from "@emotion/styled" +/** @jsx jsx */ +import { jsx, css } from "@emotion/core" import { compose } from "recompose" import { withTheme } from "emotion-theming" @@ -82,9 +84,11 @@ const Navbar = ({ authUser, theme, toggleTheme }) => ( ) : ( - Landing - Login - Register + {/* Landing */} + + + + {/* Register */} )} diff --git a/src/components/PrivateRoute/PrivateRoute.js b/src/components/PrivateRoute/PrivateRoute.js new file mode 100644 index 0000000..b991987 --- /dev/null +++ b/src/components/PrivateRoute/PrivateRoute.js @@ -0,0 +1,21 @@ +import React, { Component } from "react" +import { Route, Redirect } from "react-router-dom" + +const PrivateRoute = ({ component: Component, authed, ...rest }) => { + return ( + + authed === true ? ( + + ) : ( + + ) + } + /> + ) +} + +export default PrivateRoute diff --git a/src/components/PrivateRoute/index.js b/src/components/PrivateRoute/index.js new file mode 100644 index 0000000..345d794 --- /dev/null +++ b/src/components/PrivateRoute/index.js @@ -0,0 +1,2 @@ +import PrivateRoute from "./PrivateRoute" +export default PrivateRoute