mirror of
https://github.com/ershisan99/it-incubator-todolist-ts-17-live-2024-08-17.git
synced 2026-02-04 21:02:13 +00:00
chore: refactor app reducer to use rtk
This commit is contained in:
@@ -1,30 +1,10 @@
|
||||
import { Dispatch } from 'redux'
|
||||
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
|
||||
import { authAPI } from 'api/todolists-api'
|
||||
import { setIsLoggedInAC } from 'features/Login/auth-reducer'
|
||||
|
||||
const initialState: InitialStateType = {
|
||||
status: 'idle',
|
||||
error: null,
|
||||
isInitialized: false,
|
||||
}
|
||||
|
||||
export const appReducer = (
|
||||
state: InitialStateType = initialState,
|
||||
action: ActionsType
|
||||
): InitialStateType => {
|
||||
switch (action.type) {
|
||||
case 'APP/SET-STATUS':
|
||||
return { ...state, status: action.status }
|
||||
case 'APP/SET-ERROR':
|
||||
return { ...state, error: action.error }
|
||||
case 'APP/SET-IS-INITIALIED':
|
||||
return { ...state, isInitialized: action.value }
|
||||
default:
|
||||
return { ...state }
|
||||
}
|
||||
}
|
||||
import { AppThunk } from 'app/store'
|
||||
|
||||
export type RequestStatusType = 'idle' | 'loading' | 'succeeded' | 'failed'
|
||||
|
||||
export type InitialStateType = {
|
||||
// происходит ли сейчас взаимодействие с сервером
|
||||
status: RequestStatusType
|
||||
@@ -34,14 +14,34 @@ export type InitialStateType = {
|
||||
isInitialized: boolean
|
||||
}
|
||||
|
||||
export const setAppErrorAC = (error: string | null) =>
|
||||
({ type: 'APP/SET-ERROR', error }) as const
|
||||
export const setAppStatusAC = (status: RequestStatusType) =>
|
||||
({ type: 'APP/SET-STATUS', status }) as const
|
||||
export const setAppInitializedAC = (value: boolean) =>
|
||||
({ type: 'APP/SET-IS-INITIALIED', value }) as const
|
||||
const initialState: InitialStateType = {
|
||||
status: 'idle',
|
||||
error: null,
|
||||
isInitialized: false,
|
||||
}
|
||||
|
||||
export const initializeAppTC = () => (dispatch: Dispatch) => {
|
||||
const appSlice = createSlice({
|
||||
name: 'app',
|
||||
initialState,
|
||||
reducers: {
|
||||
setAppErrorAC(state, action: PayloadAction<string | null>) {
|
||||
return { ...state, error: action.payload }
|
||||
},
|
||||
setAppStatusAC(state, action: PayloadAction<RequestStatusType>) {
|
||||
return { ...state, status: action.payload }
|
||||
},
|
||||
setAppInitializedAC(state, action: PayloadAction<boolean>) {
|
||||
return { ...state, isInitialized: action.payload }
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
export const appReducer = appSlice.reducer
|
||||
|
||||
export const { setAppInitializedAC, setAppStatusAC, setAppErrorAC } =
|
||||
appSlice.actions
|
||||
|
||||
export const initializeAppTC = (): AppThunk => (dispatch) => {
|
||||
authAPI.me().then((res) => {
|
||||
if (res.data.resultCode === 0) {
|
||||
dispatch(setIsLoggedInAC(true))
|
||||
@@ -51,11 +51,3 @@ export const initializeAppTC = () => (dispatch: Dispatch) => {
|
||||
dispatch(setAppInitializedAC(true))
|
||||
})
|
||||
}
|
||||
|
||||
export type SetAppErrorActionType = ReturnType<typeof setAppErrorAC>
|
||||
export type SetAppStatusActionType = ReturnType<typeof setAppStatusAC>
|
||||
|
||||
type ActionsType =
|
||||
| SetAppErrorActionType
|
||||
| SetAppStatusActionType
|
||||
| ReturnType<typeof setAppInitializedAC>
|
||||
|
||||
Reference in New Issue
Block a user