import { createSlice, createAsyncThunk } from '@reduxjs/toolkit' import axios from 'axios' interface MainState { users: any loading: boolean notify: { showNotification: boolean textNotification: string typeNotification: string } } const initialState: MainState = { users: [], loading: false, notify: { showNotification: false, textNotification: '', typeNotification: 'warn', }, } export const fetch = createAsyncThunk('users/fetch', async (data: any) => { const { id, query } = data const result = await axios.get( `users${ query || (id ? `/${id}` : '') }` ) return id ? result.data : result.data.rows }) export const deleteItem = createAsyncThunk('users/deleteUser', async (id: string, thunkAPI) => { try { await axios.delete(`users/${id}`) thunkAPI.dispatch(fetch({ id: '', query: '' })) } catch (error) { console.log(error) } // showNotification('Users has been deleted', 'success'); }) export const create = createAsyncThunk('users/createUser', async (data: any) => { const result = await axios.post( 'users', { data } ) // showNotification('Users has been created', 'success'); return result.data }) export const update = createAsyncThunk('users/updateUser', async (payload: any) => { const result = await axios.put( `users/${payload.id}`, { id: payload.id, data: payload.data } ) return result.data }) export const usersSlice = createSlice({ name: 'users', initialState, reducers: {}, extraReducers: (builder) => { builder.addCase(fetch.pending, (state) => { state.loading = true }) builder.addCase(fetch.rejected, (state) => { state.loading = false }) builder.addCase(fetch.fulfilled, (state, action) => { state.users = action.payload state.loading = false }) builder.addCase(deleteItem.pending, (state) => { state.loading = true }) builder.addCase(deleteItem.fulfilled, (state) => { state.loading = false }) builder.addCase(deleteItem.rejected, (state) => { state.loading = false }) builder.addCase(create.pending, (state) => { state.loading = true }) builder.addCase(create.rejected, (state) => { state.loading = false }) builder.addCase(create.fulfilled, (state) => { state.loading = false }) builder.addCase(update.pending, (state) => { state.loading = true }) builder.addCase(update.fulfilled, (state) => { state.loading = false }) builder.addCase(update.rejected, (state) => { state.loading = false }) }, }) // Action creators are generated for each case reducer function // export const { } = usersSlice.actions export default usersSlice.reducer