evergage-datalayer
Version:
Listener and API for fetching current Evergage campaig information in a users session to be used in an a/b test.
42 lines (41 loc) • 1.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var canUseDOM = typeof window !== "undefined";
var evergageReady = typeof Evergage !== "undefined";
var currentCampaigns = [];
var campaignListeners = [];
(function () {
if (canUseDOM && evergageReady) {
Evergage.addCampaignResponseListener(function (x) { return pushUpdates(x.campaignResponses); });
}
})();
exports.subscribeToCampaign = function (callback, campaignName) {
var currentListener = campaignListeners[campaignName];
var currentCampaign = currentCampaigns[campaignName];
if (!currentListener) {
campaignListeners[campaignName] = [];
}
if (currentCampaign) {
callback(currentCampaign);
}
campaignListeners[campaignName].push(callback);
};
var pushUpdates = function (responses) {
responses.forEach(function (campaign) {
var listeners = campaignListeners[campaign.campaignName];
var hasListeners = Array.isArray(listeners) && listeners.length > 0;
storeCampaign(campaign);
if (!hasListeners) {
return;
}
campaignListeners[campaign.campaignName].forEach(function (cb) {
cb(campaign);
});
});
};
var storeCampaign = function (evergageCampaign) {
if (!currentCampaigns[evergageCampaign.campaignName]) {
currentCampaigns[evergageCampaign.campaignName] = [];
}
currentCampaigns[evergageCampaign.campaignName] = evergageCampaign;
};