From ff2e9c8b82aac24543d017e5006c1de0614b4eba Mon Sep 17 00:00:00 2001 From: Kacper Donat Date: Sat, 3 Oct 2020 13:47:58 +0200 Subject: [PATCH] Add isLoggedIn middleware --- src/middleware.tsx | 15 +++++++++++++-- src/routing.tsx | 10 +++++----- src/state/reducer/user.ts | 3 +-- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/middleware.tsx b/src/middleware.tsx index 7d16ca3..1bb00b0 100644 --- a/src/middleware.tsx +++ b/src/middleware.tsx @@ -1,10 +1,11 @@ import { Middleware, route } from "@/routing"; import { useSelector } from "react-redux"; -import { isReady } from "@/state/reducer"; +import { AppState, isReady } from "@/state/reducer"; import { Redirect } from "react-router-dom"; import React from "react"; +import { UserState } from "@/state/reducer/user"; -export const isReadyMiddleware: Middleware = next => { +export const isReadyMiddleware: Middleware = next => isLoggedInMiddleware(() => { const ready = useSelector(isReady); if (ready) { @@ -12,4 +13,14 @@ export const isReadyMiddleware: Middleware = next => { } return ; +}) + +export const isLoggedInMiddleware: Middleware = next => { + const user = useSelector(state => state.user) as UserState; + + if (user.loggedIn) { + return next(); + } + + return ; } diff --git a/src/routing.tsx b/src/routing.tsx index f9ef81f..2a5eddd 100644 --- a/src/routing.tsx +++ b/src/routing.tsx @@ -7,7 +7,7 @@ import SubmitPlanPage from "@/pages/internship/plan"; import { UserLoginPage } from "@/pages/user/login"; import { RegisterEditionPage } from "@/pages/edition/register"; import PickEditionPage from "@/pages/edition/pick"; -import { isReadyMiddleware } from "@/middleware"; +import { isLoggedInMiddleware, isReadyMiddleware } from "@/middleware"; type Route = { name?: string; @@ -30,16 +30,16 @@ export function processMiddlewares(middleware: Middleware , middlewares: [ isReadyMiddleware ] }, + { name: "home", path: "/", exact: true, content: () => , middlewares: [ isLoggedInMiddleware ] }, // edition - { name: "edition_register", path: "/edition/register", exact: true, content: () => }, - { name: "edition_pick", path: "/edition/pick", exact: true, content: () => }, + { name: "edition_register", path: "/edition/register", exact: true, content: () => , middlewares: [ isLoggedInMiddleware ] }, + { name: "edition_pick", path: "/edition/pick", exact: true, content: () => , middlewares: [ isLoggedInMiddleware ] }, // internship { name: "internship_proposal", path: "/internship/proposal", exact: true, content: () => , middlewares: [ isReadyMiddleware ] }, { name: "internship_proposal_preview", path: "/internship/preview/proposal", exact: true, content: () => , middlewares: [ isReadyMiddleware ] }, - { name: "internship_plan", path: "/internship/plan", exact: true, content: () => }, + { name: "internship_plan", path: "/internship/plan", exact: true, content: () => , middlewares: [ isReadyMiddleware ] }, // user { name: "user_login", path: "/user/login", content: () => }, diff --git a/src/state/reducer/user.ts b/src/state/reducer/user.ts index ae868a6..1757986 100644 --- a/src/state/reducer/user.ts +++ b/src/state/reducer/user.ts @@ -1,4 +1,3 @@ -import { Reducer } from "react"; import { UserAction, UserActions } from "@/state/actions/user"; export type UserState = { @@ -10,7 +9,7 @@ const initialUserState: UserState = { loggedIn: false, } -const userReducer: Reducer = (state = initialUserState, action) => { +const userReducer = (state: UserState = initialUserState, action: UserAction): UserState => { switch (action.type) { case UserActions.Login: return {