Skip to content

Commit 5cdb8ce

Browse files
feat(database): add option to include key on valueChanges() (#2126)
Co-authored-by: James Daniels <[email protected]>
1 parent 09ed22a commit 5cdb8ce

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

src/database/interfaces.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ export type FirebaseOperation = string | firebase.database.Reference | firebase.
55

66
export interface AngularFireList<T> {
77
query: DatabaseQuery;
8-
valueChanges(events?: ChildEvent[]): Observable<T[]>;
8+
valueChanges(events?: ChildEvent[], options?: {}): Observable<T[]>;
9+
valueChanges<K extends string>(events?: ChildEvent[], options?: {idField: K}): Observable<(T & {[T in K]?: string})[]>;
910
snapshotChanges(events?: ChildEvent[]): Observable<SnapshotAction<T>[]>;
1011
stateChanges(events?: ChildEvent[]): Observable<SnapshotAction<T>>;
1112
auditTrail(events?: ChildEvent[]): Observable<SnapshotAction<T>[]>;

src/database/list/create-reference.ts

+13-2
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,21 @@ export function createListReference<T= any>(query: DatabaseQuery, afDatabase: An
2525
auditTrail(events?: ChildEvent[]) {
2626
return auditTrail<T>(query, events, outsideAngularScheduler).pipe(afDatabase.keepUnstableUntilFirst);
2727
},
28-
valueChanges(events?: ChildEvent[]) {
28+
valueChanges<K extends string>(events?: ChildEvent[], options?: {idField?: K}) {
2929
const snapshotChanges$ = snapshotChanges<T>(query, events, outsideAngularScheduler);
3030
return snapshotChanges$.pipe(
31-
map(actions => actions.map(a => a.payload.val() as T)),
31+
map(actions => actions.map(a => {
32+
if (options && options.idField) {
33+
return {
34+
...a.payload.val() as T,
35+
...{
36+
[options.idField]: a.key
37+
}
38+
};
39+
} else {
40+
return a.payload.val() as T;
41+
}
42+
})),
3243
afDatabase.keepUnstableUntilFirst
3344
);
3445
}

0 commit comments

Comments
 (0)