11import { 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 ' ;
44import { 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 ' ;
77
88export const PROVIDED_ANALYTICS_INSTANCES = new InjectionToken < Analytics [ ] > ( 'angularfire2.analytics-instances' ) ;
99
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 ( ) ) ;
1212 return new Analytics ( defaultAnalytics ) ;
1313}
1414
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+ } ;
2120}
2221
23-
2422const ANALYTICS_INSTANCES_PROVIDER = {
2523 provide : AnalyticsInstances ,
2624 deps : [
@@ -30,7 +28,7 @@ const ANALYTICS_INSTANCES_PROVIDER = {
3028
3129const DEFAULT_ANALYTICS_INSTANCE_PROVIDER = {
3230 provide : Analytics ,
33- useFactory : ɵdefaultAnalyticsInstanceFactory ,
31+ useFactory : defaultAnalyticsInstanceFactory ,
3432 deps : [
3533 NgZone ,
3634 [ new Optional ( ) , PROVIDED_ANALYTICS_INSTANCES ] ,
@@ -43,20 +41,20 @@ const DEFAULT_ANALYTICS_INSTANCE_PROVIDER = {
4341 ANALYTICS_INSTANCES_PROVIDER ,
4442 ]
4543} )
46- export class AngularFireAnalyticsModule {
44+ export class AnalyticsModule {
4745}
4846
49- export function provideAnalytics ( fn : ( ) => FirebaseAnalytics ) : ModuleWithProviders < AngularFireAnalyticsModule > {
47+ export function provideAnalytics ( fn : ( ) => FirebaseAnalytics ) : ModuleWithProviders < AnalyticsModule > {
5048 return {
51- ngModule : AngularFireAnalyticsModule ,
49+ ngModule : AnalyticsModule ,
5250 providers : [ {
5351 provide : PROVIDED_ANALYTICS_INSTANCES ,
54- useFactory : ɵboundAnalyticsInstanceFactory . bind ( fn ) ,
52+ useFactory : analyticsInstanceFactory ( fn ) ,
5553 multi : true ,
5654 deps : [
5755 NgZone ,
5856 ɵAngularFireSchedulers ,
59- [ new Optional ( ) , PROVIDED_FIREBASE_APPS ]
57+ FirebaseApps ,
6058 ]
6159 } ]
6260 } ;
0 commit comments