From 477d311213445f00d1237b413c5eed695ae0e22c Mon Sep 17 00:00:00 2001 From: BunyodL Date: Sun, 20 Apr 2025 17:25:29 +0500 Subject: [PATCH] chores: config redux --- src/app/layout.tsx | 11 ++--------- src/shared/api/base-api.ts | 21 +++++++++++++++++++++ src/shared/providers/providers.tsx | 23 +++++++++++++++++++++++ src/shared/store/index.ts | 19 +++++++++++++++++++ src/shared/store/root-reducer.ts | 6 ++++++ 5 files changed, 71 insertions(+), 9 deletions(-) create mode 100644 src/shared/api/base-api.ts create mode 100644 src/shared/providers/providers.tsx create mode 100644 src/shared/store/index.ts create mode 100644 src/shared/store/root-reducer.ts diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 0a17b2b..9904b44 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,7 +1,7 @@ import type { Metadata } from 'next'; import { Geist, Geist_Mono } from 'next/font/google'; -import { ThemeProvider } from '@/shared/theme/theme-provider'; +import { Providers } from '@/shared/providers/providers'; import './globals.css'; @@ -30,14 +30,7 @@ export default function RootLayout({ - - {children} - + {children} ); diff --git a/src/shared/api/base-api.ts b/src/shared/api/base-api.ts new file mode 100644 index 0000000..5ecaa52 --- /dev/null +++ b/src/shared/api/base-api.ts @@ -0,0 +1,21 @@ +import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'; + +const baseQuery = fetchBaseQuery({ + baseUrl: process.env.NEXT_PUBLIC_API_URL, +}); + +export const TAGS = { + STOCKS: 'stocks', + GAS_STATIONS: 'gas-stations', + VACANCIES: 'vacancies', + PARTNERS: 'partners', + CERTIFICATES: 'certificates', + CHARITY: 'charity', +} as const; + +export const baseAPI = createApi({ + reducerPath: 'baseAPI', + baseQuery, + tagTypes: Object.values(TAGS), + endpoints: () => ({}), +}); diff --git a/src/shared/providers/providers.tsx b/src/shared/providers/providers.tsx new file mode 100644 index 0000000..bb40883 --- /dev/null +++ b/src/shared/providers/providers.tsx @@ -0,0 +1,23 @@ +import { Provider } from 'react-redux'; + +import { store } from '../store'; +import { ThemeProvider } from '../theme/theme-provider'; + +type ProvidersProps = { + children: React.ReactNode; +}; + +export const Providers = ({ children }: ProvidersProps) => { + return ( + + + {children} + + + ); +}; diff --git a/src/shared/store/index.ts b/src/shared/store/index.ts new file mode 100644 index 0000000..2411feb --- /dev/null +++ b/src/shared/store/index.ts @@ -0,0 +1,19 @@ +import { configureStore } from '@reduxjs/toolkit'; +import { setupListeners } from '@reduxjs/toolkit/query/react'; +import { baseAPI } from '@/shared/api/base-api'; + +import { rootReducer } from './root-reducer'; + +export const store = configureStore({ + reducer: rootReducer, + middleware: (getDefaultMiddleware) => + getDefaultMiddleware().concat(baseAPI.middleware), + devTools: process.env.NODE_ENV === 'development', +}); + +setupListeners(store.dispatch); + +// Infer the `RootState` and `AppDispatch` types from the store itself +export type RootState = ReturnType; +// Inferred type: {posts: PostsState, comments: CommentsState, users: UsersState} +export type AppDispatch = typeof store.dispatch; diff --git a/src/shared/store/root-reducer.ts b/src/shared/store/root-reducer.ts new file mode 100644 index 0000000..27360ad --- /dev/null +++ b/src/shared/store/root-reducer.ts @@ -0,0 +1,6 @@ +import { combineReducers } from '@reduxjs/toolkit'; +import { baseAPI } from '@/shared/api/base-api'; + +export const rootReducer = combineReducers({ + [baseAPI.reducerPath]: baseAPI.reducer, +});