All files / app/services gtm.service.ts

49.41% Statements 42/85
100% Branches 6/6
50% Functions 3/6
49.41% Lines 42/85

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 861x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 39x 39x 39x 39x 39x     39x 39x 1x 1x           1x 1x 1x 1x 1x 39x 39x 1x 1x 1x           1x 1x 1x 1x 1x 1x 1x 39x 39x                   39x 39x                                             39x  
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable, inject } from '@angular/core';
import { UserClass } from '@classes/user.class';
import { environment } from '@environments/environment';
 
declare let window: any;
 
@Injectable({
	providedIn: 'root',
})
export class GtmService {
	private http = inject(HttpClient);
 
	url: string = environment.apiUrl;
 
	register(user: UserClass): void {
		this._send('new', user);
	}
 
	login(user: UserClass, headers: HttpHeaders): void {
		this._getUserItineraryIds(headers)
			.then((ids) => {
				if (ids.length) {
					this._send('returning', user, ids.join(', '));
				} else {
					this._send('new', user);
				}
			})
			.catch((e) => {
				console.error(e);
			});
	}
 
	private _getUserItineraryIds(headers: HttpHeaders): Promise<string[]> {
		return new Promise<string[]>((resolve, reject) => {
			this.http.get<any>(this.url + '/itineraries', { headers }).subscribe(
				(response) => {
					if (response.data.length) {
						resolve(response.data.map(({ id }: { id: string }) => id));
					}

					resolve([]);
				},
				(error) => {
					reject(error);
				},
			);
		});
	}
 
	_send(type: string, user: UserClass, itineraryId: string = '') {
		window.dataLayer.push({
			event: 'form_submit',
			itineraryId,
			clientEmail: user.getEmail(),
			clientName: user.getName(),
			userId: user.getId(),
			userType: type,
		});
	}
 
	successfulPlannedTrip(user: UserClass): void {
		const firstTry = sessionStorage.getItem('firstTry') === null;
		if (firstTry) {
			sessionStorage.setItem('firstTry', 'false');
		}
		const isNewCustomer = sessionStorage.getItem('newCustomer')?.toString() === 'true';
		console.log('GTM Service: successfulPlannedTrip', {
			userEmail: user.getEmail(),
			userName: user.getName(),
			userId: user.getId(),
			newCustomer: isNewCustomer,
			firstTry: firstTry,
		});

		window.dataLayer.push({
			event: 'successful_planned_trip',
			clientEmail: user.getEmail(),
			clientName: user.getName(),
			userId: user.getId(),
			newCustomer: isNewCustomer.toString(), // 'true' or 'false'
			firstTry: firstTry.toString(), // 'true' or 'false'
		});
	}
}