@@ -2,41 +2,67 @@ import { Injectable } from '@angular/core';
22import { environment } from '../../../environments/environment' ;
33import { datadogRum } from '@datadog/browser-rum' ;
44import { CookieConsents , KlaroService } from '../cookies/klaro.service' ;
5- import { BehaviorSubject } from 'rxjs' ;
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+
13+ export const getDatadogRumState = createSelector ( coreSelector , ( state : CoreState ) => state . datadogRum ) ;
614
715@Injectable ( {
816 providedIn : 'root'
917} )
1018export class DatadogRumService {
1119
1220 consentUpdates$ : BehaviorSubject < CookieConsents > ;
13- isDatadogInitialized = false ;
14- isDatadogRunning = false ;
1521
1622 constructor (
17- private klaroService : KlaroService
23+ private klaroService : KlaroService ,
24+ private store : Store
1825 ) {
1926 }
2027
2128 initDatadogRum ( ) {
2229 this . klaroService . watchConsentUpdates ( ) ;
2330 this . consentUpdates$ = this . klaroService . consentsUpdates$ ;
2431 this . consentUpdates$ . subscribe ( savedPreferences => {
25- if ( savedPreferences ?. datadog &&
26- environment . datadogRum ?. clientToken && environment . datadogRum ?. applicationId &&
27- environment . datadogRum ?. service && environment . datadogRum ?. env ) {
28- if ( ! this . isDatadogInitialized ) {
29- this . isDatadogInitialized = true ;
30- this . isDatadogRunning = true ;
31- datadogRum . init ( environment . datadogRum ) ;
32- } else if ( ! this . isDatadogRunning ) {
33- this . isDatadogRunning = true ;
34- datadogRum . startSessionReplayRecording ( ) ;
32+ this . getDatadogRumState ( ) . subscribe ( ( state ) => {
33+ if ( savedPreferences ?. datadog &&
34+ environment . datadogRum ?. clientToken && environment . datadogRum ?. applicationId &&
35+ environment . datadogRum ?. service && environment . datadogRum ?. env ) {
36+ if ( ! state . isInitialized ) {
37+ this . store . dispatch ( new setDatadogRumStatusAction ( {
38+ isInitialized : true ,
39+ isRunning : true
40+ } ) ) ;
41+ datadogRum . init ( environment . datadogRum ) ;
42+ } else if ( ! state . isRunning ) {
43+ this . store . dispatch ( new setDatadogRumStatusAction ( {
44+ isRunning : true
45+ } ) ) ;
46+ datadogRum . startSessionReplayRecording ( ) ;
47+ }
48+ } else {
49+ datadogRum . stopSessionReplayRecording ( ) ;
50+ this . store . dispatch ( new setDatadogRumStatusAction ( {
51+ isRunning : false
52+ } ) ) ;
3553 }
36- } else {
37- datadogRum . stopSessionReplayRecording ( ) ;
38- this . isDatadogRunning = false ;
39- }
54+ } ) ;
4055 } ) ;
4156 }
57+
58+
59+ getDatadogRumState ( ) : Observable < DatadogRumState > {
60+ return this . store
61+ . select ( getDatadogRumState )
62+ . pipe (
63+ distinctUntilChanged ( ) ,
64+ take ( 1 ) ,
65+ ) ;
66+ }
4267}
68+
0 commit comments