getAddress.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. "use client"
  2. import { CheckoutAddressNode, MappedCheckoutAddress } from "@/types/checkout/type";
  3. import { useAddress } from "./useAddress";
  4. import { useEffect } from "react";
  5. import { AddressDataTypes } from "@/types/types";
  6. export const useAddressesFromApi = (): {
  7. billingAddress: MappedCheckoutAddress | null;
  8. shippingAddress: MappedCheckoutAddress | null;
  9. getAddresses: () => Promise<void>;
  10. } => {
  11. const { addresses: data, getAddresses } = useAddress();
  12. const address = data;
  13. useEffect(() => {
  14. if (!address.length) {
  15. getAddresses();
  16. }
  17. }, [address.length, getAddresses]);
  18. if (!Array.isArray(address))
  19. return { billingAddress: null, shippingAddress: null, getAddresses };
  20. const billingNode = address.find((a: CheckoutAddressNode) => a?.addressType === "cart_billing");
  21. const shippingNode = address.find((a: CheckoutAddressNode) => a?.addressType === "cart_shipping");
  22. const mapNode = (
  23. node?: CheckoutAddressNode | AddressDataTypes
  24. ): MappedCheckoutAddress | null =>
  25. node
  26. ? {
  27. firstName: node.firstName,
  28. lastName: node.lastName,
  29. companyName: node.companyName,
  30. address: node.address,
  31. city: node.city,
  32. state: node.state,
  33. country: node.country,
  34. postcode: node.postcode,
  35. email: node.email,
  36. phone: node.phone,
  37. }
  38. : null;
  39. return {
  40. billingAddress: mapNode(billingNode),
  41. shippingAddress: mapNode(shippingNode),
  42. getAddresses,
  43. };
  44. };