UNPKG

@hakimio/ngx-google-analytics

Version:

A simple Google Analytics wrapper for Angular apps

77 lines 9.82 kB
import { Directive, ElementRef, inject, Input, isDevMode } from '@angular/core'; import { fromEvent } from 'rxjs'; import { GoogleAnalyticsService } from '../services/google-analytics.service'; import { NGX_GOOGLE_ANALYTICS_SETTINGS_TOKEN } from '../tokens/ngx-google-analytics-settings-token'; import { GaEventCategoryDirective } from './ga-event-category.directive'; import * as i0 from "@angular/core"; export class GaEventDirective { constructor() { this.gaCategoryDirective = inject(GaEventCategoryDirective, { optional: true }); this.gaService = inject(GoogleAnalyticsService); this.settings = inject(NGX_GOOGLE_ANALYTICS_SETTINGS_TOKEN); this.el = inject(ElementRef); this.gaBind = 'click'; } set gaBind(gaBind) { if (this.bindSubscription) { this.bindSubscription.unsubscribe(); } this._gaBind = gaBind; this.bindSubscription = fromEvent(this.el.nativeElement, gaBind).subscribe(() => this.trigger()); } get gaBind() { return this._gaBind; } ngOnDestroy() { if (this.bindSubscription) { this.bindSubscription.unsubscribe(); } } trigger() { try { if (!this.gaAction && !this.gaEvent) { throw new Error('You must provide a gaAction attribute to identify this event.'); } this.gaService .event(this.gaAction || this.gaEvent, { category: this.gaCategoryDirective?.gaCategory, label: this.gaLabel || this.label, value: this.gaValue, interaction: this.gaInteraction }); } catch (err) { this.throw(err); } } throw(err) { if ((isDevMode() || this.settings.enableTracing) && console && console.warn) { console.warn(err); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: GaEventDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.7", type: GaEventDirective, isStandalone: true, selector: "[gaEvent]", inputs: { gaAction: "gaAction", gaLabel: "gaLabel", label: "label", gaValue: "gaValue", gaInteraction: "gaInteraction", gaEvent: "gaEvent", gaBind: "gaBind" }, exportAs: ["gaEvent"], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: GaEventDirective, decorators: [{ type: Directive, args: [{ selector: `[gaEvent]`, exportAs: 'gaEvent', standalone: true }] }], ctorParameters: function () { return []; }, propDecorators: { gaAction: [{ type: Input }], gaLabel: [{ type: Input }], label: [{ type: Input }], gaValue: [{ type: Input }], gaInteraction: [{ type: Input }], gaEvent: [{ type: Input }], gaBind: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2EtZXZlbnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWdvb2dsZS1hbmFseXRpY3Mvc3JjL2xpYi9kaXJlY3RpdmVzL2dhLWV2ZW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUMsU0FBUyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxtQ0FBbUMsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQ2xHLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLCtCQUErQixDQUFDOztBQU92RSxNQUFNLE9BQU8sZ0JBQWdCO0lBZXpCO1FBTGlCLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ3pFLGNBQVMsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMzQyxhQUFRLEdBQUcsTUFBTSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDdkQsT0FBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUdyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBSUQsSUFDSSxNQUFNLENBQUMsTUFBYztRQUNyQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdkM7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBQ0QsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVTLE9BQU87UUFDYixJQUFJO1lBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7YUFDcEY7WUFFRCxJQUFJLENBQUMsU0FBUztpQkFDVCxLQUFLLENBQ0YsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUM3QjtnQkFDSSxRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFVBQVU7Z0JBQzlDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYTthQUNsQyxDQUNKLENBQUM7U0FDVDtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQjtJQUNMLENBQUM7SUFFUyxLQUFLLENBQUMsR0FBVTtRQUN0QixJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksRUFBRTtZQUN6RSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JCO0lBQ0wsQ0FBQzs4R0FqRVEsZ0JBQWdCO2tHQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBTDVCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFFBQVEsRUFBRSxTQUFTO29CQUNuQixVQUFVLEVBQUUsSUFBSTtpQkFDbkI7MEVBR1ksUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFlRixNQUFNO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgaXNEZXZNb2RlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2Zyb21FdmVudCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtHYUFjdGlvbkVudW19IGZyb20gJy4uL2VudW1zL2dhLWFjdGlvbi5lbnVtJztcclxuaW1wb3J0IHtHb29nbGVBbmFseXRpY3NTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9nb29nbGUtYW5hbHl0aWNzLnNlcnZpY2UnO1xyXG5pbXBvcnQge05HWF9HT09HTEVfQU5BTFlUSUNTX1NFVFRJTkdTX1RPS0VOfSBmcm9tICcuLi90b2tlbnMvbmd4LWdvb2dsZS1hbmFseXRpY3Mtc2V0dGluZ3MtdG9rZW4nO1xyXG5pbXBvcnQge0dhRXZlbnRDYXRlZ29yeURpcmVjdGl2ZX0gZnJvbSAnLi9nYS1ldmVudC1jYXRlZ29yeS5kaXJlY3RpdmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogYFtnYUV2ZW50XWAsXHJcbiAgICBleHBvcnRBczogJ2dhRXZlbnQnLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2FFdmVudERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gICAgQElucHV0KCkgZ2FBY3Rpb24hOiBHYUFjdGlvbkVudW0gfCBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBnYUxhYmVsITogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgbGFiZWwhOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBnYVZhbHVlITogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgZ2FJbnRlcmFjdGlvbiE6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBnYUV2ZW50ITogR2FBY3Rpb25FbnVtIHwgc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBiaW5kU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2FDYXRlZ29yeURpcmVjdGl2ZSA9IGluamVjdChHYUV2ZW50Q2F0ZWdvcnlEaXJlY3RpdmUsIHtvcHRpb25hbDogdHJ1ZX0pO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBnYVNlcnZpY2UgPSBpbmplY3QoR29vZ2xlQW5hbHl0aWNzU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzID0gaW5qZWN0KE5HWF9HT09HTEVfQU5BTFlUSUNTX1NFVFRJTkdTX1RPS0VOKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWwgPSBpbmplY3QoRWxlbWVudFJlZik7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5nYUJpbmQgPSAnY2xpY2snO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dhQmluZCE6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGdhQmluZChnYUJpbmQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmJpbmRTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5iaW5kU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9nYUJpbmQgPSBnYUJpbmQ7XHJcbiAgICAgICAgdGhpcy5iaW5kU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHRoaXMuZWwubmF0aXZlRWxlbWVudCwgZ2FCaW5kKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy50cmlnZ2VyKCkpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGdhQmluZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nYUJpbmQ7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYmluZFN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmJpbmRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHRyaWdnZXIoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmdhQWN0aW9uICYmICF0aGlzLmdhRXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgcHJvdmlkZSBhIGdhQWN0aW9uIGF0dHJpYnV0ZSB0byBpZGVudGlmeSB0aGlzIGV2ZW50LicpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdhU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLmV2ZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FBY3Rpb24gfHwgdGhpcy5nYUV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuZ2FDYXRlZ29yeURpcmVjdGl2ZT8uZ2FDYXRlZ29yeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2FMYWJlbCB8fCB0aGlzLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5nYVZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbjogdGhpcy5nYUludGVyYWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgdGhpcy50aHJvdyhlcnIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdGhyb3coZXJyOiBFcnJvcikge1xyXG4gICAgICAgIGlmICgoaXNEZXZNb2RlKCkgfHwgdGhpcy5zZXR0aW5ncy5lbmFibGVUcmFjaW5nKSAmJiBjb25zb2xlICYmIGNvbnNvbGUud2Fybikge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==