UNPKG

5.9 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var tslib_1 = require("tslib");
4var page_type_1 = require("../../commons/types/page-type");
5var event_runner_1 = require("../../event/core/event-runner");
6var confirmation_1 = require("../../event/types/page/confirmation");
7var cart_1 = require("../types/page/cart");
8var cart_add_1 = require("../types/session/cart-add");
9var cart_remove_1 = require("../types/session/cart-remove");
10/**
11 * Specific runner used by Hipervarejo.
12 *
13 * @class HipervarejoRunner
14 * @implements {Runner}
15 */
16var HipervarejoRunner = /** @class */ (function (_super) {
17 tslib_1.__extends(HipervarejoRunner, _super);
18 function HipervarejoRunner() {
19 return _super !== null && _super.apply(this, arguments) || this;
20 }
21 /**
22 * Process DataLayer item.
23 *
24 * @protected
25 * @param {*} item Current item.
26 * @memberof HipervarejoRunner
27 */
28 HipervarejoRunner.prototype.processItem = function (item) {
29 var info = this.getPageInfo(item);
30 if (info) {
31 if (info.pageType === page_type_1.PageType.Confirmation) {
32 this.sendOrderEvent(info.item);
33 }
34 else if (info.pageType === page_type_1.PageType.Cart) {
35 this.sendCartEvent(info.item);
36 }
37 }
38 };
39 /**
40 * Get current page info based on DataLayer.
41 *
42 * @private
43 * @param {PageItem} item Current item.
44 * @return {PageInfo} Current page info.
45 * @memberof HipervarejoRunner
46 */
47 HipervarejoRunner.prototype.getPageInfo = function (item) {
48 if (item) {
49 if (item.pageType && item.pageType.toUpperCase() === "PURCHASE") {
50 return {
51 item: item,
52 pageType: page_type_1.PageType.Confirmation,
53 };
54 }
55 else if (item.event &&
56 (item.event.toUpperCase() === "ADDTOCART" ||
57 item.event.toUpperCase() === "REMOVEFROMCART" ||
58 item.event.toUpperCase() === "CART")) {
59 return {
60 item: item,
61 pageType: page_type_1.PageType.Cart,
62 };
63 }
64 }
65 return undefined;
66 };
67 /**
68 * Send order event, based on a order item.
69 *
70 * @private
71 * @param {*} orderItem Order item from the DataLayer.
72 * @memberof HipervarejoRunner
73 */
74 HipervarejoRunner.prototype.sendOrderEvent = function (orderItem) {
75 var orderId = orderItem.transactionID;
76 var products = [];
77 if (orderItem.transactionProducts) {
78 for (var _i = 0, _a = orderItem.transactionProducts; _i < _a.length; _i++) {
79 var transactionProduct = _a[_i];
80 // Remove thousands comma separator.
81 var price = Number(String(transactionProduct.price).replace(",", ""));
82 products.push({
83 product: transactionProduct.id,
84 quantity: transactionProduct.quantity,
85 price: price,
86 });
87 }
88 }
89 var event = new confirmation_1.PageConfirmationEvent(orderId).withProducts(products);
90 event.push();
91 };
92 /**
93 * Send cart event, based on a cart item.
94 *
95 * @private
96 * @param {*} cartItem Cart item from the DataLayer.
97 * @memberof HipervarejoRunner
98 */
99 HipervarejoRunner.prototype.sendCartEvent = function (cartItem) {
100 // Create a generic cart event.
101 var event = this.createCartEvent(cartItem.event);
102 // Get layer products from specific event key.
103 var layerProducts = cartItem.ecommerce[this.getCartProductsKeyFromEvent(cartItem.event)].products;
104 if (layerProducts && layerProducts instanceof Array && layerProducts.length > 0) {
105 for (var _i = 0, layerProducts_1 = layerProducts; _i < layerProducts_1.length; _i++) {
106 var product = layerProducts_1[_i];
107 event.withProduct(product.id, product.quantity);
108 }
109 }
110 event.push();
111 };
112 /**
113 * Get layer products from specific event key.
114 *
115 * Hipervarejo has 2 specific keys when working with cart items on
116 * the dataLayer.
117 *
118 * When products are added, they send the `ADDTOCART` event and
119 * when they are removed, `REMOVEFROMCART` is sent.
120 *
121 * Whenever this events are sent, they come with an `ecommerce`
122 * object, inside it, there is a key with the products array,
123 * the key name follows the following rule:
124 *
125 * - When event is `ADDTOCART`, the key is `add`.
126 * - When event is `REMOVEFROMCART`, the key is `remove`.
127 *
128 * @private
129 * @param {string} event Current event name.
130 * @return {string} Event related key.
131 * @memberof HipervarejoRunner
132 */
133 HipervarejoRunner.prototype.getCartProductsKeyFromEvent = function (event) {
134 var keyFromEvent = {
135 ADDTOCART: "add",
136 REMOVEFROMCART: "remove",
137 };
138 return keyFromEvent[event.toUpperCase()];
139 };
140 /**
141 * Create a generic cart event.
142 *
143 * @private
144 * @param {string} event Current event name.
145 * @return {CartEvent} Relevant cart event.
146 * @memberof HipervarejoRunner
147 */
148 HipervarejoRunner.prototype.createCartEvent = function (event) {
149 switch (event.toUpperCase()) {
150 case "ADDTOCART":
151 return new cart_add_1.SessionCartAddEvent();
152 case "REMOVEFROMCART":
153 return new cart_remove_1.SessionCartRemoveEvent();
154 default:
155 return new cart_1.PageCartEvent();
156 }
157 };
158 return HipervarejoRunner;
159}(event_runner_1.EventRunner));
160exports.HipervarejoRunner = HipervarejoRunner;
161//# sourceMappingURL=hipervarejo-runner.js.map
\No newline at end of file