@ninetailed/experience.js-plugin-google-tagmanager
Version: 
Ninetailed SDK plugin for Google Tag Manager
50 lines • 2.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NinetailedGoogleTagmanagerPlugin = void 0;
const tslib_1 = require("tslib");
const experience_js_plugin_analytics_1 = require("@ninetailed/experience.js-plugin-analytics");
const experience_js_shared_1 = require("@ninetailed/experience.js-shared");
const TEMPLATE_OPTIONS = {
    interpolate: /{{([\s\S]+?)}}/g,
};
class NinetailedGoogleTagmanagerPlugin extends experience_js_plugin_analytics_1.NinetailedAnalyticsPlugin {
    constructor(options = {}) {
        super(Object.assign(Object.assign({}, options.template), { event: 'nt_experience', ninetailed_variant: '{{selectedVariantSelector}}', ninetailed_experience: '{{experience.id}}', ninetailed_experience_name: '{{experience.name}}', ninetailed_audience: '{{audience.id}}', ninetailed_component: '{{selectedVariant.id}}' }));
        this.options = options;
        this.name = 'ninetailed:googleTagmanager';
        this.initialize = () => {
            if (typeof window !== 'undefined') {
                window.dataLayer = window.dataLayer || [];
            }
        };
    }
    onTrackExperience(properties, hasSeenExperienceEventPayload) {
        var _a;
        return tslib_1.__awaiter(this, void 0, void 0, function* () {
            (_a = window.dataLayer) === null || _a === void 0 ? void 0 : _a.push(hasSeenExperienceEventPayload);
        });
    }
    onTrackComponent(properties) {
        var _a;
        return tslib_1.__awaiter(this, void 0, void 0, function* () {
            const { variant, audience, isPersonalized } = properties;
            const action = (0, experience_js_shared_1.template)(this.options.actionTemplate || 'Has Seen Experience', { component: variant, audience }, TEMPLATE_OPTIONS.interpolate);
            const label = (0, experience_js_shared_1.template)(this.options.labelTemplate ||
                '{{ baselineOrVariant }}:{{ component.id }}', {
                component: variant,
                audience,
                baselineOrVariant: isPersonalized ? 'Variant' : 'Baseline',
            }, TEMPLATE_OPTIONS.interpolate);
            (_a = window.dataLayer) === null || _a === void 0 ? void 0 : _a.push({
                event: action,
                properties: {
                    category: 'Ninetailed',
                    label,
                    nonInteraction: true,
                },
            });
        });
    }
}
exports.NinetailedGoogleTagmanagerPlugin = NinetailedGoogleTagmanagerPlugin;
//# sourceMappingURL=NinetailedGoogleTagmanagerPlugin.js.map