Projekt

Obecné

Profil

Stáhnout (2.31 KB) Statistiky
| Větev: | Tag: | Revize:
1
import { createSlice } from '@reduxjs/toolkit'
2
import {PermissionDto, UserDto} from '../../swagger/data-contracts'
3
import {deleteUser, fetchUsers, savePermissions} 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
    isRequestCompleted: boolean
13
}
14

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

    
24
const usersDetailSlice = createSlice({
25
    name: 'usersDetail',
26
    initialState,
27
    reducers: {
28
        clear: (state) => ({ ...initialState }),
29
        setLoading: (state) => ({ ...state, loading: true }),
30
        consumeError: (state) => ({ ...state, error: undefined }),
31
        setSelectedUser: (state, action) => ({
32
            ...state,
33
            selectedUser: action.payload
34
        }),
35
        setSelectedUserPermissions: (state, action) => ({
36
            ...state,
37
            permissions: action.payload
38
        }),
39
        resetIsRequestCompleted: (state) => ({
40
            ...state,
41
            isRequestCompleted: false
42
        }),
43
    },
44
    extraReducers: (builder) => {
45
        builder.addCase(fetchUsers.pending, (state) => ({
46
            ...state,
47
            loading: true,
48
        }))
49
        builder.addCase(fetchUsers.fulfilled, (state, action) => ({
50
            ...state,
51
            users: action.payload,
52
            loading: false,
53
        }))
54
        builder.addCase(fetchUsers.rejected, (state, action) => ({
55
            ...state,
56
            loading: false,
57
            error: action.error.message as string,
58
        }))
59
        builder.addCase(savePermissions.fulfilled, (state, action) => ({
60
            ...state,
61
            isRequestCompleted: true,
62
        }))
63
        builder.addCase(deleteUser.fulfilled, (state, action) => ({
64
            ...state,
65
            isRequestCompleted: true,
66
        }))
67
    },
68
})
69

    
70
export const {
71
    clear,
72
    setLoading,
73
    consumeError,
74
    setSelectedUser,
75
    setSelectedUserPermissions,
76
    resetIsRequestCompleted
77
} = usersDetailSlice.actions
78
const usersDetailReducer = usersDetailSlice.reducer
79
export default usersDetailReducer
(3-3/4)