angular-ga
Version:
Google Analytics for your Angular application
70 lines • 10.1 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';
let GoogleAnalyticsService = class GoogleAnalyticsService {
constructor(trackingId, options) {
this.event = new EventEmitter();
this.pageview = new EventEmitter();
this.queue = new ReplaySubject();
if (trackingId) {
this.configure(trackingId, options);
}
}
configure(trackingId, options = 'auto') {
this.ga('create', trackingId, options);
this.ga('send', 'pageview');
this.event.subscribe((x) => {
this.onEvent(x);
});
this.pageview.subscribe((x) => {
this.onPageView(x);
});
const timer$ = timer(20000)
.pipe(switchMap(() => throwError(new Error('Could not load GA'))));
interval(50)
.pipe(takeUntil(timer$), filter(() => Boolean(window.ga)), first(), switchMap(() => this.queue), tap(args => {
window.ga(...args); // tslint:disable-line:no-unsafe-any
}))
.subscribe();
}
set(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);
}
}
onEvent(event) {
this.ga('send', 'event', event.category, event.action, event.label, event.value);
}
onPageView(pageview) {
const fieldsObject = {};
if (pageview.title) {
fieldsObject.title = pageview.title;
}
this.ga('send', 'pageview', pageview.page, fieldsObject);
}
ga(...args) {
this.queue.next(args);
}
};
GoogleAnalyticsService.ctorParameters = () => [
{ 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);
export { GoogleAnalyticsService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2Euc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItZ2EvIiwic291cmNlcyI6WyJsaWIvZ2Euc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFNaEQsSUFBYSxzQkFBc0IsR0FBbkMsTUFBYSxzQkFBc0I7SUFLbEMsWUFDK0IsVUFBa0IsRUFDaEIsT0FBaUM7UUFObEUsVUFBSyxHQUF3QixJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ3ZELGFBQVEsR0FBMkIsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUMvQyxVQUFLLEdBQTZCLElBQUksYUFBYSxFQUFhLENBQUM7UUFNakYsSUFBSSxVQUFVLEVBQUU7WUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNwQztJQUNGLENBQUM7SUFFRCxTQUFTLENBQUMsVUFBa0IsRUFBRSxVQUFvQyxNQUFNO1FBQ3ZFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQVEsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxD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dGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdCwgT3B0aW9uYWwsIEV2ZW50RW1pdHRlcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JlcGxheVN1YmplY3QsIHRpbWVyLCB0aHJvd0Vycm9yLCBpbnRlcnZhbH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3RhcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIGZpbHRlciwgZmlyc3R9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtHQV9UT0tFTiwgR0FfT1BUSU9OU30gZnJvbSAnLi9nYS50b2tlbic7XG5pbXBvcnQge0V2ZW50fSBmcm9tICcuL2ludGVyZmFjZXMvZXZlbnQnO1xuaW1wb3J0IHtQYWdlVmlld30gZnJvbSAnLi9pbnRlcmZhY2VzL3BhZ2V2aWV3JztcbmltcG9ydCB7VHJhY2tpbmdPcHRpb25zfSBmcm9tICcuL2ludGVyZmFjZXMvdHJhY2tpbmctb3B0aW9ucyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHb29nbGVBbmFseXRpY3NTZXJ2aWNlIHtcblx0ZXZlbnQ6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXHRwYWdldmlldzogRXZlbnRFbWl0dGVyPFBhZ2VWaWV3PiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZVZpZXc+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgcXVldWU6IFJlcGxheVN1YmplY3Q8dW5rbm93bltdPiA9IG5ldyBSZXBsYXlTdWJqZWN0PHVua25vd25bXT4oKTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRAT3B0aW9uYWwoKSBASW5qZWN0KEdBX1RPS0VOKSB0cmFja2luZ0lkOiBzdHJpbmcsXG5cdFx0QE9wdGlvbmFsKCkgQEluamVjdChHQV9PUFRJT05TKSBvcHRpb25zOiBUcmFja2luZ09wdGlvbnMgfCBzdHJpbmdcblx0KSB7XG5cdFx0aWYgKHRyYWNraW5nSWQpIHtcblx0XHRcdHRoaXMuY29uZmlndXJlKHRyYWNraW5nSWQsIG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdGNvbmZpZ3VyZSh0cmFja2luZ0lkOiBzdHJpbmcsIG9wdGlvbnM6IFRyYWNraW5nT3B0aW9ucyB8IHN0cmluZyA9ICdhdXRvJyk6IHZvaWQge1xuXHRcdHRoaXMuZ2EoJ2NyZWF0ZScsIHRyYWNraW5nSWQsIG9wdGlvbnMpO1xuXHRcdHRoaXMuZ2EoJ3NlbmQnLCAncGFnZXZpZXcnKTtcblxuXHRcdHRoaXMuZXZlbnQuc3Vic2NyaWJlKCh4OiBFdmVudCkgPT4ge1xuXHRcdFx0dGhpcy5vbkV2ZW50KHgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5wYWdldmlldy5zdWJzY3JpYmUoKHg6IFBhZ2VWaWV3KSA9PiB7XG5cdFx0XHR0aGlzLm9uUGFnZVZpZXcoeCk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCB0aW1lciQgPSB0aW1lcigyMF8wMDApXG5cdFx0XHQucGlwZShcblx0XHRcdFx0c3dpdGNoTWFwKCgpID0+IHRocm93RXJyb3IobmV3IEVycm9yKCdDb3VsZCBub3QgbG9hZCBHQScpKSlcblx0XHRcdCk7XG5cblx0XHRpbnRlcnZhbCg1MClcblx0XHRcdC5waXBlKFxuXHRcdFx0XHR0YWtlVW50aWwodGltZXIkKSxcblx0XHRcdFx0ZmlsdGVyKCgpID0+IEJvb2xlYW4oKHdpbmRvdyBhcyBhbnkpLmdhKSksXG5cdFx0XHRcdGZpcnN0KCksXG5cdFx0XHRcdHN3aXRjaE1hcCgoKSA9PiB0aGlzLnF1ZXVlKSxcblx0XHRcdFx0dGFwKGFyZ3MgPT4ge1xuXHRcdFx0XHRcdCh3aW5kb3cgYXMgYW55KS5nYSguLi5hcmdzKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby11bnNhZmUtYW55XG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHRzZXQoZmllbGRzT2JqZWN0OiBhbnkpOiB2b2lkO1xuXHRzZXQoZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkVmFsdWU6IGFueSk6IHZvaWQ7XG5cdHNldChrZXk6IGFueSwgdmFsdWU/OiBhbnkpOiB2b2lkIHtcblx0XHRpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIGtleSAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYGZpZWxkTmFtZVxcYCB0byBiZSBvZiB0eXBlIFxcYHN0cmluZ1xcYCBvciBcXGBvYmplY3RcXGAsIGdvdCBcXGAke3R5cGVvZiBrZXl9XFxgYCk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGBmaWVsZFZhbHVlYCB0byBub3QgYmUgYHVuZGVmaW5lZGAnKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHRoaXMuZ2EoJ3NldCcsIGtleSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZ2EoJ3NldCcsIGtleSwgdmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgb25FdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLmdhKCdzZW5kJywgJ2V2ZW50JywgZXZlbnQuY2F0ZWdvcnksIGV2ZW50LmFjdGlvbiwgZXZlbnQubGFiZWwsIGV2ZW50LnZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgb25QYWdlVmlldyhwYWdldmlldzogUGFnZVZpZXcpOiB2b2lkIHtcblx0XHRjb25zdCBmaWVsZHNPYmplY3Q6IHt0aXRsZT86IHN0cmluZ30gPSB7fTtcblxuXHRcdGlmIChwYWdldmlldy50aXRsZSkge1xuXHRcdFx0ZmllbGRzT2JqZWN0LnRpdGxlID0gcGFnZXZpZXcudGl0bGU7XG5cdFx0fVxuXG5cdFx0dGhpcy5nYSgnc2VuZCcsICdwYWdldmlldycsIHBhZ2V2aWV3LnBhZ2UsIGZpZWxkc09iamVjdCk7XG5cdH1cblxuXHRwcml2YXRlIGdhKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuXHRcdHRoaXMucXVldWUubmV4dChhcmdzKTtcblx0fVxufVxuIl19