From 73a5c7fae9ffbe9ada721148c8c454a643aceebe Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Sun, 20 Feb 2022 16:11:50 +0100 Subject: chore!: restructure repo I separated public files from the config/dev files. It improves repo readability. I also moved dotenv helper to public/inc directory and extract the Matomo tracker in the same directory. --- .../react-small-apps/apps/todos/src/store/index.js | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 public/projects/react-small-apps/apps/todos/src/store/index.js (limited to 'public/projects/react-small-apps/apps/todos/src/store/index.js') diff --git a/public/projects/react-small-apps/apps/todos/src/store/index.js b/public/projects/react-small-apps/apps/todos/src/store/index.js new file mode 100644 index 0000000..8d4fe43 --- /dev/null +++ b/public/projects/react-small-apps/apps/todos/src/store/index.js @@ -0,0 +1,56 @@ +import { configureStore } from "@reduxjs/toolkit"; +import { LocalStorage } from "../services/LocalStorage.service"; +import authReducer from "./auth/auth.slice"; +import todosReducer from "./todos/todos.slice"; +import usersReducer from "./users/users.slice"; + +const reducer = { + auth: authReducer, + todos: todosReducer, + users: usersReducer, +}; + +const todosMiddleware = (store) => (next) => (action) => { + const { type } = action; + const result = next(action); + + switch (type) { + case "auth/login": + const authState = store.getState().auth; + LocalStorage.set("todoUser", authState.currentUser); + break; + case "auth/logout": + LocalStorage.remove("todoUser"); + break; + case "todos/updateTodo": + const todosState = store.getState().todos; + LocalStorage.set("todoList", todosState); + break; + default: + break; + } + + return result; +}; + +const userFromLocalStorage = LocalStorage.get("todoUser"); +const preloadedAuth = userFromLocalStorage + ? { isAuthenticated: true, currentUser: userFromLocalStorage } + : undefined; + +const todosFromLocalStorage = LocalStorage.get("todoList"); +const preloadedTodos = todosFromLocalStorage + ? todosFromLocalStorage + : undefined; + +const preloadedState = { + auth: preloadedAuth, + todos: preloadedTodos, +}; + +export default configureStore({ + reducer, + middleware: (getDefaultMiddleware) => + getDefaultMiddleware().concat(todosMiddleware), + preloadedState, +}); -- cgit v1.2.3