From 7f14a3052ceae10e840c4005bc3cf148a3f847e8 Mon Sep 17 00:00:00 2001 From: Breno Calazans Date: Tue, 16 Mar 2021 14:44:48 -0300 Subject: [PATCH 1/2] Fix price being sent as integer instead of float --- CHANGELOG.md | 2 ++ react/modules/enhancedEcommerceEvents.ts | 25 ++++++++++++------------ react/typings/events.d.ts | 1 + 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5455bea..40fa62ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Fixed +- Property `price` being sent as `integer` in `addToCart` event when using the block `add-to-cart-button`. ## [2.9.0] - 2021-01-18 ### Added diff --git a/react/modules/enhancedEcommerceEvents.ts b/react/modules/enhancedEcommerceEvents.ts index dbd712ea..3964224e 100644 --- a/react/modules/enhancedEcommerceEvents.ts +++ b/react/modules/enhancedEcommerceEvents.ts @@ -5,6 +5,7 @@ import { ProductOrder, Impression, CartItem, + AddToCartData, } from '../typings/events' import { AnalyticsEcommerceProduct } from '../typings/gtm' @@ -46,9 +47,7 @@ export function sendEnhancedEcommerceEvents(e: PixelMessage) { case 'vtex:productClick': { const { productName, brand, categories, sku } = e.data.product - const list = e.data.list - ? { actionField: { list: e.data.list } } - : {} + const list = e.data.list ? { actionField: { list: e.data.list } } : {} let price @@ -83,17 +82,18 @@ export function sendEnhancedEcommerceEvents(e: PixelMessage) { } case 'vtex:addToCart': { - const { items } = e.data + const { items } = e.data as AddToCartData push({ ecommerce: { add: { - products: items.map((sku: any) => ({ + products: items.map(sku => ({ brand: sku.brand, category: sku.category, id: sku.skuId, name: sku.name, - price: `${sku.price}`, + price: + sku.priceIsInt === true ? `${sku.price / 100}` : `${sku.price}`, quantity: sku.quantity, variant: sku.variant, })), @@ -212,9 +212,9 @@ export function sendEnhancedEcommerceEvents(e: PixelMessage) { event: 'promoView', ecommerce: { promoView: { - promotions: promotions - } - } + promotions, + }, + }, }) break } @@ -226,9 +226,9 @@ export function sendEnhancedEcommerceEvents(e: PixelMessage) { event: 'promotionClick', ecommerce: { promoClick: { - promotions: promotions - } - } + promotions, + }, + }, }) break } @@ -239,7 +239,6 @@ export function sendEnhancedEcommerceEvents(e: PixelMessage) { } } - function getPurchaseObjectData(order: Order) { return { affiliation: order.transactionAffiliation, diff --git a/react/typings/events.d.ts b/react/typings/events.d.ts index 33640c89..eb9f5f08 100644 --- a/react/typings/events.d.ts +++ b/react/typings/events.d.ts @@ -186,6 +186,7 @@ interface CartItem { name: string skuName: string price: number + priceIsInt?: boolean sellingPrice: number productId: string productRefId: string From db24f749351af5dce91d6c4cf2d27a462525d90c Mon Sep 17 00:00:00 2001 From: Breno Calazans Date: Tue, 16 Mar 2021 14:59:53 -0300 Subject: [PATCH 2/2] Handle priceIsInt in removeFromCart --- react/modules/enhancedEcommerceEvents.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/react/modules/enhancedEcommerceEvents.ts b/react/modules/enhancedEcommerceEvents.ts index 3964224e..767a149a 100644 --- a/react/modules/enhancedEcommerceEvents.ts +++ b/react/modules/enhancedEcommerceEvents.ts @@ -6,6 +6,7 @@ import { Impression, CartItem, AddToCartData, + RemoveToCartData, } from '../typings/events' import { AnalyticsEcommerceProduct } from '../typings/gtm' @@ -107,18 +108,19 @@ export function sendEnhancedEcommerceEvents(e: PixelMessage) { } case 'vtex:removeFromCart': { - const { items } = e.data + const { items } = e.data as RemoveToCartData push({ ecommerce: { currencyCode: e.data.currency, remove: { - products: items.map((sku: any) => ({ + products: items.map(sku => ({ brand: sku.brand, id: sku.skuId, category: sku.category, name: sku.name, - price: `${sku.price}`, + price: + sku.priceIsInt === true ? `${sku.price / 100}` : `${sku.price}`, quantity: sku.quantity, variant: sku.variant, })),