@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
79 lines • 11.1 kB
JavaScript
import { NgModule } from '@angular/core';
import { combineLatest } from 'rxjs';
import { filter } from 'rxjs/operators';
import { CookieBannerService } from '../bootstrap/cookie-banner/cookie-banner.service';
import { AppStateService } from '../common/ui-state.service';
import { GainsightService } from './gainsight.service';
import { ProductExperienceDirective } from './product-experience.directive';
import { UserEngagementsService } from './user-engagements.service';
import * as i0 from "@angular/core";
import * as i1 from "../common/ui-state.service";
import * as i2 from "./gainsight.service";
import * as i3 from "../bootstrap/cookie-banner/cookie-banner.service";
import * as i4 from "./user-engagements.service";
/**
* This module enables an tenant to activate the product experience
* software [Gainsight](https://www.gainsight.com/product-experience/) to help
* and track user actions.
*/
export class ProductExperienceModule {
constructor(appState, gainsightService, cookieBannerService,
// Don't remove it, otherwise UserEngagementsService won't be initialized.
userEngagementsService) {
this.appState = appState;
this.gainsightService = gainsightService;
this.cookieBannerService = cookieBannerService;
this.userEngagementsService = userEngagementsService;
/**
* Check if the Gainsight tracking is disabled in the application apptions. If so, exit early without processing further.
*/
if (this.gainsightService.isTrackingDisabled()) {
return;
}
this.toggleUserTrackingObservable();
}
/**
* Observes several factors to determine the state of user tracking and manages the visibility of Gainsight engagements.
* It watches for changes in the current tenant, the state of the cookie banner, and user's preferences for Gainsight engagements.
*
* 1. If the cookie banner is being displayed, it returns without making any changes.
* 2. If Gainsight is disabled at the tenant level via custom properties, it returns without making any changes.
* 3. If the conditions are met for loading the Gainsight tag, it loads the tag.
*/
toggleUserTrackingObservable() {
combineLatest([
this.appState.currentTenant.pipe(filter(Boolean)),
this.cookieBannerService.isCookieBannerShowed$
]).subscribe(async ([currentTenant, isCookieBannerShowed]) => {
if (isCookieBannerShowed) {
return;
}
const { customProperties } = currentTenant;
if (this.gainsightService.isGainsightDisabledAtTenantCustomProperties(customProperties)) {
return;
}
if (this.shouldLoadTag()) {
await this.gainsightService.loadTag(currentTenant, await this.gainsightService.shouldSendPiiData());
}
});
}
/**
* Determines if a tracking tag should be loaded based on cookie preferences.
* @returns `true` if user cookie preferences exist, otherwise `false`.
*/
shouldLoadTag() {
return !!this.cookieBannerService.getUserCookiePreferences();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductExperienceModule, deps: [{ token: i1.AppStateService }, { token: i2.GainsightService }, { token: i3.CookieBannerService }, { token: i4.UserEngagementsService }], target: i0.ɵɵFactoryTarget.NgModule }); }
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: ProductExperienceModule, declarations: [ProductExperienceDirective], exports: [ProductExperienceDirective] }); }
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductExperienceModule, providers: [GainsightService, UserEngagementsService] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductExperienceModule, decorators: [{
type: NgModule,
args: [{
declarations: [ProductExperienceDirective],
exports: [ProductExperienceDirective],
providers: [GainsightService, UserEngagementsService]
}]
}], ctorParameters: () => [{ type: i1.AppStateService }, { type: i2.GainsightService }, { type: i3.CookieBannerService }, { type: i4.UserEngagementsService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1leHBlcmllbmNlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvcHJvZHVjdC1leHBlcmllbmNlL3Byb2R1Y3QtZXhwZXJpZW5jZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztBQUNwRTs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxZQUNVLFFBQXlCLEVBQ3pCLGdCQUFrQyxFQUNsQyxtQkFBd0M7SUFDaEQsMEVBQTBFO0lBQ2xFLHNCQUE4QztRQUo5QyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFFeEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUV0RDs7V0FFRztRQUNILElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztZQUMvQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsNEJBQTRCO1FBQzFCLGFBQWEsQ0FBQztZQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQWlCLE9BQU8sQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUI7U0FDL0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxFQUFFO1lBQzNELElBQUksb0JBQW9CLEVBQUUsQ0FBQztnQkFDekIsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxhQUFhLENBQUM7WUFFM0MsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsMkNBQTJDLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUN4RixPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FDakMsYUFBYSxFQUNiLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQ2hELENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYTtRQUNYLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQy9ELENBQUM7K0dBdERVLHVCQUF1QjtnSEFBdkIsdUJBQXVCLGlCQUpuQiwwQkFBMEIsYUFDL0IsMEJBQTBCO2dIQUd6Qix1QkFBdUIsYUFGdkIsQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQzs7NEZBRTFDLHVCQUF1QjtrQkFMbkMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztvQkFDMUMsT0FBTyxFQUFFLENBQUMsMEJBQTBCLENBQUM7b0JBQ3JDLFNBQVMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDO2lCQUN0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQ3VycmVudFRlbmFudCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvb2tpZUJhbm5lclNlcnZpY2UgfSBmcm9tICcuLi9ib290c3RyYXAvY29va2llLWJhbm5lci9jb29raWUtYmFubmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2FpbnNpZ2h0U2VydmljZSB9IGZyb20gJy4vZ2FpbnNpZ2h0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvZHVjdEV4cGVyaWVuY2VEaXJlY3RpdmUgfSBmcm9tICcuL3Byb2R1Y3QtZXhwZXJpZW5jZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVXNlckVuZ2FnZW1lbnRzU2VydmljZSB9IGZyb20gJy4vdXNlci1lbmdhZ2VtZW50cy5zZXJ2aWNlJztcbi8qKlxuICogVGhpcyBtb2R1bGUgZW5hYmxlcyBhbiB0ZW5hbnQgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QgZXhwZXJpZW5jZVxuICogc29mdHdhcmUgW0dhaW5zaWdodF0oaHR0cHM6Ly93d3cuZ2FpbnNpZ2h0LmNvbS9wcm9kdWN0LWV4cGVyaWVuY2UvKSB0byBoZWxwXG4gKiBhbmQgdHJhY2sgdXNlciBhY3Rpb25zLlxuICovXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtQcm9kdWN0RXhwZXJpZW5jZURpcmVjdGl2ZV0sXG4gIGV4cG9ydHM6IFtQcm9kdWN0RXhwZXJpZW5jZURpcmVjdGl2ZV0sXG4gIHByb3ZpZGVyczogW0dhaW5zaWdodFNlcnZpY2UsIFVzZXJFbmdhZ2VtZW50c1NlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3RFeHBlcmllbmNlTW9kdWxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZSxcbiAgICBwcml2YXRlIGNvb2tpZUJhbm5lclNlcnZpY2U6IENvb2tpZUJhbm5lclNlcnZpY2UsXG4gICAgLy8gRG9uJ3QgcmVtb3ZlIGl0LCBvdGhlcndpc2UgVXNlckVuZ2FnZW1lbnRzU2VydmljZSB3b24ndCBiZSBpbml0aWFsaXplZC5cbiAgICBwcml2YXRlIHVzZXJFbmdhZ2VtZW50c1NlcnZpY2U6IFVzZXJFbmdhZ2VtZW50c1NlcnZpY2VcbiAgKSB7XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIEdhaW5zaWdodCB0cmFja2luZyBpcyBkaXNhYmxlZCBpbiB0aGUgYXBwbGljYXRpb24gYXBwdGlvbnMuIElmIHNvLCBleGl0IGVhcmx5IHdpdGhvdXQgcHJvY2Vzc2luZyBmdXJ0aGVyLlxuICAgICAqL1xuICAgIGlmICh0aGlzLmdhaW5zaWdodFNlcnZpY2UuaXNUcmFja2luZ0Rpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50b2dnbGVVc2VyVHJhY2tpbmdPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2ZXMgc2V2ZXJhbCBmYWN0b3JzIHRvIGRldGVybWluZSB0aGUgc3RhdGUgb2YgdXNlciB0cmFja2luZyBhbmQgbWFuYWdlcyB0aGUgdmlzaWJpbGl0eSBvZiBHYWluc2lnaHQgZW5nYWdlbWVudHMuXG4gICAqIEl0IHdhdGNoZXMgZm9yIGNoYW5nZXMgaW4gdGhlIGN1cnJlbnQgdGVuYW50LCB0aGUgc3RhdGUgb2YgdGhlIGNvb2tpZSBiYW5uZXIsIGFuZCB1c2VyJ3MgcHJlZmVyZW5jZXMgZm9yIEdhaW5zaWdodCBlbmdhZ2VtZW50cy5cbiAgICpcbiAgICogMS4gSWYgdGhlIGNvb2tpZSBiYW5uZXIgaXMgYmVpbmcgZGlzcGxheWVkLCBpdCByZXR1cm5zIHdpdGhvdXQgbWFraW5nIGFueSBjaGFuZ2VzLlxuICAgKiAyLiBJZiBHYWluc2lnaHQgaXMgZGlzYWJsZWQgYXQgdGhlIHRlbmFudCBsZXZlbCB2aWEgY3VzdG9tIHByb3BlcnRpZXMsIGl0IHJldHVybnMgd2l0aG91dCBtYWtpbmcgYW55IGNoYW5nZXMuXG4gICAqIDMuIElmIHRoZSBjb25kaXRpb25zIGFyZSBtZXQgZm9yIGxvYWRpbmcgdGhlIEdhaW5zaWdodCB0YWcsIGl0IGxvYWRzIHRoZSB0YWcuXG4gICAqL1xuICB0b2dnbGVVc2VyVHJhY2tpbmdPYnNlcnZhYmxlKCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5hcHBTdGF0ZS5jdXJyZW50VGVuYW50LnBpcGUoZmlsdGVyPElDdXJyZW50VGVuYW50PihCb29sZWFuKSksXG4gICAgICB0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuaXNDb29raWVCYW5uZXJTaG93ZWQkXG4gICAgXSkuc3Vic2NyaWJlKGFzeW5jIChbY3VycmVudFRlbmFudCwgaXNDb29raWVCYW5uZXJTaG93ZWRdKSA9PiB7XG4gICAgICBpZiAoaXNDb29raWVCYW5uZXJTaG93ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gPSBjdXJyZW50VGVuYW50O1xuXG4gICAgICBpZiAodGhpcy5nYWluc2lnaHRTZXJ2aWNlLmlzR2FpbnNpZ2h0RGlzYWJsZWRBdFRlbmFudEN1c3RvbVByb3BlcnRpZXMoY3VzdG9tUHJvcGVydGllcykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zaG91bGRMb2FkVGFnKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLmxvYWRUYWcoXG4gICAgICAgICAgY3VycmVudFRlbmFudCxcbiAgICAgICAgICBhd2FpdCB0aGlzLmdhaW5zaWdodFNlcnZpY2Uuc2hvdWxkU2VuZFBpaURhdGEoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYSB0cmFja2luZyB0YWcgc2hvdWxkIGJlIGxvYWRlZCBiYXNlZCBvbiBjb29raWUgcHJlZmVyZW5jZXMuXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB1c2VyIGNvb2tpZSBwcmVmZXJlbmNlcyBleGlzdCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBzaG91bGRMb2FkVGFnKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuY29va2llQmFubmVyU2VydmljZS5nZXRVc2VyQ29va2llUHJlZmVyZW5jZXMoKTtcbiAgfVxufVxuIl19