You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.1 KiB
39 lines
1.1 KiB
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
import { fetchUser } from './asyncActions';
|
|
import { User, Status, UserSliceState } from './types';
|
|
|
|
const initialState: UserSliceState = {
|
|
user_items: [],
|
|
user_status: Status.LOADING, // loading | success | error
|
|
};
|
|
|
|
const userSlice = createSlice({
|
|
name: 'categories',
|
|
initialState,
|
|
reducers: {
|
|
setUser(user_status, action: PayloadAction<User[]>) {
|
|
user_status.user_items = action.payload;
|
|
},
|
|
},
|
|
|
|
extraReducers: (builder) => {
|
|
builder.addCase(fetchUser.pending, (user_status) => {
|
|
user_status.user_status = Status.LOADING;
|
|
user_status.user_items = [];
|
|
});
|
|
|
|
builder.addCase(fetchUser.fulfilled, (user_status, action) => {
|
|
user_status.user_status = Status.SUCCESS;
|
|
user_status.user_items = action.payload;
|
|
});
|
|
|
|
builder.addCase(fetchUser.rejected, (user_status) => {
|
|
user_status.user_status = Status.ERROR;
|
|
user_status.user_items = [];
|
|
});
|
|
},
|
|
});
|
|
|
|
export const { setUser } = userSlice.actions;
|
|
|
|
export default userSlice.reducer; |