Skip to content

Commit f77d9fe

Browse files
committed
feat(afs): enable persistence option
1 parent 96b3c20 commit f77d9fe

File tree

7 files changed

+39
-11
lines changed

7 files changed

+39
-11
lines changed

karma.conf.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ module.exports = function(config) {
2626

2727
'karma-test-shim.js',
2828
'node_modules/firebase/firebase.js',
29-
'node_modules/firestore/firestore.js',
29+
'node_modules/firebase/firebase-firestore.js',
3030
'dist/packages-dist/bundles/core.umd.{js,map}',
3131
'dist/packages-dist/bundles/auth.umd.{js,map}',
3232
'dist/packages-dist/bundles/database.umd.{js,map}',

src/firestore/collection/collection.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ describe('AngularFirestoreCollection', () => {
3434
TestBed.configureTestingModule({
3535
imports: [
3636
AngularFireModule.initializeApp(COMMON_CONFIG),
37-
AngularFirestoreModule
37+
AngularFirestoreModule.enablePersistence()
3838
]
3939
});
4040
inject([FirebaseApp, AngularFirestore], (_app: firebase.app.App, _afs: AngularFirestore) => {
@@ -102,7 +102,7 @@ describe('AngularFirestoreCollection', () => {
102102
});
103103
});
104104

105-
fit('should update order on queries', async (done) => {
105+
it('should update order on queries', async (done) => {
106106
const ITEMS = 10;
107107
let count = 0;
108108
let firstIndex = 0;

src/firestore/document/document.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ describe('AngularFirestoreDocument', () => {
2121
TestBed.configureTestingModule({
2222
imports: [
2323
AngularFireModule.initializeApp(COMMON_CONFIG),
24-
AngularFirestoreModule
24+
AngularFirestoreModule.enablePersistence()
2525
]
2626
});
2727
inject([FirebaseApp, AngularFirestore], (_app: firebase.app.App, _afs: AngularFirestore) => {

src/firestore/firestore.module.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,37 @@
1-
import { NgModule, NgZone } from '@angular/core';
1+
import { NgModule, InjectionToken } from '@angular/core';
22
import { FirebaseApp, AngularFireModule } from 'angularfire2';
33
import { AngularFirestore } from './firestore';
4+
import { from } from 'rxjs/observable/from';
45

5-
export function _getAngularFirestore(app: FirebaseApp) {
6-
return new AngularFirestore(app);
6+
export const EnablePersistenceToken = new InjectionToken<boolean>('EnablePersistenceToken');
7+
8+
export function _getAngularFirestore(app: FirebaseApp, enablePersistence: boolean) {
9+
return new AngularFirestore(app, enablePersistence);
710
}
811

912
export const AngularFirestoreProvider = {
1013
provide: AngularFirestore,
1114
useFactory: _getAngularFirestore,
12-
deps: [ FirebaseApp ]
15+
deps: [ FirebaseApp, EnablePersistenceToken ]
1316
};
1417

1518
export const FIRESTORE_PROVIDERS = [
1619
AngularFirestoreProvider,
20+
{ provide: EnablePersistenceToken, useValue: false },
1721
];
1822

1923
@NgModule({
2024
imports: [ AngularFireModule ],
2125
providers: [ FIRESTORE_PROVIDERS ]
2226
})
23-
export class AngularFirestoreModule { }
27+
export class AngularFirestoreModule {
28+
static enablePersistence() {
29+
return {
30+
ngModule: AngularFireModule,
31+
providers: [
32+
{ provide: EnablePersistenceToken, useValue: true },
33+
AngularFirestoreProvider
34+
]
35+
}
36+
}
37+
}

src/firestore/firestore.spec.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ describe('AngularFirestore', () => {
2525
TestBed.configureTestingModule({
2626
imports: [
2727
AngularFireModule.initializeApp(COMMON_CONFIG),
28-
AngularFirestoreModule
28+
AngularFirestoreModule.enablePersistence()
2929
]
3030
});
3131
inject([FirebaseApp, AngularFirestore], (_app: firebase.app.App, _afs: AngularFirestore) => {
@@ -71,4 +71,11 @@ describe('AngularFirestore', () => {
7171
expect(quadWrapper).toThrowError();
7272
});
7373

74+
it('should enable persistence', (done) => {
75+
const sub = afs.persistenceEnabled$.subscribe(isEnabled => {
76+
expect(isEnabled).toBe(true);
77+
done();
78+
});
79+
});
80+
7481
});

src/firestore/firestore.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import * as firebase from 'firebase/app';
22
import 'firebase/firestore';
33
import { Observable } from 'rxjs/Observable';
44
import { Subscriber } from 'rxjs/Subscriber';
5+
import { from } from 'rxjs/observable/from';
56
import 'rxjs/add/operator/map';
67

78
import { Injectable } from '@angular/core';
@@ -88,15 +89,20 @@ export function associateQuery(collectionRef: firebase.firestore.CollectionRefer
8889
@Injectable()
8990
export class AngularFirestore {
9091
public readonly firestore: firebase.firestore.Firestore;
92+
public readonly persistenceEnabled$: Observable<boolean>;
9193

9294
/**
9395
* Each Feature of AngularFire has a FirebaseApp injected. This way we
9496
* don't rely on the main Firebase App instance and we can create named
9597
* apps and use multiple apps.
9698
* @param app
9799
*/
98-
constructor(public app: FirebaseApp) {
100+
constructor(public app: FirebaseApp, shouldEnablePersistence) {
99101
this.firestore = app.firestore();
102+
103+
this.persistenceEnabled$ = shouldEnablePersistence ?
104+
from(app.firestore().enablePersistence().then(() => true)) :
105+
from(new Promise((res, rej) => { res(false); }));
100106
}
101107

102108
/**

tools/build.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const GLOBALS = {
4141
'rxjs/add/operator/delay': 'Rx.Observable',
4242
'rxjs/add/operator/debounce': 'Rx.Observable',
4343
'rxjs/observable/fromEvent': 'Rx.Observable',
44+
'rxjs/observable/from': 'Rx.Observable',
4445
'rxjs/operator': 'Rx.Observable.prototype',
4546
'@angular/core': 'ng.core',
4647
'@angular/compiler': 'ng.compiler',

0 commit comments

Comments
 (0)