diff --git a/src/database/interfaces.ts b/src/database/interfaces.ts index 742c798e5..8caa5e59f 100644 --- a/src/database/interfaces.ts +++ b/src/database/interfaces.ts @@ -5,7 +5,8 @@ export type FirebaseOperation = string | firebase.database.Reference | firebase. export interface AngularFireList { query: DatabaseQuery; - valueChanges(events?: ChildEvent[]): Observable; + valueChanges(events?: ChildEvent[], options?: {}): Observable; + valueChanges(events?: ChildEvent[], options?: {idField: K}): Observable<(T & {[T in K]?: string})[]>; snapshotChanges(events?: ChildEvent[]): Observable[]>; stateChanges(events?: ChildEvent[]): Observable>; auditTrail(events?: ChildEvent[]): Observable[]>; diff --git a/src/database/list/create-reference.ts b/src/database/list/create-reference.ts index b80136a62..0195666eb 100644 --- a/src/database/list/create-reference.ts +++ b/src/database/list/create-reference.ts @@ -25,10 +25,21 @@ export function createListReference(query: DatabaseQuery, afDatabase: An auditTrail(events?: ChildEvent[]) { return auditTrail(query, events, outsideAngularScheduler).pipe(afDatabase.keepUnstableUntilFirst); }, - valueChanges(events?: ChildEvent[]) { + valueChanges(events?: ChildEvent[], options?: {idField?: K}) { const snapshotChanges$ = snapshotChanges(query, events, outsideAngularScheduler); return snapshotChanges$.pipe( - map(actions => actions.map(a => a.payload.val() as T)), + map(actions => actions.map(a => { + if (options && options.idField) { + return { + ...a.payload.val() as T, + ...{ + [options.idField]: a.key + } + }; + } else { + return a.payload.val() as T; + } + })), afDatabase.keepUnstableUntilFirst ); }