This is an automated email from the ASF dual-hosted git repository.

jkevan pushed a commit to branch UNOMI-681-fix-control-group-fallback
in repository https://gitbox.apache.org/repos/asf/unomi-tracker.git

commit e665a9c8b0776b0d42324c9ec5d31bf6cb5ca0bd
Author: Kevan <[email protected]>
AuthorDate: Fri Sep 30 14:44:37 2022 +0200

    UNOMI-681: fix fallback for perso in case of control group detected
---
 dist/apache-unomi-tracker.cjs.js     | 31 +++++++++++++++++++------------
 dist/apache-unomi-tracker.cjs.js.map |  2 +-
 dist/apache-unomi-tracker.esm.js     | 31 +++++++++++++++++++------------
 dist/apache-unomi-tracker.esm.js.map |  2 +-
 dist/apache-unomi-tracker.umd.js     | 31 +++++++++++++++++++------------
 dist/apache-unomi-tracker.umd.js.map |  2 +-
 src/apache-unomi-tracker.js          | 32 ++++++++++++++++++++------------
 7 files changed, 80 insertions(+), 51 deletions(-)

diff --git a/dist/apache-unomi-tracker.cjs.js b/dist/apache-unomi-tracker.cjs.js
index 4ec38f1..791540a 100644
--- a/dist/apache-unomi-tracker.cjs.js
+++ b/dist/apache-unomi-tracker.cjs.js
@@ -190,22 +190,29 @@ var newTracker = function newTracker() {
       var target = personalization.id;
 
       wem._registerPersonalizationCallback(personalization, function (result) {
+        var selectedFilter = null;
         var successfulFilters = [];
 
-        for (var i = 0; i < result.length; i++) {
-          successfulFilters.push(variants[result[i]]);
-        }
+        var inControlGroup = wem._isInControlGroup(target); // In case of 
control group Unomi is not resolving any strategy or fallback for us. So we 
have to do the fallback here.
 
-        var selectedFilter = null;
 
-        if (successfulFilters.length > 0) {
-          selectedFilter = successfulFilters[0];
-          var minPos = successfulFilters[0].position;
+        if (inControlGroup && personalization.strategyOptions && 
personalization.strategyOptions.fallback) {
+          selectedFilter = variants[personalization.strategyOptions.fallback];
+          successfulFilters.push(selectedFilter);
+        } else {
+          for (var i = 0; i < result.length; i++) {
+            successfulFilters.push(variants[result[i]]);
+          }
+
+          if (successfulFilters.length > 0) {
+            selectedFilter = successfulFilters[0];
+            var minPos = successfulFilters[0].position;
 
-          if (minPos >= 0) {
-            for (var j = 1; j < successfulFilters.length; j++) {
-              if (successfulFilters[j].position < minPos) {
-                selectedFilter = successfulFilters[j];
+            if (minPos >= 0) {
+              for (var j = 1; j < successfulFilters.length; j++) {
+                if (successfulFilters[j].position < minPos) {
+                  selectedFilter = successfulFilters[j];
+                }
               }
             }
           }
@@ -227,7 +234,7 @@ var newTracker = function newTracker() {
             } // we now add control group information to event if the user is 
in the control group.
 
 
-            if (wem._isInControlGroup(target)) {
+            if (inControlGroup) {
               console.info('[WEM] Profile is in control group for target: ' + 
target + ', adding to personalization event...');
               selectedFilter.event.target.properties.inControlGroup = true;
 
diff --git a/dist/apache-unomi-tracker.cjs.js.map 
b/dist/apache-unomi-tracker.cjs.js.map
index d1af853..297cb75 100644
--- a/dist/apache-unomi-tracker.cjs.js.map
+++ b/dist/apache-unomi-tracker.cjs.js.map
@@ -1 +1 @@
-{"version":3,"file":"apache-unomi-tracker.cjs.js","sources":["../src/apache-unomi-tracker.js","../src/index.js"],"sourcesContent":["/*\n
 * Licensed to the Apache Software Foundation (ASF) under one or more\n * 
contributor license agreements.  See the NOTICE file distributed with\n * this 
work for additional information regarding copyright ownership.\n * The ASF 
licenses this file to You under the Apache License, Version 2.0\n * (the 
\"License\"); you may not use this file except in compl [...]
\ No newline at end of file
+{"version":3,"file":"apache-unomi-tracker.cjs.js","sources":["../src/apache-unomi-tracker.js","../src/index.js"],"sourcesContent":["/*\n
 * Licensed to the Apache Software Foundation (ASF) under one or more\n * 
contributor license agreements.  See the NOTICE file distributed with\n * this 
work for additional information regarding copyright ownership.\n * The ASF 
licenses this file to You under the Apache License, Version 2.0\n * (the 
\"License\"); you may not use this file except in compl [...]
\ No newline at end of file
diff --git a/dist/apache-unomi-tracker.esm.js b/dist/apache-unomi-tracker.esm.js
index 2737539..b0da276 100644
--- a/dist/apache-unomi-tracker.esm.js
+++ b/dist/apache-unomi-tracker.esm.js
@@ -182,22 +182,29 @@ var newTracker = function newTracker() {
       var target = personalization.id;
 
       wem._registerPersonalizationCallback(personalization, function (result) {
+        var selectedFilter = null;
         var successfulFilters = [];
 
-        for (var i = 0; i < result.length; i++) {
-          successfulFilters.push(variants[result[i]]);
-        }
+        var inControlGroup = wem._isInControlGroup(target); // In case of 
control group Unomi is not resolving any strategy or fallback for us. So we 
have to do the fallback here.
 
-        var selectedFilter = null;
 
-        if (successfulFilters.length > 0) {
-          selectedFilter = successfulFilters[0];
-          var minPos = successfulFilters[0].position;
+        if (inControlGroup && personalization.strategyOptions && 
personalization.strategyOptions.fallback) {
+          selectedFilter = variants[personalization.strategyOptions.fallback];
+          successfulFilters.push(selectedFilter);
+        } else {
+          for (var i = 0; i < result.length; i++) {
+            successfulFilters.push(variants[result[i]]);
+          }
+
+          if (successfulFilters.length > 0) {
+            selectedFilter = successfulFilters[0];
+            var minPos = successfulFilters[0].position;
 
-          if (minPos >= 0) {
-            for (var j = 1; j < successfulFilters.length; j++) {
-              if (successfulFilters[j].position < minPos) {
-                selectedFilter = successfulFilters[j];
+            if (minPos >= 0) {
+              for (var j = 1; j < successfulFilters.length; j++) {
+                if (successfulFilters[j].position < minPos) {
+                  selectedFilter = successfulFilters[j];
+                }
               }
             }
           }
@@ -219,7 +226,7 @@ var newTracker = function newTracker() {
             } // we now add control group information to event if the user is 
in the control group.
 
 
-            if (wem._isInControlGroup(target)) {
+            if (inControlGroup) {
               console.info('[WEM] Profile is in control group for target: ' + 
target + ', adding to personalization event...');
               selectedFilter.event.target.properties.inControlGroup = true;
 
diff --git a/dist/apache-unomi-tracker.esm.js.map 
b/dist/apache-unomi-tracker.esm.js.map
index c2fd218..4ddc87b 100644
--- a/dist/apache-unomi-tracker.esm.js.map
+++ b/dist/apache-unomi-tracker.esm.js.map
@@ -1 +1 @@
-{"version":3,"file":"apache-unomi-tracker.esm.js","sources":["../src/apache-unomi-tracker.js","../src/index.js"],"sourcesContent":["/*\n
 * Licensed to the Apache Software Foundation (ASF) under one or more\n * 
contributor license agreements.  See the NOTICE file distributed with\n * this 
work for additional information regarding copyright ownership.\n * The ASF 
licenses this file to You under the Apache License, Version 2.0\n * (the 
\"License\"); you may not use this file except in compl [...]
\ No newline at end of file
+{"version":3,"file":"apache-unomi-tracker.esm.js","sources":["../src/apache-unomi-tracker.js","../src/index.js"],"sourcesContent":["/*\n
 * Licensed to the Apache Software Foundation (ASF) under one or more\n * 
contributor license agreements.  See the NOTICE file distributed with\n * this 
work for additional information regarding copyright ownership.\n * The ASF 
licenses this file to You under the Apache License, Version 2.0\n * (the 
\"License\"); you may not use this file except in compl [...]
\ No newline at end of file
diff --git a/dist/apache-unomi-tracker.umd.js b/dist/apache-unomi-tracker.umd.js
index 4bfff86..2db6c6c 100644
--- a/dist/apache-unomi-tracker.umd.js
+++ b/dist/apache-unomi-tracker.umd.js
@@ -1837,22 +1837,29 @@
         var target = personalization.id;
 
         wem._registerPersonalizationCallback(personalization, function 
(result) {
+          var selectedFilter = null;
           var successfulFilters = [];
 
-          for (var i = 0; i < result.length; i++) {
-            successfulFilters.push(variants[result[i]]);
-          }
+          var inControlGroup = wem._isInControlGroup(target); // In case of 
control group Unomi is not resolving any strategy or fallback for us. So we 
have to do the fallback here.
 
-          var selectedFilter = null;
 
-          if (successfulFilters.length > 0) {
-            selectedFilter = successfulFilters[0];
-            var minPos = successfulFilters[0].position;
+          if (inControlGroup && personalization.strategyOptions && 
personalization.strategyOptions.fallback) {
+            selectedFilter = 
variants[personalization.strategyOptions.fallback];
+            successfulFilters.push(selectedFilter);
+          } else {
+            for (var i = 0; i < result.length; i++) {
+              successfulFilters.push(variants[result[i]]);
+            }
+
+            if (successfulFilters.length > 0) {
+              selectedFilter = successfulFilters[0];
+              var minPos = successfulFilters[0].position;
 
-            if (minPos >= 0) {
-              for (var j = 1; j < successfulFilters.length; j++) {
-                if (successfulFilters[j].position < minPos) {
-                  selectedFilter = successfulFilters[j];
+              if (minPos >= 0) {
+                for (var j = 1; j < successfulFilters.length; j++) {
+                  if (successfulFilters[j].position < minPos) {
+                    selectedFilter = successfulFilters[j];
+                  }
                 }
               }
             }
@@ -1874,7 +1881,7 @@
               } // we now add control group information to event if the user 
is in the control group.
 
 
-              if (wem._isInControlGroup(target)) {
+              if (inControlGroup) {
                 console.info('[WEM] Profile is in control group for target: ' 
+ target + ', adding to personalization event...');
                 selectedFilter.event.target.properties.inControlGroup = true;
 
diff --git a/dist/apache-unomi-tracker.umd.js.map 
b/dist/apache-unomi-tracker.umd.js.map
index c7f9638..a5dbe2d 100644
--- a/dist/apache-unomi-tracker.umd.js.map
+++ b/dist/apache-unomi-tracker.umd.js.map
@@ -1 +1 @@
-{"version":3,"file":"apache-unomi-tracker.umd.js","sources":["../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/es6-crawler-detect/src/lib/crawler/provider.js","../node_modules/es6-crawler-detect/src/lib/crawler/crawlers.js","../node_modules/es6-crawler-detect/src/lib/crawler/exclusions.js","../node_modules/es6-crawler-detect/src/lib/crawler/headers.js","../node_modules/es6-crawler-detect/src/lib/crawler.js","../node_modules/es6-crawler-detect/src/index.js","../src/a
 [...]
\ No newline at end of file
+{"version":3,"file":"apache-unomi-tracker.umd.js","sources":["../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/es6-crawler-detect/src/lib/crawler/provider.js","../node_modules/es6-crawler-detect/src/lib/crawler/crawlers.js","../node_modules/es6-crawler-detect/src/lib/crawler/exclusions.js","../node_modules/es6-crawler-detect/src/lib/crawler/headers.js","../node_modules/es6-crawler-detect/src/lib/crawler.js","../node_modules/es6-crawler-detect/src/index.js","../src/a
 [...]
\ No newline at end of file
diff --git a/src/apache-unomi-tracker.js b/src/apache-unomi-tracker.js
index 7aa1674..ffe8fd8 100644
--- a/src/apache-unomi-tracker.js
+++ b/src/apache-unomi-tracker.js
@@ -169,19 +169,27 @@ export const newTracker = () => {
         registerPersonalizationObject: function (personalization, variants, 
ajax, resultCallback) {
             var target = personalization.id;
             wem._registerPersonalizationCallback(personalization, function 
(result) {
+                var selectedFilter = null;
                 var successfulFilters = [];
-                for (var i = 0; i < result.length; i++) {
-                    successfulFilters.push(variants[result[i]]);
-                }
 
-                var selectedFilter = null;
-                if (successfulFilters.length > 0) {
-                    selectedFilter = successfulFilters[0];
-                    var minPos = successfulFilters[0].position;
-                    if (minPos >= 0) {
-                        for (var j = 1; j < successfulFilters.length; j++) {
-                            if (successfulFilters[j].position < minPos) {
-                                selectedFilter = successfulFilters[j];
+                var inControlGroup = wem._isInControlGroup(target);
+                // In case of control group Unomi is not resolving any 
strategy or fallback for us. So we have to do the fallback here.
+                if (inControlGroup && personalization.strategyOptions && 
personalization.strategyOptions.fallback) {
+                    selectedFilter = 
variants[personalization.strategyOptions.fallback];
+                    successfulFilters.push(selectedFilter);
+                } else {
+                    for (var i = 0; i < result.length; i++) {
+                        successfulFilters.push(variants[result[i]]);
+                    }
+
+                    if (successfulFilters.length > 0) {
+                        selectedFilter = successfulFilters[0];
+                        var minPos = successfulFilters[0].position;
+                        if (minPos >= 0) {
+                            for (var j = 1; j < successfulFilters.length; j++) 
{
+                                if (successfulFilters[j].position < minPos) {
+                                    selectedFilter = successfulFilters[j];
+                                }
                             }
                         }
                     }
@@ -201,7 +209,7 @@ export const newTracker = () => {
                         }
 
                         // we now add control group information to event if 
the user is in the control group.
-                        if (wem._isInControlGroup(target)) {
+                        if (inControlGroup) {
                             console.info('[WEM] Profile is in control group 
for target: ' + target + ', adding to personalization event...');
                             
selectedFilter.event.target.properties.inControlGroup = true;
                             if 
(selectedFilter.event.target.properties.variants) {

Reply via email to