diff --git a/adev/src/app/core/services/analytics/analytics.service.spec.ts b/adev/src/app/core/services/analytics/analytics.service.spec.ts index 5f2549ff36931..a24dbf97abeb6 100644 --- a/adev/src/app/core/services/analytics/analytics.service.spec.ts +++ b/adev/src/app/core/services/analytics/analytics.service.spec.ts @@ -7,8 +7,9 @@ */ import {Injector} from '@angular/core'; -import {ENVIRONMENT, WINDOW} from '@angular/docs'; +import {ENVIRONMENT, WINDOW, LOCAL_STORAGE} from '@angular/docs'; import {AnalyticsService} from './analytics.service'; +import {MockLocalStorage} from '@angular/docs/testing'; describe('AnalyticsService', () => { let service: AnalyticsService; @@ -18,6 +19,7 @@ describe('AnalyticsService', () => { let windowOnErrorHandler: (event: ErrorEvent) => void; let mockWindow: any; + let mockLocalStorage = new MockLocalStorage(); beforeEach(() => { gtagSpy = jasmine.createSpy('gtag'); @@ -39,6 +41,7 @@ describe('AnalyticsService', () => { {provide: ENVIRONMENT, useValue: {}}, {provide: AnalyticsService, deps: [WINDOW]}, {provide: WINDOW, useFactory: () => mockWindow, deps: []}, + {provide: LOCAL_STORAGE, useValue: mockLocalStorage}, ], }); diff --git a/adev/src/app/core/services/analytics/analytics.service.ts b/adev/src/app/core/services/analytics/analytics.service.ts index 74d2483c23922..033121eee8756 100644 --- a/adev/src/app/core/services/analytics/analytics.service.ts +++ b/adev/src/app/core/services/analytics/analytics.service.ts @@ -8,7 +8,7 @@ import {inject, Injectable} from '@angular/core'; -import {WINDOW, ENVIRONMENT} from '@angular/docs'; +import {WINDOW, ENVIRONMENT, LOCAL_STORAGE, STORAGE_KEY, setCookieConsent} from '@angular/docs'; import {formatErrorEventForAnalytics} from './analytics-format-error'; @@ -28,6 +28,7 @@ interface WindowWithAnalytics extends Window { export class AnalyticsService { private environment = inject(ENVIRONMENT); private window: WindowWithAnalytics = inject(WINDOW); + private readonly localStorage = inject(LOCAL_STORAGE); constructor() { this._installGlobalSiteTag(); @@ -64,6 +65,21 @@ export class AnalyticsService { window.gtag = function () { window.dataLayer?.push(arguments); }; + + // Cookie banner consent initial state + // This code is modified in the @angular/docs package in the cookie-popup component. + // Docs: https://developers.google.com/tag-platform/security/guides/consent + if (this.localStorage) { + if (this.localStorage.getItem(STORAGE_KEY) === 'true') { + setCookieConsent('granted'); + } else { + setCookieConsent('denied'); + } + } else { + // In case localStorage is not available, we default to denying cookies. + setCookieConsent('denied'); + } + window.gtag('js', new Date()); // Configure properties before loading the script. This is necessary to avoid