From 98fc7a79cbd92ea97fd4d15d056e011b2455f820 Mon Sep 17 00:00:00 2001 From: 13XAVI Date: Fri, 21 Jun 2024 01:06:35 +0200 Subject: [PATCH] set Up redux --- .eslintrc.cjs | 1 + src/Redux/EcommerceReducer.ts | 23 +++++++++++++++++++++++ src/Redux/Hooks.ts | 5 +++++ src/Redux/index.ts | 8 ++++++++ src/Redux/store.ts | 11 +++++++++++ src/main.tsx | 10 +++++++--- 6 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 src/Redux/EcommerceReducer.ts create mode 100644 src/Redux/Hooks.ts create mode 100644 src/Redux/index.ts create mode 100644 src/Redux/store.ts diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 33762dcf..951e6f99 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -23,6 +23,7 @@ module.exports = { 'react/react-in-jsx-scope': 0, 'import/no-extraneous-dependencies': 0, 'import/extensions': 0, + 'no-param-reassign': 0, }, ignorePatterns: ['dist/**/*', 'postcss.config.js', 'tailwind.config.js'], }; diff --git a/src/Redux/EcommerceReducer.ts b/src/Redux/EcommerceReducer.ts new file mode 100644 index 00000000..5433728b --- /dev/null +++ b/src/Redux/EcommerceReducer.ts @@ -0,0 +1,23 @@ +import { createSlice } from '@reduxjs/toolkit'; + +interface IsLoggedIn { + value: boolean; +} + +const initialState: IsLoggedIn = { + value: false, +}; + +const ecommerceSlice = createSlice({ + name: 'IsLoggedIn', + initialState, + reducers: { + login: (state) => { + state.value = true; + }, + }, +}); + +export const { login } = ecommerceSlice.actions; + +export default ecommerceSlice.reducer; diff --git a/src/Redux/Hooks.ts b/src/Redux/Hooks.ts new file mode 100644 index 00000000..f5fa2263 --- /dev/null +++ b/src/Redux/Hooks.ts @@ -0,0 +1,5 @@ +import { useDispatch, useSelector, TypedUseSelectorHook } from 'react-redux'; +import type { RootState, AppDispatch } from './store'; + +export const useAppDispatch = () => useDispatch(); +export const useAppSelector: TypedUseSelectorHook = useSelector; diff --git a/src/Redux/index.ts b/src/Redux/index.ts new file mode 100644 index 00000000..298f0356 --- /dev/null +++ b/src/Redux/index.ts @@ -0,0 +1,8 @@ +import { combineReducers } from '@reduxjs/toolkit'; +import ecommerceReducer from './EcommerceReducer'; + +const rootReducer = combineReducers({ + ecommerce: ecommerceReducer, +}); + +export default rootReducer; diff --git a/src/Redux/store.ts b/src/Redux/store.ts new file mode 100644 index 00000000..49aad519 --- /dev/null +++ b/src/Redux/store.ts @@ -0,0 +1,11 @@ +import { configureStore } from '@reduxjs/toolkit'; +import rootReducer from './index'; + +const store = configureStore({ + reducer: rootReducer, +}); + +export type RootState = ReturnType; +export type AppDispatch = typeof store.dispatch; + +export default store; diff --git a/src/main.tsx b/src/main.tsx index 6a2dfd8b..023507d4 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,10 +1,14 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; +import { Provider } from 'react-redux'; +import store from './Redux/store'; import App from '@/App.tsx'; import '@/index.css'; ReactDOM.createRoot(document.getElementById('root')!).render( - - - + + + + + );