@commercelayer/react-components
Version:
The Official Commerce Layer React Components
2 lines • 1.71 kB
JavaScript
"use client";
import{jsx as _jsx}from"react/jsx-runtime";import{useContext,useEffect,useReducer}from"react";import AddressesContext,{defaultAddressContext}from"../../context/AddressContext";import CommerceLayerContext from"../../context/CommerceLayerContext";import OrderContext from"../../context/OrderContext";import addressReducer,{addressInitialState,saveAddresses,setAddressErrors,setCloneAddress}from"../../reducers/AddressReducer";import{setCustomerOrderParam}from"../../utils/localStorage";export function AddressesContainer(props){const{children,shipToDifferentAddress=!1,isBusiness,invertAddresses=!1}=props,[state,dispatch]=useReducer(addressReducer,addressInitialState),{order,orderId,updateOrder}=useContext(OrderContext),config=useContext(CommerceLayerContext);useEffect(()=>{order?.status==="draft"&&(setCustomerOrderParam("_save_billing_address_to_customer_address_book","false"),setCustomerOrderParam("_save_shipping_address_to_customer_address_book","false"))},[order?.status]),useEffect(()=>(dispatch({type:"setShipToDifferentAddress",payload:{shipToDifferentAddress,isBusiness,invertAddresses}}),()=>{dispatch({type:"cleanup",payload:{}})}),[shipToDifferentAddress,isBusiness,invertAddresses]);const contextValue={...state,setAddressErrors:(errors,resource)=>{setAddressErrors({errors,resource,dispatch,currentErrors:state.errors})},setAddress:params=>{defaultAddressContext.setAddress({...params,dispatch})},saveAddresses:async params=>await saveAddresses({config,dispatch,updateOrder,order,orderId,state,...params}),setCloneAddress:(id,resource)=>{setCloneAddress(id,resource,dispatch)}};return _jsx(AddressesContext.Provider,{value:contextValue,children})}export default AddressesContainer;