registerPersonalizationObject: function()

in src/apache-unomi-tracker.js [169:238]


        registerPersonalizationObject: function (personalization, variants, ajax, resultCallback) {
            var target = personalization.id;
            wem._registerPersonalizationCallback(personalization, function (result, additionalResultInfos) {
                var selectedFilter = null;
                var successfulFilters = [];

                var inControlGroup = additionalResultInfos && additionalResultInfos.inControlGroup;
                // 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];
                                }
                            }
                        }
                    }
                }

                if (resultCallback) {
                    // execute callback
                    resultCallback(successfulFilters, selectedFilter);
                } else {
                    if (selectedFilter) {
                        var targetFilters = document.getElementById(target).children;
                        for (var fIndex in targetFilters) {
                            var filter = targetFilters.item(fIndex);
                            if (filter) {
                                filter.style.display = (filter.id === selectedFilter.content) ? '' : 'none';
                            }
                        }

                        // we now add control group information to event if the user is in the control group.
                        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) {
                                selectedFilter.event.target.properties.variants.forEach(variant => variant.inControlGroup = true);
                            }
                        }

                        // send event to unomi
                        wem.collectEvent(wem._completeEvent(selectedFilter.event), function () {
                            console.info('[WEM] Personalization event successfully collected.');
                        }, function () {
                            console.error('[WEM] Could not send personalization event.');
                        });

                        //Trigger variant display event for personalization
                        wem._dispatchJSExperienceDisplayedEvent(selectedFilter.event);
                    } else {
                        var elements = document.getElementById(target).children;
                        for (var eIndex in elements) {
                            var el = elements.item(eIndex);
                            el.style.display = 'none';
                        }
                    }
                }
            });
        },