UNPKG

4.94 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 eFacil.
12 *
13 * @class EFacilRunner
14 * @implements {Runner}
15 */
16var EFacilRunner = /** @class */ (function (_super) {
17 tslib_1.__extends(EFacilRunner, _super);
18 function EFacilRunner() {
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 EFacilRunner
27 */
28 EFacilRunner.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 EFacilRunner
46 */
47 EFacilRunner.prototype.getPageInfo = function (item) {
48 if (item) {
49 if (item.pageType && item.pageType.toUpperCase() === "CONCLUSAO_PEDIDO") {
50 return {
51 item: item,
52 pageType: page_type_1.PageType.Confirmation,
53 };
54 }
55 }
56 return undefined;
57 };
58 /**
59 * Send order event, based on a order item.
60 *
61 * @private
62 * @param {*} orderItem Order item from the DataLayer.
63 * @memberof EFacilRunner
64 */
65 EFacilRunner.prototype.sendOrderEvent = function (orderItem) {
66 var orderId = orderItem.transactionId;
67 var products = [];
68 if (orderItem.transactionProducts) {
69 for (var _i = 0, _a = orderItem.transactionProducts; _i < _a.length; _i++) {
70 var transactionProduct = _a[_i];
71 // Remove thousands comma separator.
72 var price = Number(String(transactionProduct.price).replace(",", ""));
73 products.push({
74 product: transactionProduct.id,
75 quantity: transactionProduct.quantity,
76 price: price,
77 });
78 }
79 }
80 var event = new confirmation_1.PageConfirmationEvent(orderId).withProducts(products);
81 event.push();
82 };
83 /**
84 * Send cart event, based on a cart item.
85 *
86 * @private
87 * @param {*} cartItem Cart item from the DataLayer.
88 * @memberof EFacilRunner
89 */
90 EFacilRunner.prototype.sendCartEvent = function (cartItem) {
91 // Create a generic cart event.
92 var event = this.createCartEvent(cartItem.event);
93 // Get layer products from specific event key.
94 var layerProducts = cartItem.ecommerce[this.getCartProductsKeyFromEvent(cartItem.event)].products;
95 if (layerProducts && layerProducts instanceof Array && layerProducts.length > 0) {
96 for (var _i = 0, layerProducts_1 = layerProducts; _i < layerProducts_1.length; _i++) {
97 var product = layerProducts_1[_i];
98 event.withProduct(product.id, product.quantity);
99 }
100 }
101 event.push();
102 };
103 /**
104 * Get layer products from specific event key.
105 *
106 * eFacil didnt implement cart events yet.
107 *
108 * @private
109 * @param {string} event Current event name.
110 * @return {string} Event related key.
111 * @memberof EFacilRunner
112 */
113 EFacilRunner.prototype.getCartProductsKeyFromEvent = function (event) {
114 var keyFromEvent = {
115 ADDTOCART: "add",
116 REMOVEFROMCART: "remove",
117 };
118 return keyFromEvent[event.toUpperCase()];
119 };
120 /**
121 * Create a generic cart event.
122 *
123 * @private
124 * @param {string} event Current event name.
125 * @return {CartEvent} Relevant cart event.
126 * @memberof EFacilRunner
127 */
128 EFacilRunner.prototype.createCartEvent = function (event) {
129 switch (event.toUpperCase()) {
130 case "ADDTOCART":
131 return new cart_add_1.SessionCartAddEvent();
132 case "REMOVEFROMCART":
133 return new cart_remove_1.SessionCartRemoveEvent();
134 default:
135 return new cart_1.PageCartEvent();
136 }
137 };
138 return EFacilRunner;
139}(event_runner_1.EventRunner));
140exports.EFacilRunner = EFacilRunner;
141//# sourceMappingURL=efacil-runner.js.map
\No newline at end of file