Vue Storefront is now Alokai! Learn More
GetProducts

GetProducts

Implements GetProducts Unified Method.

Source

import { getNormalizers } from "@alokai/connect/integration-kit";
import type { GraphQL, Product } from "@vsf-enterprise/bigcommerce-api";

import { defineApi } from "@vsf-enterprise/unified-api-bigcommerce";

export const getProducts = defineApi.getProducts(async (context, args) => {
  const { normalizeProductCatalogItem } = getNormalizers(context);
  const { currency } = context.config.normalizerContext;

  const { api } = await context.getApiClient();
  const productsData = await api.getProducts({
    "id:in": args.ids ? args.ids.map((id) => Number.parseInt(id)) : undefined,
    "sku:in": args.skus ?? undefined,
  });

  if (productsData.data?.length === 0) {
    return { products: [] };
  }
  const entityIds = productsData.data.map((product) => product.id);

  const productResponse = await api.getProductsById({
    currencyCode: currency as GraphQL.CurrencyCode,
    entityIds,
  });

  const products = productResponse.data.map((product: Product) =>
    normalizeProductCatalogItem(product),
  );

  return { products };
});