1- import { FirebaseAuthTypes } from '@react-native-firebase/auth'
2- import firestore , {
3- FirebaseFirestoreTypes ,
4- } from '@react-native-firebase/firestore'
5-
6- import { FirebaseChatCoreConfig , Room , User } from './types'
1+ import auth , { UserProfile } from 'firebase/auth' ;
2+ import {
3+ collection ,
4+ deleteDoc ,
5+ doc ,
6+ DocumentData ,
7+ DocumentSnapshot ,
8+ Firestore ,
9+ getDoc ,
10+ QueryDocumentSnapshot ,
11+ QuerySnapshot ,
12+ serverTimestamp ,
13+ setDoc ,
14+ } from 'firebase/firestore/lite' ;
15+
16+ import { FirebaseChatCoreConfig , Room , User } from './types' ;
717
818export let ROOMS_COLLECTION_NAME = 'rooms'
919export let USERS_COLLECTION_NAME = 'users'
@@ -16,40 +26,43 @@ export const setConfig = (config: FirebaseChatCoreConfig) => {
1626}
1727
1828/** Creates {@link User} in Firebase to store name and avatar used on rooms list */
19- export const createUserInFirestore = async ( user : User ) => {
20- await firestore ( ) . collection ( USERS_COLLECTION_NAME ) . doc ( user . id ) . set ( {
21- createdAt : firestore . FieldValue . serverTimestamp ( ) ,
29+ export const createUserInFirestore = async ( user : User , db : Firestore ) => {
30+ const _collection = collection ( db , USERS_COLLECTION_NAME )
31+ const _doc = doc ( _collection , user . id ) ;
32+ await setDoc ( _doc , {
33+ createdAt : serverTimestamp ( ) ,
2234 firstName : user . firstName ,
2335 imageUrl : user . imageUrl ,
2436 lastName : user . lastName ,
2537 lastSeen : user . lastSeen ,
2638 metadata : user . metadata ,
2739 role : user . role ,
28- updatedAt : firestore . FieldValue . serverTimestamp ( ) ,
29- } )
40+ updatedAt : serverTimestamp ( ) ,
41+ } ) ;
3042}
3143
3244/** Removes {@link User} from `users` collection in Firebase */
33- export const deleteUserFromFirestore = async ( userId : string ) => {
34- await firestore ( ) . collection ( USERS_COLLECTION_NAME ) . doc ( userId ) . delete ( )
45+ export const deleteUserFromFirestore = async ( userId : string , db : Firestore ) => {
46+ const _collection = collection ( db , USERS_COLLECTION_NAME )
47+ const _doc = doc ( _collection , userId )
48+ await deleteDoc ( _doc ) ;
3549}
3650
3751/** Fetches user from Firebase and returns a promise */
38- export const fetchUser = async ( userId : string , role ?: User [ 'role' ] ) => {
39- const doc = await firestore ( )
40- . collection ( USERS_COLLECTION_NAME )
41- . doc ( userId )
42- . get ( )
52+ export const fetchUser = async ( userId : string , db : Firestore , role ?: User [ 'role' ] ) => {
53+ const _collection = collection ( db , USERS_COLLECTION_NAME )
54+ const _doc = doc ( _collection , userId ) ;
55+ const __doc = await getDoc ( _doc ) ;
4356
44- const data = doc . data ( ) !
57+ const data = __doc . data ( ) !
4558
4659 const user : User = {
4760 // Ignore types here, not provided by the Firebase library
4861 // type-coverage:ignore-next-line
4962 createdAt : data . createdAt ?. toMillis ( ) ?? undefined ,
5063 // type-coverage:ignore-next-line
5164 firstName : data . firstName ?? undefined ,
52- id : doc . id ,
65+ id : __doc . id ,
5366 // type-coverage:ignore-next-line
5467 imageUrl : data . imageUrl ?? undefined ,
5568 // type-coverage:ignore-next-line
@@ -71,33 +84,37 @@ export const fetchUser = async (userId: string, role?: User['role']) => {
7184export const processRoomsQuery = async ( {
7285 firebaseUser,
7386 query,
87+ db
7488} : {
75- firebaseUser : FirebaseAuthTypes . User
76- query : FirebaseFirestoreTypes . QuerySnapshot
89+ firebaseUser : UserProfile ,
90+ query : QuerySnapshot
91+ db : Firestore
7792} ) => {
78- const promises = query . docs . map ( async ( doc ) =>
79- processRoomDocument ( { doc , firebaseUser } )
93+ const promises = query . docs . map ( async ( _doc ) =>
94+ processRoomDocument ( { _doc , firebaseUser, db } )
8095 )
8196
8297 return await Promise . all ( promises )
8398}
8499
85100/** Returns a {@link Room} created from Firebase document */
86101export const processRoomDocument = async ( {
87- doc ,
102+ _doc ,
88103 firebaseUser,
104+ db
89105} : {
90- doc :
91- | FirebaseFirestoreTypes . DocumentSnapshot < FirebaseFirestoreTypes . DocumentData >
92- | FirebaseFirestoreTypes . QueryDocumentSnapshot < FirebaseFirestoreTypes . DocumentData >
93- firebaseUser : FirebaseAuthTypes . User
106+ _doc :
107+ | DocumentSnapshot < DocumentData >
108+ | QueryDocumentSnapshot < DocumentData > ,
109+ firebaseUser : UserProfile ,
110+ db : Firestore
94111} ) => {
95- const data = doc . data ( ) !
112+ const data = _doc . data ( ) !
96113
97114 // Ignore types here, not provided by the Firebase library
98115 // type-coverage:ignore-next-line
99116 const createdAt = data . createdAt ?. toMillis ( ) ?? undefined
100- const id = doc . id
117+ const id = _doc . id
101118 // type-coverage:ignore-next-line
102119 const updatedAt = data . updatedAt ?. toMillis ( ) ?? undefined
103120
@@ -117,7 +134,7 @@ export const processRoomDocument = async ({
117134 ( data . userRoles as Record < string , User [ 'role' ] > ) ?? undefined
118135
119136 const users = await Promise . all (
120- userIds . map ( ( userId ) => fetchUser ( userId , userRoles ?. [ userId ] ) )
137+ userIds . map ( ( userId ) => fetchUser ( userId , db , userRoles ?. [ userId ] ) )
121138 )
122139
123140 if ( type === 'direct' ) {
0 commit comments