From b8eb9ba14e025cac25aed7d1515693340706e5ee Mon Sep 17 00:00:00 2001 From: James Daniels Date: Mon, 23 Nov 2020 23:33:11 -0500 Subject: [PATCH 1/2] fix(afs): fix type in DocumentActions --- src/firestore/observable/fromRef.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/firestore/observable/fromRef.ts b/src/firestore/observable/fromRef.ts index f449a4dfe..969f3fbe5 100644 --- a/src/firestore/observable/fromRef.ts +++ b/src/firestore/observable/fromRef.ts @@ -1,6 +1,6 @@ import { asyncScheduler, Observable, SchedulerLike } from 'rxjs'; import { Action, DocumentReference, DocumentSnapshot, Query, QuerySnapshot, Reference } from '../interfaces'; -import { map } from 'rxjs/operators'; +import { map, pairwise, startWith } from 'rxjs/operators'; function _fromRef(ref: Reference, scheduler: SchedulerLike = asyncScheduler): Observable { return new Observable(subscriber => { @@ -28,7 +28,17 @@ export function fromRef(ref: DocumentReference | Query, scheduler?: export function fromDocRef(ref: DocumentReference, scheduler?: SchedulerLike): Observable>> { return fromRef, T>(ref, scheduler) .pipe( - map(payload => ({ payload, type: 'value' })) + startWith(undefined), + pairwise(), + map(([priorPayload, payload]) => { + if (!payload.exists) { + return { payload, type: 'removed' }; + } + if (priorPayload ? !priorPayload.exists : !payload.metadata.fromCache) { + return { payload, type: 'added' }; + } + return { payload, type: 'modified' }; + }) ); } From 91ab263515f998e04bc101b02be270a94f80023f Mon Sep 17 00:00:00 2001 From: James Daniels Date: Tue, 24 Nov 2020 12:28:29 -0500 Subject: [PATCH 2/2] First cache emission should be added, so not break --- src/firestore/observable/fromRef.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/firestore/observable/fromRef.ts b/src/firestore/observable/fromRef.ts index 969f3fbe5..c589c07e7 100644 --- a/src/firestore/observable/fromRef.ts +++ b/src/firestore/observable/fromRef.ts @@ -34,7 +34,7 @@ export function fromDocRef(ref: DocumentReference, scheduler?: SchedulerLi if (!payload.exists) { return { payload, type: 'removed' }; } - if (priorPayload ? !priorPayload.exists : !payload.metadata.fromCache) { + if (!priorPayload?.exists) { return { payload, type: 'added' }; } return { payload, type: 'modified' };