File tree 5 files changed +18
-7
lines changed
analytics-provider-data-layer
5 files changed +18
-7
lines changed Original file line number Diff line number Diff line change 32
32
"@daffodil/analytics" : " 0.0.0-PLACEHOLDER"
33
33
},
34
34
"devDependencies" : {
35
- "@daffodil/analytics" : " 0.0.0-PLACEHOLDER"
35
+ "@daffodil/analytics" : " 0.0.0-PLACEHOLDER" ,
36
+ "@daffodil/core" : " 0.0.0-PLACEHOLDER"
36
37
}
37
38
}
Original file line number Diff line number Diff line change @@ -2,21 +2,23 @@ import {
2
2
FactoryProvider ,
3
3
inject ,
4
4
} from '@angular/core' ;
5
- import { of } from 'rxjs' ;
5
+ import { map } from 'rxjs' ;
6
6
7
7
import {
8
8
DaffAnalyticsEvent ,
9
9
DaffAnalyticsServices ,
10
10
} from '@daffodil/analytics' ;
11
+ import {
12
+ MaybeAsync ,
13
+ observe ,
14
+ } from '@daffodil/core' ;
11
15
12
16
import { DataLayerItem } from './data-layer' ;
13
17
import { DaffAnalyticsDataLayer } from './data-layer.service' ;
14
18
15
-
16
-
17
19
export type DataLayerTracker < T extends DaffAnalyticsEvent > = (
18
20
action : T
19
- ) => DataLayerItem ;
21
+ ) => MaybeAsync < DataLayerItem > ;
20
22
21
23
export function provideDataLayerTracker < T extends DaffAnalyticsEvent > (
22
24
tracker : DataLayerTracker < T > ,
@@ -25,7 +27,9 @@ export function provideDataLayerTracker<T extends DaffAnalyticsEvent>(
25
27
provide : DaffAnalyticsServices ,
26
28
useFactory : ( ) => {
27
29
const dataLayer = inject ( DaffAnalyticsDataLayer ) ;
28
- return ( action : T ) => of ( dataLayer . push ( tracker ( action ) ) ) ;
30
+ return ( action : T ) => observe ( tracker ( action ) ) . pipe (
31
+ map ( ( data ) => dataLayer . push ( data ) ) ,
32
+ ) ;
29
33
} ,
30
34
multi : true ,
31
35
} ;
Original file line number Diff line number Diff line change
1
+ import { Observable } from 'rxjs' ;
2
+
3
+ export type MaybeAsync < T > = Promise < T > | Observable < T > | T ;
Original file line number Diff line number Diff line change @@ -18,3 +18,4 @@ export * from './filters/public_api';
18
18
export * from './injection-tokens/public_api' ;
19
19
20
20
export { DaffOrderable } from './orderable/orderable' ;
21
+ export { MaybeAsync } from './async/maybe.type' ;
Original file line number Diff line number Diff line change @@ -4,12 +4,14 @@ import {
4
4
from ,
5
5
} from 'rxjs' ;
6
6
7
+ import { MaybeAsync } from '../async/maybe.type' ;
8
+
7
9
/**
8
10
* Converts a value to an observable.
9
11
* If the value is an observable, just returns that observable.
10
12
* If the value is a promise, converts it to an observable (see rxjs `from`).
11
13
* If the value is neither, just returns an observable that immediately emits the value.
12
14
*/
13
- export function observe < T > ( val : T | Promise < T > | Observable < T > ) : Observable < T > {
15
+ export function observe < T > ( val : MaybeAsync < T > ) : Observable < T > {
14
16
return isObservable ( val ) ? val : from ( Promise . resolve ( val ) ) ;
15
17
}
You can’t perform that action at this time.
0 commit comments