import {Injectable} from '@angular/core'; import {AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument} from '@angular/fire/firestore'; import {Observable} from 'rxjs'; import {QueryFn} from '@angular/fire/firestore/interfaces'; type CollectionPredicate = string | AngularFirestoreCollection; type DocumentPredicate = string | AngularFirestoreDocument; @Injectable({ providedIn: 'root', }) export class DbService { public constructor(private afs: AngularFirestore) {} public col(ref: CollectionPredicate, queryFn?: QueryFn): AngularFirestoreCollection { return typeof ref === 'string' ? this.afs.collection(ref, queryFn) : ref; } public doc(ref: DocumentPredicate): AngularFirestoreDocument { return typeof ref === 'string' ? this.afs.doc(ref) : ref; } public doc$(ref: DocumentPredicate): Observable { return this.doc(ref).valueChanges({idField: 'id'}); } public col$(ref: CollectionPredicate, queryFn?: QueryFn): Observable { return this.col(ref, queryFn).valueChanges({idField: 'id'}); } }