UNPKG

4.23 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");
8/**
9 * Specific runner used by AnaCapri.
10 *
11 * @class AnaCapriRunner
12 * @implements {Runner}
13 */
14var AnaCapriRunner = /** @class */ (function (_super) {
15 tslib_1.__extends(AnaCapriRunner, _super);
16 function AnaCapriRunner() {
17 return _super !== null && _super.apply(this, arguments) || this;
18 }
19 /**
20 * Process DataLayer item.
21 *
22 * @protected
23 * @param {*} item Current item.
24 * @memberof AnaCapriRunner
25 */
26 AnaCapriRunner.prototype.processItem = function (item) {
27 var info = this.getPageInfo(item);
28 if (info) {
29 if (info.pageType === page_type_1.PageType.Confirmation) {
30 this.sendOrderEvent(info.item);
31 }
32 else if (info.pageType === page_type_1.PageType.Cart) {
33 this.sendCartEvent(info.item);
34 }
35 }
36 };
37 /**
38 * Get current page info based on DataLayer.
39 *
40 * @private
41 * @param {PageItem} item Current item.
42 * @return {PageInfo} Current page info.
43 * @memberof AnaCapriRunner
44 */
45 AnaCapriRunner.prototype.getPageInfo = function (item) {
46 if (item) {
47 if (item.ecommerce && item.ecommerce.purchase) {
48 return {
49 item: item,
50 pageType: page_type_1.PageType.Confirmation,
51 };
52 }
53 else if (item.event && item.event.toUpperCase() === "CART") {
54 return {
55 item: item,
56 pageType: page_type_1.PageType.Cart,
57 };
58 }
59 }
60 return undefined;
61 };
62 /**
63 * Send order event, based on a order item.
64 *
65 * @private
66 * @param {PageItem} orderItem Order item from the DataLayer.
67 * @memberof AnaCapriRunner
68 */
69 AnaCapriRunner.prototype.sendOrderEvent = function (orderItem) {
70 var item = orderItem.ecommerce.purchase;
71 var orderId = item.actionField.id;
72 var products = [];
73 if (item.products) {
74 for (var _i = 0, _a = item.products; _i < _a.length; _i++) {
75 var transactionProduct = _a[_i];
76 // Remove thousands comma separator.
77 var price = transactionProduct.price;
78 products.push({
79 product: transactionProduct.id,
80 quantity: transactionProduct.quantity,
81 price: price,
82 });
83 }
84 }
85 var event = new confirmation_1.PageConfirmationEvent(orderId).withProducts(products);
86 event.push();
87 };
88 /**
89 * Send cart event, based on a cart item.
90 *
91 * @private
92 * @param {PageItem} cartItem Cart item from the DataLayer.
93 * @memberof AnaCapriRunner
94 */
95 AnaCapriRunner.prototype.sendCartEvent = function (cartItem) {
96 // Create a generic cart event.
97 var event = this.createCartEvent(cartItem.event);
98 // Get layer products from specific event key.
99 var layerProducts = cartItem.products;
100 if (layerProducts && layerProducts instanceof Array && layerProducts.length > 0) {
101 for (var _i = 0, layerProducts_1 = layerProducts; _i < layerProducts_1.length; _i++) {
102 var product = layerProducts_1[_i];
103 event.withProduct(product.product.baseProduct, product.quantity);
104 }
105 }
106 event.push();
107 };
108 /**
109 * Create a generic cart event.
110 *
111 * @private
112 * @param {string} _event Current event name.
113 * @return {CartEvent} Relevant cart event.
114 * @memberof AnaCapriRunner
115 */
116 AnaCapriRunner.prototype.createCartEvent = function (_event) {
117 return new cart_1.PageCartEvent();
118 };
119 return AnaCapriRunner;
120}(event_runner_1.EventRunner));
121exports.AnaCapriRunner = AnaCapriRunner;
122//# sourceMappingURL=anacapri-runner.js.map
\No newline at end of file