Let's have a biz model defined like this
export inteface Item {
id: string;
name: string;
}
export interface Container {
id: string;
items: Item[];
}
In Cloud Firestore we have collection /containers
and each container contains collection /items with documents.
Each document has field name.
So the structure inside Cloud Firestore copies our biz model.
Now I'd like to retrieve specific container with its collection of items.
getContainer(idIn: string) {
const document: AngularFirestoreDocument<Container> = this.afs.doc('containers/' + idIn);
const document$: Observable<Container> = document.snapshotChanges().map(a => {
const data = a.payload.data() as Container;
const id = a.payload.id;
return this.getItems(idIn).map( item => {
return {id, ...data, items: item};
});
});
return document$;
}
getItems(id: string) {
const collection: AngularFirestoreCollection<Item> = this.afs.collection('containers/' + id + '/items');
return collection.snapshotChanges().map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as Item;
const id = a.payload.doc.id;
return {id, ...data};
});
});
}
But i keep getting this error about missing id on returning Observable. Compiling with typescript 2.6.2.
error TS2322: Type 'Observable<Observable<{ items: { 'id': string; 'item': string; }[]; 'id': string...' is not assignable to type 'Observable<Container>'.
Type 'Observable<{ items: { 'id': string; 'item': string; }[]; 'id': string...' is not assignable to type 'Container'.
Property ''id'' is missing in type 'Observable<{ items: { 'id': string; 'item': string; }[]; 'id': string...'.
Could anyone point out what i am doing wrong?