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;