From 5a5d4c2f13a1fa5163b8990d05fc7a022e162a22 Mon Sep 17 00:00:00 2001 From: Sarun Intaralawan Date: Thu, 4 Jul 2019 21:32:35 +0700 Subject: [PATCH 1/3] feat(database): add option to include key on `valueChanges()` --- src/database/interfaces.ts | 2 +- src/database/list/create-reference.ts | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/database/interfaces.ts b/src/database/interfaces.ts index d278ffcbb..1939fb288 100644 --- a/src/database/interfaces.ts +++ b/src/database/interfaces.ts @@ -5,7 +5,7 @@ export type FirebaseOperation = string | database.Reference | database.DataSnaps export interface AngularFireList { query: DatabaseQuery; - valueChanges(events?: ChildEvent[]): 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 b6cd14e86..09c739c3e 100644 --- a/src/database/list/create-reference.ts +++ b/src/database/list/create-reference.ts @@ -38,14 +38,25 @@ export function createListReference(query: DatabaseQuery, afDatabase: Ang ) ); }, - valueChanges(events?: ChildEvent[]) { + valueChanges(events?: ChildEvent[], options?: {idField?: K}) { const snapshotChanges$ = snapshotChanges(query, events); return afDatabase.scheduler.keepUnstableUntilFirst( afDatabase.scheduler.runOutsideAngular( 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; + } + })) ); } } From e565ac87eb3d9c2cced1dec5a9e5b69c70325377 Mon Sep 17 00:00:00 2001 From: James Daniels Date: Wed, 11 Nov 2020 14:51:12 -0500 Subject: [PATCH 2/3] Update create-reference.ts --- src/database/list/create-reference.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/database/list/create-reference.ts b/src/database/list/create-reference.ts index ce2343119..0195666eb 100644 --- a/src/database/list/create-reference.ts +++ b/src/database/list/create-reference.ts @@ -25,9 +25,7 @@ export function createListReference(query: DatabaseQuery, afDatabase: An auditTrail(events?: ChildEvent[]) { return auditTrail(query, events, outsideAngularScheduler).pipe(afDatabase.keepUnstableUntilFirst); }, - valueChanges(events?: ChildEvent[], options?: {}): Observable; - valueChanges(events?: ChildEvent[], options: {idField: K}): Observable<(T & { [T in K]: string })[]>; - valueChanges(events?: ChildEvent[], options?: {idField?: K}) { + valueChanges(events?: ChildEvent[], options?: {idField?: K}) { const snapshotChanges$ = snapshotChanges(query, events, outsideAngularScheduler); return snapshotChanges$.pipe( map(actions => actions.map(a => { From 608faa5f6c77d37be7449f5ed98d0c5395507538 Mon Sep 17 00:00:00 2001 From: James Daniels Date: Wed, 11 Nov 2020 14:54:00 -0500 Subject: [PATCH 3/3] Update interfaces.ts --- src/database/interfaces.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/database/interfaces.ts b/src/database/interfaces.ts index b5656c46e..8caa5e59f 100644 --- a/src/database/interfaces.ts +++ b/src/database/interfaces.ts @@ -5,6 +5,7 @@ export type FirebaseOperation = string | firebase.database.Reference | firebase. export interface AngularFireList { query: DatabaseQuery; + 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>;