|
1 | 1 | import { Injectable } from '@angular/core'; |
2 | | -import { environment } from '../../../environments/environment'; |
3 | | -import { datadogRum } from '@datadog/browser-rum'; |
4 | | -import { CookieConsents, KlaroService } from '../cookies/klaro.service'; |
5 | | -import { BehaviorSubject, Observable } from 'rxjs'; |
6 | | -import { createSelector, Store } from '@ngrx/store'; |
7 | | -import { setDatadogRumStatusAction } from './datadog-rum.actions'; |
8 | | -import { DatadogRumState } from './datadog-rum.reducer'; |
9 | | -import { distinctUntilChanged, take } from 'rxjs/operators'; |
10 | | -import { coreSelector } from '../../core/core.selectors'; |
11 | | -import { CoreState } from '../../core/core-state.model'; |
12 | 2 |
|
13 | | -@Injectable({ |
14 | | - providedIn: 'root' |
15 | | -}) |
16 | | -export class DatadogRumService { |
| 3 | +@Injectable() |
| 4 | +export abstract class DatadogRumService { |
17 | 5 |
|
18 | | - consentsUpdates$: BehaviorSubject<CookieConsents>; |
19 | | - datadogRumStateSelector = createSelector(coreSelector, (state: CoreState) => state.datadogRum); |
20 | | - |
21 | | - constructor( |
22 | | - private klaroService: KlaroService, |
23 | | - private store: Store |
24 | | - ) { |
25 | | - } |
26 | | - |
27 | | - initDatadogRum() { |
28 | | - this.klaroService.watchConsentUpdates(); |
29 | | - this.consentsUpdates$ = this.klaroService.consentsUpdates$; |
30 | | - this.consentsUpdates$.subscribe(savedPreferences => { |
31 | | - this.getDatadogRumState().subscribe((state) => { |
32 | | - if (savedPreferences?.datadog && |
33 | | - environment.datadogRum?.clientToken && environment.datadogRum?.applicationId && |
34 | | - environment.datadogRum?.service && environment.datadogRum?.env) { |
35 | | - if (!state.isInitialized) { |
36 | | - this.store.dispatch(new setDatadogRumStatusAction({ |
37 | | - isInitialized: true, |
38 | | - isRunning: true |
39 | | - })); |
40 | | - datadogRum.init(environment.datadogRum); |
41 | | - } else if (!state.isRunning) { |
42 | | - this.store.dispatch(new setDatadogRumStatusAction({ |
43 | | - isRunning: true |
44 | | - })); |
45 | | - datadogRum.startSessionReplayRecording(); |
46 | | - } |
47 | | - } else { |
48 | | - datadogRum.stopSessionReplayRecording(); |
49 | | - this.store.dispatch(new setDatadogRumStatusAction({ |
50 | | - isRunning: false |
51 | | - })); |
52 | | - } |
53 | | - }); |
54 | | - }); |
55 | | - } |
56 | | - |
57 | | - |
58 | | - getDatadogRumState(): Observable<DatadogRumState> { |
59 | | - return this.store |
60 | | - .select(this.datadogRumStateSelector) |
61 | | - .pipe( |
62 | | - distinctUntilChanged(), |
63 | | - take(1), |
64 | | - ); |
65 | | - } |
| 6 | + /** |
| 7 | + * Initializes the service |
| 8 | + */ |
| 9 | + abstract initDatadogRum(); |
66 | 10 | } |
67 | 11 |
|
0 commit comments