Vue Storefront is now Alokai! Learn More
GetProductReviews

GetProductReviews

Implements GetProductReviews Unified Method.

Source

import { defineApi } from "@vsf-enterprise/unified-api-magento";
import type { ProductReview } from "@vue-storefront/magento-types";
import { getNormalizers } from "@vue-storefront/unified-data-model";

export const getProductReviews = defineApi.getProductReviews(async (context, args) => {
  const { productId, currentPage, pageSize } = args;
  const { normalizeProductReview, normalizePagination } = getNormalizers(context);

  const { data } = await context.api.productReview({
    filter: {
      sku: {
        eq: productId,
      },
    },
    currentPage,
    pageSize,
  });

  const productReviewItems = data?.products?.items?.[0];

  const reviews = (productReviewItems?.reviews?.items ?? [])
    .filter((element): element is ProductReview => element !== undefined)
    .map((element: ProductReview) => normalizeProductReview(element));

  const pagination = normalizePagination({
    ...productReviewItems?.reviews?.page_info,
    total_results: productReviewItems?.review_count ?? 0,
  });

  return {
    reviews,
    pagination,
  };
});