From dbec452dbeee1418eb2055af2e4cd76f27f854c5 Mon Sep 17 00:00:00 2001 From: morbalint Date: Sat, 23 Mar 2024 13:48:43 +0100 Subject: [PATCH] add redux and user slice --- frontend/package.json | 2 + frontend/src/App.tsx | 53 ++++++++++--------- .../first-edition/pages/CreateCharacter.tsx | 14 ++--- .../pages/CreateCharacter2E.tsx | 14 ++--- frontend/src/shared/Header.tsx | 15 +++--- .../src/shared/domain-models/userSlice.ts | 31 +++++++++++ frontend/src/store.ts | 15 ++++++ frontend/yarn.lock | 48 +++++++++++++++++ 8 files changed, 149 insertions(+), 43 deletions(-) create mode 100644 frontend/src/shared/domain-models/userSlice.ts create mode 100644 frontend/src/store.ts diff --git a/frontend/package.json b/frontend/package.json index a26c784..e02243c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -5,6 +5,7 @@ "dependencies": { "@grafana/faro-web-sdk": "^1.4.2", "@pdf-lib/fontkit": "^1.1.1", + "@reduxjs/toolkit": "^2.2.2", "@testing-library/jest-dom": "^6.4.2", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.5.1", @@ -23,6 +24,7 @@ "react": "^18.2.0", "react-bootstrap": "^2.10.2", "react-dom": "^18.2.0", + "react-redux": "^9.1.0", "react-router-dom": "^6.17.0", "react-scripts": "5.0.1", "rimraf": "^5.0.5", diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 8ab30db..d97ec91 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; -import './App.css'; +import * as React from "react"; +import "./App.css"; import {Faro} from "@grafana/faro-web-sdk"; import {createBrowserRouter, redirect, RouterProvider} from "react-router-dom"; import CreateCharacter from "./first-edition/pages/CreateCharacter"; @@ -7,16 +7,18 @@ import CharacterList from "./shared/pages/CharacterList"; import ErrorBoundary from "./shared/ErrorBoundary"; import Header from "./shared/Header"; import Footer from "./shared/Footer"; -import {useState} from "react"; -import {UserContext, userDefaults} from './shared/contexts/UserContext'; import CreateCharacter2E from "./second-edition/pages/CreateCharacter2E"; +import store, {AppDispatch, RootState} from './store' +import { Provider } from "react-redux" +import { useSelector, useDispatch } from 'react-redux' +import {load, setUser, unsetUser, userSelector} from './shared/domain-models/userSlice' -function App(props: {faro?: Faro}) { - - const [fetchedUser, setFetchedUser] = useState(userDefaults) +function Router(props: {faro?: Faro}) { + const dispatch = useDispatch.withTypes()() + const fetchedUser = useSelector.withTypes()(userSelector) if (fetchedUser.state === "not-started") { - setFetchedUser({...fetchedUser, state: "loading"}) + dispatch(load()) fetch(`${window.location.origin}/api/User/me`) .then(response => { if (response.ok) { @@ -26,23 +28,19 @@ function App(props: {faro?: Faro}) { }) .then(userNameResponse => { const userName = userNameResponse && userNameResponse.length > 0 ? userNameResponse : null; - setFetchedUser({ - data: userName, - state: "finished" - }); + dispatch(setUser(userName)) }) .catch(() => { - setFetchedUser({ - data: null, - state: "finished" - }) + dispatch(unsetUser()) }) } - + + + const router = createBrowserRouter([ { path: "/", - loader: () => fetchedUser.data == null ? redirect("/2e/karakter") : redirect("/karaktereim") + loader: () => fetchedUser.email == null ? redirect("/2e/karakter") : redirect("/karaktereim") }, { path: "/karaktereim", @@ -81,15 +79,22 @@ function App(props: {faro?: Faro}) { ErrorBoundary: ErrorBoundary, }, ]); - + return ( - +
+ +
+ ) +} + +function App(props: { faro?: Faro }) { + + return ( +
-
- -
+