Revize 39d74503
Přidáno uživatelem Václav Honzík před téměř 3 roky(ů)
frontend/src/features/Auth/userSlice.ts | ||
---|---|---|
1 |
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
|
|
1 |
import { createSlice } from '@reduxjs/toolkit' |
|
2 | 2 |
import { persistReducer } from 'redux-persist' |
3 | 3 |
import storage from 'redux-persist/lib/storage' |
4 | 4 |
import { logIn } from './userThunks' |
... | ... | |
42 | 42 |
lastErr: action.payload, |
43 | 43 |
}), |
44 | 44 |
setUserState: (state, action) => { |
45 |
console.log('user state set') |
|
46 | 45 |
return ({ ...state, ...action.payload }) |
47 | 46 |
}, |
48 | 47 |
}, |
... | ... | |
60 | 59 |
}, |
61 | 60 |
}) |
62 | 61 |
|
62 |
|
|
63 | 63 |
const userReducer = persistReducer(persistConfig, userSlice.reducer) |
64 | 64 |
|
65 | 65 |
export const { logout, refreshTokens, setErr, setUserState } = userSlice.actions |
frontend/src/features/Auth/userThunks.ts | ||
---|---|---|
1 | 1 |
import { createAsyncThunk } from '@reduxjs/toolkit' |
2 | 2 |
import axiosInstance from '../../api/api' |
3 |
import { UserDto } from '../../swagger/data-contracts' |
|
4 |
import { setErr, setUserState, UserState } from './userSlice' |
|
3 |
import { UserState } from './userSlice' |
|
5 | 4 |
import jwt from 'jwt-decode' |
6 |
import { RootState } from '../redux/store' |
|
7 | 5 |
|
8 | 6 |
const loginError = |
9 | 7 |
'Server error occurred while logging in. Please contact help service to resolve this issue or try again later.' |
... | ... | |
16 | 14 |
|
17 | 15 |
export const logIn = createAsyncThunk( |
18 | 16 |
'user/login', |
19 |
async (userDto: UserLogin, { dispatch, getState }) => {
|
|
17 |
async (userDto: UserLogin, { getState }) => { |
|
20 | 18 |
try { |
21 | 19 |
// @ts-ignore |
22 | 20 |
if (getState().user.isLoggedIn) { |
... | ... | |
47 | 45 |
|
48 | 46 |
return userState |
49 | 47 |
} catch (err: any) { |
50 |
console.log(err) |
|
51 | 48 |
return Promise.reject(loginError) |
52 | 49 |
} |
53 | 50 |
} |
frontend/src/features/Catalog/catalogSlice.ts | ||
---|---|---|
1 |
import { createSlice } from '@reduxjs/toolkit' |
|
2 |
import { CatalogItemDto } from '../../swagger/data-contracts' |
|
3 |
import { getCatalogItem, getCatalogItems } from './catalogThunks' |
|
4 |
|
|
5 |
export interface CatalogState { |
|
6 |
catalogItems: CatalogItemDto[] // Items shown in the table |
|
7 |
isListLoading: boolean |
|
8 |
lastErr?: string |
|
9 |
catalogItem?: CatalogItemDto // Item shown in detail |
|
10 |
isItemLoading: boolean |
|
11 |
} |
|
12 |
|
|
13 |
const initialState: CatalogState = { |
|
14 |
catalogItems: [], |
|
15 |
isListLoading: true, |
|
16 |
isItemLoading: true, |
|
17 |
} |
|
18 |
|
|
19 |
export const catalogSlice = createSlice({ |
|
20 |
name: 'catalog', |
|
21 |
|
|
22 |
initialState, |
|
23 |
|
|
24 |
reducers: {}, |
|
25 |
|
|
26 |
extraReducers: (builder) => { |
|
27 |
builder.addCase(getCatalogItems.fulfilled, (state, action) => ({ |
|
28 |
...state, |
|
29 |
catalogItems: action.payload, |
|
30 |
isListLoading: false, |
|
31 |
})) |
|
32 |
builder.addCase(getCatalogItems.rejected, (state, action) => ({ |
|
33 |
...state, lastErr: action.payload as string |
|
34 |
})) |
|
35 |
}, |
|
36 |
}) |
frontend/src/features/Catalog/catalogThunks.ts | ||
---|---|---|
1 |
import { createAsyncThunk } from '@reduxjs/toolkit' |
|
2 |
import axiosInstance from '../../api/api' |
|
3 |
|
|
4 |
const apiError = |
|
5 |
'Error while fetching data from the server, please try again later.' |
|
6 |
|
|
7 |
export const getCatalogItems = createAsyncThunk( |
|
8 |
'catalog/getCatalogItems', |
|
9 |
async () => { |
|
10 |
try { |
|
11 |
const { data, status } = await axiosInstance.get('/catalog-items') |
|
12 |
if (status !== 200) { |
|
13 |
return Promise.reject(apiError) |
|
14 |
} |
|
15 |
return data |
|
16 |
} catch (err: any) { |
|
17 |
return Promise.reject(apiError) |
|
18 |
} |
|
19 |
} |
|
20 |
) |
|
21 |
|
|
22 |
export const getCatalogItem = createAsyncThunk( |
|
23 |
'catalog/getCatalogItem', |
|
24 |
async (id: number) => { |
|
25 |
try { |
|
26 |
const { data, status } = await axiosInstance.get( |
|
27 |
`/catalog-items/${id}` |
|
28 |
) |
|
29 |
if (status !== 200) { |
|
30 |
return Promise.reject(apiError) |
|
31 |
} |
|
32 |
return data |
|
33 |
} catch (err: any) { |
|
34 |
return Promise.reject(apiError) |
|
35 |
} |
|
36 |
} |
|
37 |
) |
Také k dispozici: Unified diff
re #9369 - catalog item thunks