import { Middleware } from '@reduxjs/toolkit'; import { CheckoutResult, MiddlewareParams } from '../../../types'; import { checkoutApi } from '../../../data/client/checkout'; export const attributeBasedShippingOptionMiddleware: Middleware = ({ getState, dispatch }: MiddlewareParams) => { return (next) => (action) => { const result = next(action) as CheckoutResult; const preOrder = result?.payload?.pre_order; if (!preOrder) { return result; } const { attributeBasedShippingOptions } = getState().checkout; const { endpoints: apiEndpoints } = checkoutApi; if ( Object.keys(attributeBasedShippingOptions).length > 0 && !preOrder.attribute_based_shipping_options ) { const initialSelectedOptions: Record = Object.fromEntries( Object.entries(attributeBasedShippingOptions).map(([key, options]) => [ key, options.attribute_based_shipping_options[0].pk ]) ); dispatch( apiEndpoints.setAttributeBasedShippingOptions.initiate( initialSelectedOptions ) ); return null; } return result; }; }; Object.defineProperty(attributeBasedShippingOptionMiddleware, 'name', { value: 'attributeBasedShippingOptionMiddleware' });