Skip to content

Commit d73b7c8

Browse files
chore(build): Generate latest bundle [skip ci]
1 parent 97f1086 commit d73b7c8

File tree

3 files changed

+257
-14
lines changed

3 files changed

+257
-14
lines changed

dist/FacebookEventForwarder.common.js

Lines changed: 82 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ function isObject(val) {
1212
}
1313

1414
var isobject = /*#__PURE__*/Object.freeze({
15+
__proto__: null,
1516
'default': isObject
1617
});
1718

@@ -83,11 +84,14 @@ var isobject$1 = getCjsExportFromNamespace(isobject);
8384
constructor = function () {
8485
var self = this,
8586
isInitialized = false,
86-
reportingService = null;
87+
reportingService = null,
88+
settings,
89+
productAttributeMapping;
8790

8891
self.name = name;
8992

90-
function initForwarder(settings, service, testMode, trackerId, userAttributes, userIdentities) {
93+
function initForwarder(forwarderSettings, service, testMode, trackerId, userAttributes, userIdentities) {
94+
settings = forwarderSettings;
9195
reportingService = service;
9296

9397
SupportedCommerceTypes = [
@@ -130,6 +134,8 @@ var isobject$1 = getCjsExportFromNamespace(isobject);
130134
fbq.disablePushState = true;
131135
}
132136
fbq('init', settings.pixelId, visitorData);
137+
138+
loadMappings();
133139

134140
isInitialized = true;
135141

@@ -141,6 +147,12 @@ var isobject$1 = getCjsExportFromNamespace(isobject);
141147
}
142148
}
143149

150+
function loadMappings() {
151+
productAttributeMapping = settings.productAttributeMapping
152+
? JSON.parse(settings.productAttributeMapping.replace(/"/g, '"'))
153+
: [];
154+
}
155+
144156
function processEvent(event) {
145157
var reportEvent = false;
146158

@@ -229,13 +241,13 @@ var isobject$1 = getCjsExportFromNamespace(isobject);
229241
else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToCart){
230242
eventName = ADD_TO_CART_EVENT_NAME;
231243
}
232-
else{
244+
else {
233245
eventName = VIEW_CONTENT_EVENT_NAME;
234246
}
235247

236248
}
237249
else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout ||
238-
event.ProductAction.ProductActionType == mParticle.ProductActionType.Purchase) {
250+
event.ProductAction.ProductActionType == mParticle.ProductActionType.Purchase) {
239251

240252
eventName = event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout ? CHECKOUT_EVENT_NAME : PURCHASE_EVENT_NAME;
241253

@@ -250,6 +262,18 @@ var isobject$1 = getCjsExportFromNamespace(isobject);
250262
return sum;
251263
}, 0);
252264
params['num_items'] = num_items;
265+
266+
if (event.ProductAction.TransactionId) {
267+
params['order_id'] = event.ProductAction.TransactionId;
268+
}
269+
270+
// Build contents array for Purchase events
271+
if (event.ProductAction.ProductActionType == mParticle.ProductActionType.Purchase) {
272+
var contents = buildProductContents(event.ProductAction.ProductList);
273+
if (contents && contents.length > 0) {
274+
params['contents'] = contents;
275+
}
276+
}
253277
}
254278
else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.RemoveFromCart) {
255279
eventName = REMOVE_FROM_CART_EVENT_NAME;
@@ -346,6 +370,60 @@ var isobject$1 = getCjsExportFromNamespace(isobject);
346370
return null;
347371
}
348372

373+
/**
374+
* Builds contents array for Facebook Pixel commerce events.
375+
* Creates a nested array of content items with product details.
376+
*
377+
* @param {Array} productList - Array of products from event.ProductAction.ProductList
378+
* @returns {Array} Array of content objects for Facebook Pixel
379+
*/
380+
function buildProductContents(productList) {
381+
if (!productList || productList.length === 0) {
382+
return [];
383+
}
384+
385+
return productList
386+
.filter(function(product) {
387+
return product && product.Sku;
388+
})
389+
.map(function(product) {
390+
var contentItem = {
391+
id: product.Sku,
392+
quantity: isNumeric(product.Quantity) ? product.Quantity : 1,
393+
name: product.Name,
394+
brand: product.Brand,
395+
category: product.Category,
396+
variant: product.Variant,
397+
item_price: isNumeric(product.Price) ? product.Price : null
398+
};
399+
400+
// Apply configured mappings to custom attributes
401+
productAttributeMapping.forEach(function(productMapping) {
402+
if (!isobject$1(productMapping) || !productMapping.map || !productMapping.value) {
403+
return;
404+
}
405+
406+
var sourceField = productMapping.map;
407+
var facebookFieldName = productMapping.value;
408+
var value = null;
409+
410+
// Check for Product level field first
411+
if (product.hasOwnProperty(sourceField)) {
412+
value = product[sourceField];
413+
}
414+
// then check for Product.Attributes level field
415+
else if (product.Attributes && product.Attributes[sourceField]) {
416+
value = product.Attributes[sourceField];
417+
}
418+
419+
if (value !== null && value !== undefined) {
420+
contentItem[facebookFieldName] = value;
421+
}
422+
});
423+
return contentItem;
424+
});
425+
}
426+
349427
// https://developers.facebook.com/docs/marketing-api/conversions-api/deduplicate-pixel-and-server-events#event-deduplication-options
350428
function createEventId(event) {
351429
return {

dist/FacebookEventForwarder.esm.js

Lines changed: 94 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,17 @@ function isObject(val) {
99
return val != null && typeof val === 'object' && Array.isArray(val) === false;
1010
}
1111

12+
var isobject = /*#__PURE__*/Object.freeze({
13+
__proto__: null,
14+
'default': isObject
15+
});
16+
17+
function getCjsExportFromNamespace (n) {
18+
return n && n['default'] || n;
19+
}
20+
21+
var isobject$1 = getCjsExportFromNamespace(isobject);
22+
1223
/* eslint-disable no-undef */
1324
// Copyright 2015 mParticle, Inc.
1425
//
@@ -71,11 +82,14 @@ function isObject(val) {
7182
constructor = function () {
7283
var self = this,
7384
isInitialized = false,
74-
reportingService = null;
85+
reportingService = null,
86+
settings,
87+
productAttributeMapping;
7588

7689
self.name = name;
7790

78-
function initForwarder(settings, service, testMode, trackerId, userAttributes, userIdentities) {
91+
function initForwarder(forwarderSettings, service, testMode, trackerId, userAttributes, userIdentities) {
92+
settings = forwarderSettings;
7993
reportingService = service;
8094

8195
SupportedCommerceTypes = [
@@ -118,6 +132,8 @@ function isObject(val) {
118132
fbq.disablePushState = true;
119133
}
120134
fbq('init', settings.pixelId, visitorData);
135+
136+
loadMappings();
121137

122138
isInitialized = true;
123139

@@ -129,6 +145,12 @@ function isObject(val) {
129145
}
130146
}
131147

148+
function loadMappings() {
149+
productAttributeMapping = settings.productAttributeMapping
150+
? JSON.parse(settings.productAttributeMapping.replace(/"/g, '"'))
151+
: [];
152+
}
153+
132154
function processEvent(event) {
133155
var reportEvent = false;
134156

@@ -217,13 +239,13 @@ function isObject(val) {
217239
else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.AddToCart){
218240
eventName = ADD_TO_CART_EVENT_NAME;
219241
}
220-
else{
242+
else {
221243
eventName = VIEW_CONTENT_EVENT_NAME;
222244
}
223245

224246
}
225247
else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout ||
226-
event.ProductAction.ProductActionType == mParticle.ProductActionType.Purchase) {
248+
event.ProductAction.ProductActionType == mParticle.ProductActionType.Purchase) {
227249

228250
eventName = event.ProductAction.ProductActionType == mParticle.ProductActionType.Checkout ? CHECKOUT_EVENT_NAME : PURCHASE_EVENT_NAME;
229251

@@ -238,6 +260,18 @@ function isObject(val) {
238260
return sum;
239261
}, 0);
240262
params['num_items'] = num_items;
263+
264+
if (event.ProductAction.TransactionId) {
265+
params['order_id'] = event.ProductAction.TransactionId;
266+
}
267+
268+
// Build contents array for Purchase events
269+
if (event.ProductAction.ProductActionType == mParticle.ProductActionType.Purchase) {
270+
var contents = buildProductContents(event.ProductAction.ProductList);
271+
if (contents && contents.length > 0) {
272+
params['contents'] = contents;
273+
}
274+
}
241275
}
242276
else if (event.ProductAction.ProductActionType == mParticle.ProductActionType.RemoveFromCart) {
243277
eventName = REMOVE_FROM_CART_EVENT_NAME;
@@ -334,6 +368,60 @@ function isObject(val) {
334368
return null;
335369
}
336370

371+
/**
372+
* Builds contents array for Facebook Pixel commerce events.
373+
* Creates a nested array of content items with product details.
374+
*
375+
* @param {Array} productList - Array of products from event.ProductAction.ProductList
376+
* @returns {Array} Array of content objects for Facebook Pixel
377+
*/
378+
function buildProductContents(productList) {
379+
if (!productList || productList.length === 0) {
380+
return [];
381+
}
382+
383+
return productList
384+
.filter(function(product) {
385+
return product && product.Sku;
386+
})
387+
.map(function(product) {
388+
var contentItem = {
389+
id: product.Sku,
390+
quantity: isNumeric(product.Quantity) ? product.Quantity : 1,
391+
name: product.Name,
392+
brand: product.Brand,
393+
category: product.Category,
394+
variant: product.Variant,
395+
item_price: isNumeric(product.Price) ? product.Price : null
396+
};
397+
398+
// Apply configured mappings to custom attributes
399+
productAttributeMapping.forEach(function(productMapping) {
400+
if (!isobject$1(productMapping) || !productMapping.map || !productMapping.value) {
401+
return;
402+
}
403+
404+
var sourceField = productMapping.map;
405+
var facebookFieldName = productMapping.value;
406+
var value = null;
407+
408+
// Check for Product level field first
409+
if (product.hasOwnProperty(sourceField)) {
410+
value = product[sourceField];
411+
}
412+
// then check for Product.Attributes level field
413+
else if (product.Attributes && product.Attributes[sourceField]) {
414+
value = product.Attributes[sourceField];
415+
}
416+
417+
if (value !== null && value !== undefined) {
418+
contentItem[facebookFieldName] = value;
419+
}
420+
});
421+
return contentItem;
422+
});
423+
}
424+
337425
// https://developers.facebook.com/docs/marketing-api/conversions-api/deduplicate-pixel-and-server-events#event-deduplication-options
338426
function createEventId(event) {
339427
return {
@@ -355,12 +443,12 @@ function isObject(val) {
355443
return;
356444
}
357445

358-
if (!isObject(config)) {
446+
if (!isobject$1(config)) {
359447
console.log('\'config\' must be an object. You passed in a ' + typeof config);
360448
return;
361449
}
362450

363-
if (isObject(config.kits)) {
451+
if (isobject$1(config.kits)) {
364452
config.kits[name] = {
365453
constructor: constructor
366454
};

0 commit comments

Comments
 (0)