import { createAsyncThunk, createSlice } from '@reduxjs/toolkit'
import type { RootState } from 'src/store/store'
import { SuccessListAPIResponse } from 'src/types/api-response';
import { MessageCategory } from 'src/types/category';
import { msgCategoriesService } from '@services/msg-categories.service';
// declaring the types for our state
export type MsgCategoriesState = {
categories: Array<MessageCategory>,
loading: boolean,
error: boolean,
message: string,
reload: boolean
}
const initialState: MsgCategoriesState = {
categories: [],
loading: false,
error: false,
message: "",
reload: false
}
export const getCategories = createAsyncThunk('GET_CATEGORIES', async () => {
const response = await msgCategoriesService.getAll();
return response
})
export const triggerReloadCategories = createAsyncThunk('RELOAD_CATEGORIES', async () => {
})
export const categoriesSlice = createSlice({
name: 'categories',
initialState,
reducers: {
},
extraReducers: builder => {
builder
.addCase(getCategories.pending, state => {
state.loading = true;
})
.addCase(getCategories.fulfilled, (state, { payload }) => {
state.loading = false;
state.categories = ((payload as SuccessListAPIResponse).content as Array<MessageCategory>);
})
.addCase(getCategories.rejected, state => {
state.loading = false
state.error = true
})
/*Reload categories*/
.addCase(triggerReloadCategories.pending, state => {
state.reload = false;
})
.addCase(triggerReloadCategories.fulfilled, (state, { payload }) => {
state.reload = true;
})
.addCase(triggerReloadCategories.rejected, state => {
state.reload = false
})
},
})
export const selectedMsgCategories = (state: RootState) => state.categories
export default categoriesSlice.reducer
Created
July 7, 2023 14:07
-
-
Save PatrickNiyogitare28/8eabea89dafb4e0ba9f75f23af1176a2 to your computer and use it in GitHub Desktop.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment