1- import { list , object , QueryChange , listVal } from 'rxfire/database' ;
1+ import { list , object , QueryChange , listVal , objectVal } from 'rxfire/database' ;
22import { ReactFireOptions , useObservable , checkIdField , ObservableStatus , ReactFireGlobals } from './' ;
33
4- import { Observable } from 'rxjs' ;
5- import { map } from 'rxjs/operators' ;
6-
74import type { Query as DatabaseQuery , DatabaseReference } from 'firebase/database' ;
85
96// Since we're side-effect free, we need to ensure our observableId cache is global
@@ -34,33 +31,10 @@ export function useDatabaseObject<T = unknown>(ref: DatabaseReference, options?:
3431 return useObservable ( observableId , observable$ , options ) ;
3532}
3633
37- // ============================================================================
38- // TODO: switch to rxfire's objectVal once this PR is merged:
39- // https://github.com/firebase/firebase-js-sdk/pull/2352
40-
41- function objectVal < T > ( query : DatabaseQuery , keyField ?: string ) : Observable < T > {
42- return object ( query ) . pipe ( map ( ( change ) => changeToData ( change , keyField ) as T ) ) ;
43- }
44-
45- function changeToData ( change : QueryChange , keyField ?: string ) : { } {
46- const val = change . snapshot . val ( ) ;
47-
48- // don't worry about setting IDs if the value is a primitive type
49- if ( typeof val !== 'object' ) {
50- return val ;
51- }
52-
53- return {
54- ...change . snapshot . val ( ) ,
55- ...( keyField ? { [ keyField ] : change . snapshot . key } : null ) ,
56- } ;
57- }
58- // ============================================================================
59-
6034export function useDatabaseObjectData < T > ( ref : DatabaseReference , options ?: ReactFireOptions < T > ) : ObservableStatus < T > {
6135 const idField = options ? checkIdField ( options ) : 'NO_ID_FIELD' ;
6236 const observableId = `database:objectVal:${ ref . toString ( ) } :idField=${ idField } ` ;
63- const observable$ = objectVal < T > ( ref , idField ) ;
37+ const observable$ = objectVal < T > ( ref , { keyField : idField } ) ;
6438
6539 return useObservable ( observableId , observable$ , options ) ;
6640}
@@ -87,6 +61,6 @@ export function useDatabaseListData<T = { [key: string]: unknown }>(
8761) : ObservableStatus < T [ ] | null > {
8862 const idField = options ? checkIdField ( options ) : 'NO_ID_FIELD' ;
8963 const observableId = `database:listVal:${ getUniqueIdForDatabaseQuery ( ref ) } :idField=${ idField } ` ;
90- const observable$ = listVal < T > ( ref , idField ) ;
64+ const observable$ = listVal < T > ( ref , { keyField : idField } ) ;
9165 return useObservable ( observableId , observable$ , options ) ;
9266}
0 commit comments