mirror of
https://github.com/ershisan99/it-incubator-todolist-ts-17-live-2024-08-17.git
synced 2025-12-16 20:59:30 +00:00
53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
|
||
import { authAPI } from 'api/todolists-api'
|
||
import { setIsLoggedIn } from 'features/Login/auth-reducer'
|
||
import { AppThunk } from 'app/store'
|
||
|
||
export type RequestStatusType = 'idle' | 'loading' | 'succeeded' | 'failed'
|
||
|
||
export type InitialStateType = {
|
||
// происходит ли сейчас взаимодействие с сервером
|
||
status: RequestStatusType
|
||
// если ошибка какая-то глобальная произойдёт - мы запишем текст ошибки сюда
|
||
error: string | null
|
||
// true когда приложение проинициализировалось (проверили юзера, настройки получили и т.д.)
|
||
isInitialized: boolean
|
||
}
|
||
|
||
const initialState: InitialStateType = {
|
||
status: 'idle',
|
||
error: null,
|
||
isInitialized: false,
|
||
}
|
||
|
||
const appSlice = createSlice({
|
||
name: 'app',
|
||
initialState,
|
||
reducers: {
|
||
setAppError(state, action: PayloadAction<string | null>) {
|
||
return { ...state, error: action.payload }
|
||
},
|
||
setAppStatus(state, action: PayloadAction<RequestStatusType>) {
|
||
return { ...state, status: action.payload }
|
||
},
|
||
setAppInitialized(state, action: PayloadAction<boolean>) {
|
||
return { ...state, isInitialized: action.payload }
|
||
},
|
||
},
|
||
})
|
||
|
||
export const appReducer = appSlice.reducer
|
||
|
||
export const { setAppInitialized, setAppStatus, setAppError } = appSlice.actions
|
||
|
||
export const initializeAppTC = (): AppThunk => (dispatch) => {
|
||
authAPI.me().then((res) => {
|
||
if (res.data.resultCode === 0) {
|
||
dispatch(setIsLoggedIn(true))
|
||
} else {
|
||
}
|
||
|
||
dispatch(setAppInitialized(true))
|
||
})
|
||
}
|