import { Middleware } from '@reduxjs/toolkit'; import { CheckoutResult, MiddlewareParams } from '../../../types'; import { checkoutApi } from '../../../data/client/checkout'; export const shippingOptionMiddleware: Middleware = ({ getState, dispatch }: MiddlewareParams) => { return (next) => (action) => { const result = next(action) as CheckoutResult; const preOrder = result?.payload?.pre_order; if (!preOrder) { return result; } const { shippingOptions } = getState().checkout; const { endpoints: apiEndpoints } = checkoutApi; const hasShippingOptions = shippingOptions?.length > 0; const isShippingOptionValid = preOrder?.shipping_option ? shippingOptions.some((opt) => opt.pk === preOrder.shipping_option.pk) : false; if (hasShippingOptions && !isShippingOptionValid) { const defaultShippingOption = shippingOptions[0]?.pk; if (defaultShippingOption) { dispatch( apiEndpoints.setShippingOption.initiate(defaultShippingOption) ); return null; } } return result; }; }; Object.defineProperty(shippingOptionMiddleware, 'name', { value: 'shippingOptionMiddleware' });