Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 39d74503

Přidáno uživatelem Václav Honzík před téměř 3 roky(ů)

re #9369 - catalog item thunks

Zobrazit rozdíly:

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