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?