1
1
import { NgModule , Optional , NgZone , InjectionToken , ModuleWithProviders } from '@angular/core' ;
2
- import { Analytics as FirebaseAnalytics } from 'firebase/analytics' ;
3
- import { ɵgetDefaultInstanceOf , ɵmemoizeInstance } from '../core ' ;
2
+ import { Analytics as FirebaseAnalytics , initializeAnalytics } from 'firebase/analytics' ;
3
+ import { ɵgetDefaultInstanceOf , ɵmemoizeInstance , ɵAngularFireSchedulers } from '@angular/fire ' ;
4
4
import { Analytics , ANALYTICS_PROVIDER_NAME , AnalyticsInstances } from './analytics' ;
5
- import { PROVIDED_FIREBASE_APPS } from '.. /app/app.module ' ;
6
- import { ɵAngularFireSchedulers } from '../zones ' ;
5
+ import { getApp } from 'firebase /app' ;
6
+ import { FirebaseApps } from '@angular/fire/app ' ;
7
7
8
8
export const PROVIDED_ANALYTICS_INSTANCES = new InjectionToken < Analytics [ ] > ( 'angularfire2.analytics-instances' ) ;
9
9
10
- export function ɵdefaultAnalyticsInstanceFactory ( _ : Analytics [ ] ) {
11
- const defaultAnalytics = ɵgetDefaultInstanceOf < FirebaseAnalytics > ( ANALYTICS_PROVIDER_NAME ) ;
10
+ export function defaultAnalyticsInstanceFactory ( _ : Analytics [ ] ) {
11
+ const defaultAnalytics = ɵgetDefaultInstanceOf < FirebaseAnalytics > ( ANALYTICS_PROVIDER_NAME ) || initializeAnalytics ( getApp ( ) ) ;
12
12
return new Analytics ( defaultAnalytics ) ;
13
13
}
14
14
15
- // Hack: useFactory doesn't allow us to pass a lambda, so let's bind the arugments
16
- // Going this direction to cut down on DI token noise; also making it easier to support
17
- // multiple Firebase Apps
18
- export function ɵboundAnalyticsInstanceFactory ( zone : NgZone ) {
19
- const analytics = ɵmemoizeInstance < FirebaseAnalytics > ( this , zone ) ;
20
- return new Analytics ( analytics ) ;
15
+ export function analyticsInstanceFactory ( fn : ( ) => FirebaseAnalytics ) {
16
+ return ( zone : NgZone ) => {
17
+ const analytics = ɵmemoizeInstance < FirebaseAnalytics > ( fn , zone ) ;
18
+ return new Analytics ( analytics ) ;
19
+ } ;
21
20
}
22
21
23
-
24
22
const ANALYTICS_INSTANCES_PROVIDER = {
25
23
provide : AnalyticsInstances ,
26
24
deps : [
@@ -30,7 +28,7 @@ const ANALYTICS_INSTANCES_PROVIDER = {
30
28
31
29
const DEFAULT_ANALYTICS_INSTANCE_PROVIDER = {
32
30
provide : Analytics ,
33
- useFactory : ɵdefaultAnalyticsInstanceFactory ,
31
+ useFactory : defaultAnalyticsInstanceFactory ,
34
32
deps : [
35
33
NgZone ,
36
34
[ new Optional ( ) , PROVIDED_ANALYTICS_INSTANCES ] ,
@@ -43,20 +41,20 @@ const DEFAULT_ANALYTICS_INSTANCE_PROVIDER = {
43
41
ANALYTICS_INSTANCES_PROVIDER ,
44
42
]
45
43
} )
46
- export class AngularFireAnalyticsModule {
44
+ export class AnalyticsModule {
47
45
}
48
46
49
- export function provideAnalytics ( fn : ( ) => FirebaseAnalytics ) : ModuleWithProviders < AngularFireAnalyticsModule > {
47
+ export function provideAnalytics ( fn : ( ) => FirebaseAnalytics ) : ModuleWithProviders < AnalyticsModule > {
50
48
return {
51
- ngModule : AngularFireAnalyticsModule ,
49
+ ngModule : AnalyticsModule ,
52
50
providers : [ {
53
51
provide : PROVIDED_ANALYTICS_INSTANCES ,
54
- useFactory : ɵboundAnalyticsInstanceFactory . bind ( fn ) ,
52
+ useFactory : analyticsInstanceFactory ( fn ) ,
55
53
multi : true ,
56
54
deps : [
57
55
NgZone ,
58
56
ɵAngularFireSchedulers ,
59
- [ new Optional ( ) , PROVIDED_FIREBASE_APPS ]
57
+ FirebaseApps ,
60
58
]
61
59
} ]
62
60
} ;
0 commit comments