import { Inject, Injectable, } from '@angular/core'; import { SegmentAnalyticsInterface, TrackingEventInterface, TrackingServiceInterface, } from './../../../models/index'; @Injectable() export class SegmentTrackingService implements TrackingServiceInterface { public i: number = 0; constructor( @Inject('segmentAnalytics') private _segmentAnalytics: SegmentAnalyticsInterface, ) {} public sendEvent( event: TrackingEventInterface, ) { this._waitForSegment( 'track', () => { this._segmentAnalytics.track( event.name, event.properties, event.options, event.callback || undefined, ); }, ); } public sendPage( event: TrackingEventInterface, ) { this._waitForSegment( 'page', () => { this._segmentAnalytics.page( event.category || undefined, event.name, event.properties, event.options, event.callback || undefined, ); }, ); } private _waitForSegment( segmentMethod: string, success: () => void, ) { if (this._segmentAnalytics[segmentMethod]) { success(); } else if (this.i < 58) { setTimeout(() => { this.i++; this._waitForSegment( segmentMethod, success, ); }, 1000); } } }