registerPersonalizationObject: function()

in src/apache-unomi-tracker.js [191:266]


        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 = /** @type {HTMLElement} */(document.getElementById(target)).children;
                        for (var fIndex in targetFilters) {
                            // @ts-expect-error The indexing is unsafe
                            var filter = /** @type {HTMLElement | null} */(targetFilters.item(fIndex));
                            if (filter) {
                                filter.style.display = (filter.id === selectedFilter.content) ? '' : 'none';
                            }
                        }
                        if (selectedFilter.event) {
                            // we now add control group information to event if the user is in the control group.
                            if (inControlGroup) {
                                console.debug('[WEM] Profile is in control group for target: ' + target + ', adding to personalization event...');
                                // @ts-expect-error The properties are not defined
                                selectedFilter.event.target.properties.inControlGroup = true;
                                // @ts-expect-error The properties are not defined
                                if (selectedFilter.event.target.properties.variants) {
                                    // @ts-expect-error The properties are not defined
                                    selectedFilter.event.target.properties.variants.forEach(variant => variant.inControlGroup = true);
                                }
                            }

                            // send event to unomi
                            wem.collectEvent(wem._completeEvent(selectedFilter.event), function () {
                                console.debug('[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 = /** @type {HTMLElement} */(document.getElementById(target)).children;
                        for (var eIndex in elements) {
                            // @ts-expect-error The indexing is unsafe
                            var el = /** @type {HTMLElement} */(elements.item(eIndex));
                            el.style.display = 'none';
                        }
                    }
                }
            });
        },