import { createSlice, type PayloadAction } from '@reduxjs/toolkit'; import type { AsyncStatus, DepositDraft, DepositProduct } from '../../../types/app'; import { seedDepositProducts } from './depositThunk'; interface DepositState { status: AsyncStatus; products: DepositProduct[]; draft: DepositDraft; receiptId: string | null; selectedDepositId: string | null; } const initialState: DepositState = { status: 'idle', products: [], draft: { amount: '', monthlyInstallment: '', tenureMonths: 12, interestPayoutType: 'cumulative', }, receiptId: null, selectedDepositId: null, }; const depositSlice = createSlice({ name: 'deposit', initialState, reducers: { setDepositProduct(state, action: PayloadAction) { state.draft.productId = action.payload; }, setDepositAmount(state, action: PayloadAction) { state.draft.amount = action.payload; }, setMonthlyInstallment(state, action: PayloadAction) { state.draft.monthlyInstallment = action.payload; }, setDepositTenure(state, action: PayloadAction) { state.draft.tenureMonths = action.payload; }, setInterestPayoutType(state, action: PayloadAction<'cumulative' | 'non-cumulative'>) { state.draft.interestPayoutType = action.payload; }, setDepositReceipt(state, action: PayloadAction) { state.receiptId = action.payload; }, setSelectedDeposit(state, action: PayloadAction) { state.selectedDepositId = action.payload; }, resetDepositFlow(state) { state.draft = { amount: '', monthlyInstallment: '', tenureMonths: 12, interestPayoutType: 'cumulative', }; state.receiptId = null; state.selectedDepositId = null; }, }, extraReducers: (builder) => { builder .addCase(seedDepositProducts.pending, (state) => { state.status = 'loading'; }) .addCase(seedDepositProducts.fulfilled, (state, action) => { state.status = 'succeeded'; state.products = action.payload; }) .addCase(seedDepositProducts.rejected, (state) => { state.status = 'failed'; }); }, }); export const depositActions = depositSlice.actions; export const depositReducer = depositSlice.reducer;