This commit is contained in:
2024-08-17 17:13:28 +02:00
commit 143b48c7a9
38 changed files with 11982 additions and 0 deletions

57
src/app/app-reducer.ts Normal file
View File

@@ -0,0 +1,57 @@
import {Dispatch} from 'redux'
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}
}
}
export type RequestStatusType = 'idle' | 'loading' | 'succeeded' | 'failed'
export type InitialStateType = {
// происходит ли сейчас взаимодействие с сервером
status: RequestStatusType
// если ошибка какая-то глобальная произойдёт - мы запишем текст ошибки сюда
error: string | null
// true когда приложение проинициализировалось (проверили юзера, настройки получили и т.д.)
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)
export const initializeAppTC = () => (dispatch: Dispatch) => {
authAPI.me().then(res => {
if (res.data.resultCode === 0) {
dispatch(setIsLoggedInAC(true));
} else {
}
dispatch(setAppInitializedAC(true));
})
}
export type SetAppErrorActionType = ReturnType<typeof setAppErrorAC>
export type SetAppStatusActionType = ReturnType<typeof setAppStatusAC>
type ActionsType =
| SetAppErrorActionType
| SetAppStatusActionType
| ReturnType<typeof setAppInitializedAC>