70 lines
1.9 KiB
TypeScript

import { createReducer } from '@reduxjs/toolkit';
import { CustomerItem } from '@interfaces';
import { getCustomers, deleteCustomer, resetCustomersState } from './thunk';
export interface CustomersState {
items: CustomerItem[];
loading: boolean;
error: string | null;
deleteLoading: boolean;
deleteError: string | null;
successMessage: string | null;
}
const initialState: CustomersState = {
items: [],
loading: false,
error: null,
deleteLoading: false,
deleteError: null,
successMessage: null,
};
export const customersReducer = createReducer(initialState, builder => {
builder
.addCase(getCustomers.pending, acc => {
acc.loading = true;
acc.error = null;
})
.addCase(getCustomers.fulfilled, (acc, action) => {
acc.loading = false;
acc.items = action.payload;
acc.error = null;
})
.addCase(getCustomers.rejected, (acc, action) => {
acc.loading = false;
acc.error =
(action.payload as string) ??
action.error.message ??
'Failed to load customers';
})
.addCase(deleteCustomer.pending, acc => {
acc.deleteLoading = true;
acc.deleteError = null;
acc.successMessage = null;
})
.addCase(deleteCustomer.fulfilled, (acc, action) => {
acc.deleteLoading = false;
acc.deleteError = null;
acc.successMessage = action.payload.message || 'Customer Delete Successful.';
const deletedUserid = action.meta.arg.userid;
acc.items = acc.items.filter(c => c.userid !== deletedUserid);
})
.addCase(deleteCustomer.rejected, (acc, action) => {
acc.deleteLoading = false;
acc.deleteError =
(action.payload as string) ??
action.error.message ??
'Failed to delete customer';
})
.addCase(resetCustomersState, acc => {
acc.successMessage = null;
acc.deleteError = null;
});
});
export default customersReducer;