diff --git a/src/firestore/observable/fromRef.ts b/src/firestore/observable/fromRef.ts index f449a4dfe..c589c07e7 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?.exists) { + return { payload, type: 'added' }; + } + return { payload, type: 'modified' }; + }) ); }