Vue Storefront is now Alokai! Learn More
SetCartAddress

SetCartAddress

Implements SetCartAddress Unified Method.

Source

import "./extended";
import type { SfCreateAddressBody, SfCustomerAddress } from "@alokai/connect";
import { getNormalizers } from "@alokai/connect/integration-kit";
import type { Address, RequiredAddressProps } from "@vsf-enterprise/sapcc-types";

import { defineApi, getCartId } from "@vsf-enterprise/unified-api-sapcc";

function isSfCustomerAddress(
  address: SfCreateAddressBody | SfCustomerAddress,
): address is SfCustomerAddress {
  return "id" in address;
}

export const setCartAddress = defineApi.setCartAddress(async (context, args) => {
  const { api } = await context.getApiClient();
  const cartId = getCartId(context);
  const { shippingAddress } = args;

  const { normalizeCart, unnormalizeAddress } = getNormalizers(context);

  if (isSfCustomerAddress(shippingAddress)) {
    await api.replaceCartDeliveryAddress({
      addressId: shippingAddress.id,
      cartId,
    });
  } else {
    const address = unnormalizeAddress(shippingAddress) as Address & RequiredAddressProps;
    await api.createCartDeliveryAddress({
      address,
      cartId,
    });
  }

  const { data: cart } = await api.getCart({ cartId });

  return normalizeCart(cart);
});