@commercelayer/react-components
Version:
The Official Commerce Layer React Components
2 lines • 4.26 kB
JavaScript
"use client";
import{jsx as _jsx}from"react/jsx-runtime";import AddressesContext from"../../context/AddressContext";import{useRapidForm}from"rapid-form";import{useContext,useEffect,useRef}from"react";import ShippingAddressFormContext from"../../context/ShippingAddressFormContext";import OrderContext from"../../context/OrderContext";import{getSaveShippingAddressToAddressBook}from"../../utils/localStorage";export function ShippingAddressForm(props){const{children,errorClassName,autoComplete="on",fieldEvent="change",reset=!1,customFieldMessageError,...p}=props,{validation,values,errors,reset:resetForm,setValue:setValueForm,setError:setErrorForm}=useRapidForm({fieldEvent}),{setAddressErrors,setAddress,shipToDifferentAddress,isBusiness,invertAddresses}=useContext(AddressesContext),{saveAddressToCustomerAddressBook,include,addResourceToInclude,includeLoaded}=useContext(OrderContext),ref=useRef(null);useEffect(()=>{if(include?.includes("shipping_address")?includeLoaded?.shipping_address||addResourceToInclude({newResourceLoaded:{shipping_address:!0}}):addResourceToInclude({newResource:"shipping_address"}),customFieldMessageError!=null&&Object.keys(values).length>0){for(const name in values)if(Object.prototype.hasOwnProperty.call(values,name)){const field=values[name],fieldName=field.name,value=field.value,inError=errors[fieldName]!=null;if(customFieldMessageError!=null&&fieldName!=null&&value!=null){values[fieldName.replace("shipping_address_","")]=value;const customMessage=customFieldMessageError({field:fieldName,value,values});if(customMessage!=null)if(typeof customMessage=="string")if(inError){const errorMsg=errors[fieldName]?.message;errorMsg!=null&&errorMsg!==customMessage&&(errors[fieldName].message=customMessage)}else setErrorForm({name:fieldName,code:"VALIDATION_ERROR",message:customMessage});else customMessage.forEach(element=>{const{field:field2,value:value2,isValid,message}=element,fieldInError=errors[field2]!=null;if(isValid)fieldInError&&(delete errors[field2],setValueForm(field2,value2??""));else if(fieldInError){const errorMsg=errors[field2]?.message;errorMsg!=null&&errorMsg!==message&&(errors[field2].message=message,setValueForm(field2,value2??""))}else setErrorForm({name:field2,code:"VALIDATION_ERROR",message})})}}}if(errors!=null&&Object.keys(errors).length>0){const formErrors=[];for(const fieldName in errors){const code=errors[fieldName]?.code,message=errors[fieldName]?.message;formErrors.push({code,message:message??"",resource:"shipping_address",field:fieldName})}(shipToDifferentAddress||invertAddresses)&&setAddressErrors(formErrors,"shipping_address")}else if(values&&Object.keys(values).length>0&&(shipToDifferentAddress||invertAddresses)){setAddressErrors([],"shipping_address");for(const name in values){const field=values[name];(field?.value||field?.required===!1&&field?.type!=="checkbox")&&(values[name.replace("shipping_address_","")]=field.value,delete values[name]),field?.type==="checkbox"&&(delete values[name],saveAddressToCustomerAddressBook({type:"shipping_address",value:field.checked}))}setAddress({values:{...values,...isBusiness&&{business:isBusiness}},resource:"shipping_address"})}const checkboxChecked=ref.current?.querySelector('[name="shipping_address_save_to_customer_book"]')?.checked||getSaveShippingAddressToAddressBook();reset&&(values!=null&&Object.keys(values).length>0||errors!=null&&Object.keys(errors).length>0||checkboxChecked)&&(saveAddressToCustomerAddressBook&&saveAddressToCustomerAddressBook({type:"shipping_address",value:!1}),ref&&(ref.current?.reset(),resetForm({target:ref.current}),setAddressErrors([],"shipping_address"),setAddress({values:{},resource:"shipping_address"})))},[values,errors,shipToDifferentAddress,reset,include,includeLoaded,isBusiness]);const providerValues={values,validation,setValue:(name,value)=>{setValueForm(name,value);const field={[name.replace("shipping_address_","")]:value};setAddress({values:{...values,...field,...isBusiness&&{business:isBusiness}},resource:"shipping_address"})},errorClassName,errors,resetField:name=>{resetForm({currentTarget:ref.current},name)}};return _jsx(ShippingAddressFormContext.Provider,{value:providerValues,children:_jsx("form",{ref,autoComplete,...p,children})})}export default ShippingAddressForm;