import { PageType } from "../../commons/types/page-type"; import { VTEXRunner } from "../../event/runners/vtex-runner"; import { OrderProduct, PageConfirmationEvent } from "../../event/types/page/confirmation"; import { CartEvent } from "../types/base/cart-event"; import { PageCartEvent } from "../types/page/cart"; import { PageItem, PageInfo } from "../../event/core/event-runner"; /** * Specific runner used by Sidewalk. * * @class SidewalkRunner * @implements {Runner} */ export class SantilRunner extends VTEXRunner { /** * Get current page info based on DataLayer. * * @protected * @param {PageItem} item Current item. * @return {IPageInfo} Current page info. * @memberof SantilRunner */ protected getPageInfo(item: PageItem): PageInfo { if (item && item.event) { if (item.event.toUpperCase() === "PEDIDOREALIZADO") { return { item, pageType: PageType.Confirmation, }; } else if (item.event.toUpperCase() === "CART") { return { item, pageType: PageType.Cart, }; } } return undefined; } /** * Create a generic cart event. * * @protected * @param {string} _event Current event name. * @return {CartEvent} Relevant cart event. * @memberof SantilRunner */ protected createCartEvent(_event: string): CartEvent { return new PageCartEvent(); } /** * Send order event, based on a order item. * * @protected * @param {*} orderItem Order item from the DataLayer. * @memberof VTEXRunner */ protected sendOrderEvent(orderItem: PageItem): void { orderItem = orderItem.ecommerce.purchase; const orderId = orderItem.actionField.id; const products: OrderProduct[] = []; if (orderItem.products) { for (const transactionProduct of orderItem.products) { products.push({ product: transactionProduct.id, quantity: Number(transactionProduct.quantity), price: Number(transactionProduct.price), }); } } const event = new PageConfirmationEvent(orderId).withProducts(products); event.push(); } }