| 6 | import { createObjectSnapshotChanges } from './snapshot-changes'; |
| 7 | |
| 8 | export function createObjectReference<T= any>(query: DatabaseQuery, afDatabase: AngularFireDatabase, injector?: Injector): AngularFireObject<T> { |
| 9 | return { |
| 10 | query, |
| 11 | snapshotChanges<T>() { |
| 12 | return createObjectSnapshotChanges<T>(query, afDatabase.schedulers.outsideAngular)().pipe( |
| 13 | pendingUntilEvent(injector) |
| 14 | ); |
| 15 | }, |
| 16 | update(data: Partial<T>) { return query.ref.update(data as any) as Promise<void>; }, |
| 17 | set(data: T) { return query.ref.set(data) as Promise<void>; }, |
| 18 | remove() { return query.ref.remove() as Promise<void>; }, |
| 19 | valueChanges<T>() { |
| 20 | const snapshotChanges$ = createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)(); |
| 21 | return snapshotChanges$.pipe( |
| 22 | pendingUntilEvent(injector), |
| 23 | map(action => action.payload.exists() ? action.payload.val() as T : null) |
| 24 | ); |
| 25 | }, |
| 26 | }; |
| 27 | } |