'use client'; import { createSlice } from '@reduxjs/toolkit'; import { Address, BankAccount, CheckoutStep, CreditCardType, DeliveryOption, InstallmentOption, LoyaltyBalanceItem, PaymentChoice, PaymentOption, CheckoutCreditPaymentOption, PreOrder, RetailStore, ShippingOption, DataSource, AttributeBasedShippingOption } from '../../types'; export interface CheckoutState { errors: Record; hasGiftBox: boolean; canGuestPurchase: boolean; steps: { current: CheckoutStep; shipping: { completed: boolean; busy: boolean; }; payment: { completed: boolean; busy: boolean; }; }; preOrder: PreOrder; addressList: Address[]; deliveryOptions: DeliveryOption[]; shippingOptions: ShippingOption[]; dataSourceShippingOptions: DataSource[]; paymentOptions: PaymentOption[]; unavailablePaymentOptions: PaymentOption[]; creditPaymentOptions: CheckoutCreditPaymentOption[]; selectedCreditPaymentPk: number; paymentChoices: PaymentChoice[]; cardType: CreditCardType; installmentOptions: InstallmentOption[]; bankAccounts: BankAccount[]; selectedBankAccountPk: number; loyaltyBalance?: string; loyaltyBalances?: LoyaltyBalanceItem[]; retailStores: RetailStore[]; attributeBasedShippingOptions: AttributeBasedShippingOption[]; selectedShippingOptions: Record; hepsipayAvailability: boolean; walletPaymentData?: { data: { supportedNetworks: string[]; merchantIdentifier: string; merchantCapabilities: string[]; countryCode: string; currencyCode: string; version: string; public_key: string; [key: string]: any; }; detail: { label: string; amount: { currency: string; value: string; }; }; supportedMethods: string; }; payOnDeliveryOtpModalActive: boolean; } const initialState: CheckoutState = { errors: null, hasGiftBox: false, canGuestPurchase: false, steps: { current: CheckoutStep.Shipping, shipping: { completed: false, busy: false }, payment: { completed: false, busy: false } }, preOrder: null, addressList: [], deliveryOptions: [], shippingOptions: [], dataSourceShippingOptions: [], paymentOptions: [], unavailablePaymentOptions: [], creditPaymentOptions: [], selectedCreditPaymentPk: null, paymentChoices: [], cardType: null, installmentOptions: [], bankAccounts: [], selectedBankAccountPk: null, retailStores: [], attributeBasedShippingOptions: [], selectedShippingOptions: {}, hepsipayAvailability: false, payOnDeliveryOtpModalActive: false }; const checkoutSlice = createSlice({ name: 'checkout', initialState, reducers: { resetCheckoutState() { return initialState; }, setErrors(state, { payload }) { state.errors = payload; }, setHasGiftBox(state, { payload }) { state.hasGiftBox = payload; }, setCanGuestPurchase(state, { payload }) { state.canGuestPurchase = payload; }, setCurrentStep(state, { payload }) { state.steps.current = payload; }, setShippingStepCompleted(state, { payload }) { state.steps.shipping.completed = payload; }, setShippingStepBusy(state, { payload }) { state.steps.shipping.busy = payload; }, setPaymentStepCompleted(state, { payload }) { state.steps.payment.completed = payload; }, setPaymentStepBusy(state, { payload }) { state.steps.payment.busy = payload; }, setPreOrder(state, { payload }) { state.preOrder = payload; }, setAddressList(state, { payload }) { state.addressList = payload; }, setDeliveryOptions(state, { payload }) { state.deliveryOptions = payload; }, setShippingOptions(state, { payload }) { state.shippingOptions = payload; }, setDataSourceShippingOptions(state, { payload }) { state.dataSourceShippingOptions = payload; }, setPaymentOptions(state, { payload }) { state.paymentOptions = payload; }, setUnavailablePaymentOptions(state, { payload }) { state.unavailablePaymentOptions = payload; }, setPaymentChoices(state, { payload }) { state.paymentChoices = payload; }, setCreditPaymentOptions(state, { payload }) { state.creditPaymentOptions = payload; }, setSelectedCreditPaymentPk(state, { payload }) { state.selectedCreditPaymentPk = payload; }, setCardType(state, { payload }) { state.cardType = payload; }, setInstallmentOptions(state, { payload }) { state.installmentOptions = payload; }, setBankAccounts(state, { payload }) { state.bankAccounts = payload; }, setSelectedBankAccountPk(state, { payload }) { state.selectedBankAccountPk = payload; }, setLoyaltyBalance(state, { payload }) { state.loyaltyBalance = payload; }, setLoyaltyBalances(state, { payload }) { state.loyaltyBalances = payload; }, setRetailStores(state, { payload }) { state.retailStores = payload; }, setAttributeBasedShippingOptions(state, { payload }) { state.attributeBasedShippingOptions = payload; }, setSelectedShippingOptions: (state, { payload }) => { state.selectedShippingOptions = payload; }, setHepsipayAvailability(state, { payload }) { state.hepsipayAvailability = payload; }, setWalletPaymentData(state, { payload }) { state.walletPaymentData = payload; }, setPayOnDeliveryOtpModalActive(state, { payload }) { state.payOnDeliveryOtpModalActive = payload; } } }); export const { resetCheckoutState, setErrors, setHasGiftBox, setCanGuestPurchase, setCurrentStep, setShippingStepCompleted, setShippingStepBusy, setPaymentStepCompleted, setPaymentStepBusy, setPreOrder, setAddressList, setDeliveryOptions, setShippingOptions, setDataSourceShippingOptions, setPaymentOptions, setUnavailablePaymentOptions, setPaymentChoices, setCreditPaymentOptions, setSelectedCreditPaymentPk, setCardType, setInstallmentOptions, setBankAccounts, setSelectedBankAccountPk, setLoyaltyBalance, setLoyaltyBalances, setRetailStores, setAttributeBasedShippingOptions, setSelectedShippingOptions, setHepsipayAvailability, setWalletPaymentData, setPayOnDeliveryOtpModalActive } = checkoutSlice.actions; export default checkoutSlice.reducer;