Projekt

Obecné

Profil

Stáhnout (1.8 KB) Statistiky
| Větev: | Tag: | Revize:
1
import { createSlice } from '@reduxjs/toolkit'
2
import {PermissionDto, UserDto} from '../../swagger/data-contracts'
3
import {fetchUsers} from './userDetailThunks'
4
import {number} from "yup"
5

    
6
export interface UsersDetailState {
7
    users: UserDto[] // list of all fetched items
8
    loading: boolean // whether the users are loading
9
    error?: string,
10
    selectedUser?: UserDto,
11
    permissions?: PermissionDto
12
}
13

    
14
const initialState: UsersDetailState = {
15
    users: [],
16
    loading: true,
17
    error: undefined,
18
    selectedUser: undefined,
19
    permissions: undefined
20
}
21

    
22
const usersDetailSlice = createSlice({
23
    name: 'usersDetail',
24
    initialState,
25
    reducers: {
26
        clear: (state) => ({ ...initialState }),
27
        setLoading: (state) => ({ ...state, loading: true }),
28
        consumeError: (state) => ({ ...state, error: undefined }),
29
        setSelectedUser: (state, action) => ({
30
            ...state,
31
            selectedUser: action.payload
32
        }),
33
        setSelectedUserPermissions: (state, action) => ({
34
            ...state,
35
            permissions: action.payload
36
        }),
37
    },
38
    extraReducers: (builder) => {
39
        builder.addCase(fetchUsers.pending, (state) => ({
40
            ...state,
41
            loading: true,
42
        }))
43
        builder.addCase(fetchUsers.fulfilled, (state, action) => ({
44
            ...state,
45
            users: action.payload,
46
            loading: false,
47
        }))
48
        builder.addCase(fetchUsers.rejected, (state, action) => ({
49
            ...state,
50
            loading: false,
51
            error: action.error.message as string,
52
        }))
53
    },
54
})
55

    
56
export const {
57
    clear,
58
    setLoading,
59
    consumeError,
60
    setSelectedUser,
61
    setSelectedUserPermissions,
62
} = usersDetailSlice.actions
63
const usersDetailReducer = usersDetailSlice.reducer
64
export default usersDetailReducer
(3-3/4)