export function fromRef()

in src/compat/database/observable/fromRef.ts [17:60]


export function fromRef<T>(ref: DatabaseQuery,
                           event: ListenEvent,
                           listenType = 'on',
                           scheduler: SchedulerLike = asyncScheduler
): Observable<AngularFireAction<DatabaseSnapshot<T>>> {
  return new Observable<SnapshotPrevKey<T>>(subscriber => {
    let fn: any | null = null;
    fn = ref[listenType](event, (snapshot, prevKey) => {
      scheduler.schedule(() => {
        subscriber.next({ snapshot, prevKey });
      });
      if (listenType === 'once') {
        scheduler.schedule(() => subscriber.complete());
      }
    }, err => {
      scheduler.schedule(() => subscriber.error(err));
    });

    if (listenType === 'on') {
      return {
        unsubscribe() {
          if (fn != null) {
            ref.off(event, fn);
          }
        }
      };
    } else {
      return {
        unsubscribe() {
        }
      };
    }
  }).pipe(
    map(payload => {
      const { snapshot, prevKey } = payload;
      let key: string | null = null;
      if (snapshot.exists()) {
        key = snapshot.key;
      }
      return { type: event, payload: snapshot, prevKey, key };
    }),
    share()
  );
}