angular-ga
Version:
Google Analytics for your Angular application
78 lines • 10.8 kB
JavaScript
import * as tslib_1 from "tslib";
import { Injectable, Inject, Optional, EventEmitter } from '@angular/core';
import { ReplaySubject, timer, throwError, interval } from 'rxjs';
import { tap, switchMap, takeUntil, filter, first } from 'rxjs/operators';
import { GA_TOKEN, GA_OPTIONS } from './ga.token';
var GoogleAnalyticsService = /** @class */ (function () {
function GoogleAnalyticsService(trackingId, options) {
this.event = new EventEmitter();
this.pageview = new EventEmitter();
this.queue = new ReplaySubject();
if (trackingId) {
this.configure(trackingId, options);
}
}
GoogleAnalyticsService.prototype.configure = function (trackingId, options) {
var _this = this;
if (options === void 0) { options = 'auto'; }
this.ga('create', trackingId, options);
this.ga('send', 'pageview');
this.event.subscribe(function (x) {
_this.onEvent(x);
});
this.pageview.subscribe(function (x) {
_this.onPageView(x);
});
var timer$ = timer(20000)
.pipe(switchMap(function () { return throwError(new Error('Could not load GA')); }));
interval(50)
.pipe(takeUntil(timer$), filter(function () { return Boolean(window.ga); }), first(), switchMap(function () { return _this.queue; }), tap(function (args) {
var _a;
(_a = window).ga.apply(_a, tslib_1.__spread(args)); // tslint:disable-line:no-unsafe-any
}))
.subscribe();
};
GoogleAnalyticsService.prototype.set = function (key, value) {
if (typeof key !== 'string' && typeof key !== 'object') {
throw new TypeError("Expected `fieldName` to be of type `string` or `object`, got `" + typeof key + "`");
}
if (typeof key === 'string' && value === undefined) {
throw new TypeError('Expected `fieldValue` to not be `undefined`');
}
if (typeof key === 'object') {
this.ga('set', key);
}
else {
this.ga('set', key, value);
}
};
GoogleAnalyticsService.prototype.onEvent = function (event) {
this.ga('send', 'event', event.category, event.action, event.label, event.value);
};
GoogleAnalyticsService.prototype.onPageView = function (pageview) {
var fieldsObject = {};
if (pageview.title) {
fieldsObject.title = pageview.title;
}
this.ga('send', 'pageview', pageview.page, fieldsObject);
};
GoogleAnalyticsService.prototype.ga = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
this.queue.next(args);
};
GoogleAnalyticsService.ctorParameters = function () { return [
{ type: String, decorators: [{ type: Optional }, { type: Inject, args: [GA_TOKEN,] }] },
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [GA_OPTIONS,] }] }
]; };
GoogleAnalyticsService = tslib_1.__decorate([
Injectable(),
tslib_1.__param(0, Optional()), tslib_1.__param(0, Inject(GA_TOKEN)),
tslib_1.__param(1, Optional()), tslib_1.__param(1, Inject(GA_OPTIONS))
], GoogleAnalyticsService);
return GoogleAnalyticsService;
}());
export { GoogleAnalyticsService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2Euc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItZ2EvIiwic291cmNlcyI6WyJsaWIvZ2Euc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFNaEQ7SUFLQyxnQ0FDK0IsVUFBa0IsRUFDaEIsT0FBaUM7UUFObEUsVUFBSyxHQUF3QixJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ3ZELGFBQVEsR0FBMkIsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUMvQyxVQUFLLEdBQTZCLElBQUksYUFBYSxFQUFhLENBQUM7UUFNakYsSUFBSSxVQUFVLEVBQUU7WUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNwQztJQUNGLENBQUM7SUFFRCwwQ0FBUyxHQUFULFVBQVUsVUFBa0IsRUFBRSxPQUEwQztRQUF4RSxpQkE0QkM7UUE1QjZCLHdCQUFBLEVBQUEsZ0JBQTBDO1FBQ3ZFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFDLENBQVE7WUFDN0IsS0FBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENB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QUFBLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtPQVBwQixzQkFBc0IsQ0ErRWxDO0lBQUQsNkJBQUM7Q0FBQSxBQS9FRCxJQStFQztTQS9FWSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdCwgT3B0aW9uYWwsIEV2ZW50RW1pdHRlcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JlcGxheVN1YmplY3QsIHRpbWVyLCB0aHJvd0Vycm9yLCBpbnRlcnZhbH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3RhcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIGZpbHRlciwgZmlyc3R9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtHQV9UT0tFTiwgR0FfT1BUSU9OU30gZnJvbSAnLi9nYS50b2tlbic7XG5pbXBvcnQge0V2ZW50fSBmcm9tICcuL2ludGVyZmFjZXMvZXZlbnQnO1xuaW1wb3J0IHtQYWdlVmlld30gZnJvbSAnLi9pbnRlcmZhY2VzL3BhZ2V2aWV3JztcbmltcG9ydCB7VHJhY2tpbmdPcHRpb25zfSBmcm9tICcuL2ludGVyZmFjZXMvdHJhY2tpbmctb3B0aW9ucyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHb29nbGVBbmFseXRpY3NTZXJ2aWNlIHtcblx0ZXZlbnQ6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXHRwYWdldmlldzogRXZlbnRFbWl0dGVyPFBhZ2VWaWV3PiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZVZpZXc+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgcXVldWU6IFJlcGxheVN1YmplY3Q8dW5rbm93bltdPiA9IG5ldyBSZXBsYXlTdWJqZWN0PHVua25vd25bXT4oKTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRAT3B0aW9uYWwoKSBASW5qZWN0KEdBX1RPS0VOKSB0cmFja2luZ0lkOiBzdHJpbmcsXG5cdFx0QE9wdGlvbmFsKCkgQEluamVjdChHQV9PUFRJT05TKSBvcHRpb25zOiBUcmFja2luZ09wdGlvbnMgfCBzdHJpbmdcblx0KSB7XG5cdFx0aWYgKHRyYWNraW5nSWQpIHtcblx0XHRcdHRoaXMuY29uZmlndXJlKHRyYWNraW5nSWQsIG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdGNvbmZpZ3VyZSh0cmFja2luZ0lkOiBzdHJpbmcsIG9wdGlvbnM6IFRyYWNraW5nT3B0aW9ucyB8IHN0cmluZyA9ICdhdXRvJyk6IHZvaWQge1xuXHRcdHRoaXMuZ2EoJ2NyZWF0ZScsIHRyYWNraW5nSWQsIG9wdGlvbnMpO1xuXHRcdHRoaXMuZ2EoJ3NlbmQnLCAncGFnZXZpZXcnKTtcblxuXHRcdHRoaXMuZXZlbnQuc3Vic2NyaWJlKCh4OiBFdmVudCkgPT4ge1xuXHRcdFx0dGhpcy5vbkV2ZW50KHgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5wYWdldmlldy5zdWJzY3JpYmUoKHg6IFBhZ2VWaWV3KSA9PiB7XG5cdFx0XHR0aGlzLm9uUGFnZVZpZXcoeCk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCB0aW1lciQgPSB0aW1lcigyMF8wMDApXG5cdFx0XHQucGlwZShcblx0XHRcdFx0c3dpdGNoTWFwKCgpID0+IHRocm93RXJyb3IobmV3IEVycm9yKCdDb3VsZCBub3QgbG9hZCBHQScpKSlcblx0XHRcdCk7XG5cblx0XHRpbnRlcnZhbCg1MClcblx0XHRcdC5waXBlKFxuXHRcdFx0XHR0YWtlVW50aWwodGltZXIkKSxcblx0XHRcdFx0ZmlsdGVyKCgpID0+IEJvb2xlYW4oKHdpbmRvdyBhcyBhbnkpLmdhKSksXG5cdFx0XHRcdGZpcnN0KCksXG5cdFx0XHRcdHN3aXRjaE1hcCgoKSA9PiB0aGlzLnF1ZXVlKSxcblx0XHRcdFx0dGFwKGFyZ3MgPT4ge1xuXHRcdFx0XHRcdCh3aW5kb3cgYXMgYW55KS5nYSguLi5hcmdzKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby11bnNhZmUtYW55XG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHRzZXQoZmllbGRzT2JqZWN0OiBhbnkpOiB2b2lkO1xuXHRzZXQoZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkVmFsdWU6IGFueSk6IHZvaWQ7XG5cdHNldChrZXk6IGFueSwgdmFsdWU/OiBhbnkpOiB2b2lkIHtcblx0XHRpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIGtleSAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYGZpZWxkTmFtZVxcYCB0byBiZSBvZiB0eXBlIFxcYHN0cmluZ1xcYCBvciBcXGBvYmplY3RcXGAsIGdvdCBcXGAke3R5cGVvZiBrZXl9XFxgYCk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGBmaWVsZFZhbHVlYCB0byBub3QgYmUgYHVuZGVmaW5lZGAnKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHRoaXMuZ2EoJ3NldCcsIGtleSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZ2EoJ3NldCcsIGtleSwgdmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgb25FdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLmdhKCdzZW5kJywgJ2V2ZW50JywgZXZlbnQuY2F0ZWdvcnksIGV2ZW50LmFjdGlvbiwgZXZlbnQubGFiZWwsIGV2ZW50LnZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgb25QYWdlVmlldyhwYWdldmlldzogUGFnZVZpZXcpOiB2b2lkIHtcblx0XHRjb25zdCBmaWVsZHNPYmplY3Q6IHt0aXRsZT86IHN0cmluZ30gPSB7fTtcblxuXHRcdGlmIChwYWdldmlldy50aXRsZSkge1xuXHRcdFx0ZmllbGRzT2JqZWN0LnRpdGxlID0gcGFnZXZpZXcudGl0bGU7XG5cdFx0fVxuXG5cdFx0dGhpcy5nYSgnc2VuZCcsICdwYWdldmlldycsIHBhZ2V2aWV3LnBhZ2UsIGZpZWxkc09iamVjdCk7XG5cdH1cblxuXHRwcml2YXRlIGdhKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuXHRcdHRoaXMucXVldWUubmV4dChhcmdzKTtcblx0fVxufVxuIl19