Skip to content

Commit 74dce18

Browse files
fully migrate
1 parent dbe3d1b commit 74dce18

File tree

4 files changed

+69
-62
lines changed

4 files changed

+69
-62
lines changed

package.json

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
2-
"name": "@surajmandalcell/react-firebase-chat-core",
2+
"name": "@surajmandalcell/react-firebase-chat",
33
"version": "1.4.2",
44
"description": "Actively maintained, community-driven Firebase BaaS for chat applications with an optional chat UI.",
55
"homepage": "https://flyer.chat",
66
"repository": {
77
"type": "git",
8-
"url": "https://github.com/surajmandalcell/react-firebase-chat-core.git"
8+
"url": "https://github.com/surajmandalcell/react-firebase-chat.git"
99
},
1010
"main": "lib/index.js",
1111
"types": "lib/index.d.ts",
@@ -39,33 +39,21 @@
3939
"devDependencies": {
4040
"@babel/core": "^7.15.8",
4141
"@babel/runtime": "^7.15.4",
42-
"@react-native-community/eslint-config": "^3.0.1",
43-
"@react-native-firebase/app": "^12.9.3",
44-
"@react-native-firebase/auth": "^12.9.3",
45-
"@react-native-firebase/firestore": "^12.9.3",
4642
"@types/jest": "^27.0.2",
47-
"@types/react-native": "^0.66.0",
4843
"@types/react-test-renderer": "^17.0.1",
4944
"babel-jest": "^27.3.1",
5045
"eslint": "^7.32.0",
5146
"eslint-plugin-simple-import-sort": "^7.0.0",
5247
"jest": "^27.3.1",
53-
"metro-react-native-babel-preset": "^0.66.2",
5448
"react": "^17.0.2",
55-
"react-native": "^0.66.1",
5649
"react-test-renderer": "^17.0.2",
5750
"type-coverage": "^2.18.2",
5851
"typescript": "^4.4.4"
5952
},
6053
"peerDependencies": {
61-
"@react-native-firebase/app": "*",
62-
"@react-native-firebase/auth": "*",
63-
"@react-native-firebase/firestore": "*",
64-
"react": "*",
65-
"react-native": "*"
54+
"react": "*"
6655
},
6756
"jest": {
68-
"preset": "react-native",
6957
"moduleFileExtensions": [
7058
"ts",
7159
"tsx",

src/common/utils.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import {
55
doc,
66
DocumentData,
77
DocumentSnapshot,
8-
Firestore,
98
getDoc,
9+
getFirestore,
1010
QueryDocumentSnapshot,
1111
QuerySnapshot,
1212
serverTimestamp,
@@ -26,7 +26,8 @@ export const setConfig = (config: IFirebaseChatCoreConfig) => {
2626
}
2727

2828
/** Creates {@link User} in Firebase to store name and avatar used on rooms list */
29-
export const createUserInFirestore = async (user: IUser, db: Firestore) => {
29+
export const createUserInFirestore = async (user: IUser) => {
30+
const db = getFirestore();
3031
const _collection = collection(db, USERS_COLLECTION_NAME)
3132
const _doc = doc(_collection, user.id);
3233
await setDoc(_doc, {
@@ -42,14 +43,16 @@ export const createUserInFirestore = async (user: IUser, db: Firestore) => {
4243
}
4344

4445
/** Removes {@link User} from `users` collection in Firebase */
45-
export const deleteUserFromFirestore = async (userId: string, db: Firestore) => {
46+
export const deleteUserFromFirestore = async (userId: string) => {
47+
const db = getFirestore();
4648
const _collection = collection(db, USERS_COLLECTION_NAME)
4749
const _doc = doc(_collection, userId)
4850
await deleteDoc(_doc);
4951
}
5052

5153
/** Fetches user from Firebase and returns a promise */
52-
export const fetchUser = async (userId: string, db: Firestore, role?: IUser['role']) => {
54+
export const fetchUser = async (userId: string, role?: IUser['role']) => {
55+
const db = getFirestore();
5356
const _collection = collection(db, USERS_COLLECTION_NAME)
5457
const _doc = doc(_collection, userId);
5558
const __doc = await getDoc(_doc);
@@ -84,14 +87,13 @@ export const fetchUser = async (userId: string, db: Firestore, role?: IUser['rol
8487
export const processRoomsQuery = async ({
8588
firebaseUser,
8689
query,
87-
db
8890
}: {
8991
firebaseUser: User,
9092
query: QuerySnapshot
91-
db: Firestore
9293
}) => {
94+
const db = getFirestore();
9395
const promises = query.docs.map(async (_doc) =>
94-
processRoomDocument({ _doc, firebaseUser, db })
96+
processRoomDocument({ _doc, firebaseUser })
9597
)
9698

9799
return await Promise.all(promises)
@@ -100,14 +102,13 @@ export const processRoomsQuery = async ({
100102
/** Returns a {@link Room} created from Firebase document */
101103
export const processRoomDocument = async ({
102104
_doc,
103-
firebaseUser,
104-
db
105+
firebaseUser
105106
}: {
106107
_doc: DocumentSnapshot<DocumentData>
107108
| QueryDocumentSnapshot<DocumentData>,
108-
firebaseUser: User,
109-
db: Firestore
109+
firebaseUser: User
110110
}) => {
111+
const db = getFirestore();
111112
const data = _doc.data()!
112113

113114
// Ignore types here, not provided by the Firebase library
@@ -133,7 +134,7 @@ export const processRoomDocument = async ({
133134
(data.userRoles as Record<string, IUser['role']>) ?? undefined
134135

135136
const users = await Promise.all(
136-
userIds.map((userId) => fetchUser(userId, db, userRoles?.[userId]))
137+
userIds.map((userId) => fetchUser(userId, userRoles?.[userId]))
137138
)
138139

139140
if (type === 'direct') {

src/react/useRoom.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export const useRoom = (initialRoom: IRoom, db: Firestore) => {
1616
const _collection = collection(db, ROOMS_COLLECTION_NAME);
1717
const _doc = doc(_collection, initialRoom.id);
1818
const _onSnapshot = onSnapshot(_doc, async (__doc) => {
19-
const newRoom = await processRoomDocument({ _doc: __doc, firebaseUser, db })
19+
const newRoom = await processRoomDocument({ _doc: __doc, firebaseUser })
2020

2121
setRoom(newRoom)
2222
})

src/react/useRooms.ts

Lines changed: 52 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
import {
2+
collection,
3+
doc,
4+
getDoc,
5+
getDocs,
6+
getFirestore,
7+
onSnapshot,
8+
orderBy,
9+
query,
10+
serverTimestamp,
11+
setDoc,
12+
where,
13+
} from 'firebase/firestore';
114
import React from 'react';
215

316
import { fetchUser, processRoomsQuery, ROOMS_COLLECTION_NAME } from '../common/utils';
@@ -17,26 +30,28 @@ import { useFirebaseUser } from './useFirebaseUser';
1730
export const useRooms = (orderByUpdatedAt?: boolean) => {
1831
const [rooms, setRooms] = React.useState<IRoom[]>([])
1932
const { firebaseUser } = useFirebaseUser()
33+
const db = getFirestore();
2034

2135
React.useEffect(() => {
2236
if (!firebaseUser) {
2337
setRooms([])
2438
return
2539
}
2640

27-
const collection = orderByUpdatedAt
28-
? firestore()
29-
.collection(ROOMS_COLLECTION_NAME)
30-
.where('userIds', 'array-contains', firebaseUser.uid)
31-
.orderBy('updatedAt', 'desc')
32-
: firestore()
33-
.collection(ROOMS_COLLECTION_NAME)
34-
.where('userIds', 'array-contains', firebaseUser.uid)
41+
let _collection;
3542

36-
return collection.onSnapshot(async (query) => {
37-
const newRooms = await processRoomsQuery({ firebaseUser, query })
43+
if (orderByUpdatedAt) {
44+
const col = collection(db, ROOMS_COLLECTION_NAME)
45+
_collection = query(col, where('userIds', 'array-contains', firebaseUser.uid), orderBy('updatedAt', 'desc'))
46+
} else {
47+
const col = collection(db, ROOMS_COLLECTION_NAME)
48+
_collection = query(col, where('userIds', 'array-contains', firebaseUser.uid))
49+
}
50+
51+
return onSnapshot(_collection, async (_query: any) => {
52+
const newRooms = await processRoomsQuery({ firebaseUser, query: _query });
3853

39-
setRooms(newRooms)
54+
setRooms(newRooms);
4055
})
4156
}, [firebaseUser, orderByUpdatedAt])
4257

@@ -61,21 +76,23 @@ export const useRooms = (orderByUpdatedAt?: boolean) => {
6176

6277
const roomUsers = [currentUser].concat(users)
6378

64-
const room = await firestore()
65-
.collection(ROOMS_COLLECTION_NAME)
66-
.add({
67-
createdAt: firestore.FieldValue.serverTimestamp(),
79+
const _collection = collection(db, ROOMS_COLLECTION_NAME);
80+
const _docRef = doc(_collection);
81+
await setDoc(_docRef, {
82+
createdAt: serverTimestamp(),
6883
imageUrl,
6984
metadata,
7085
name,
7186
type: 'group',
72-
updatedAt: firestore.FieldValue.serverTimestamp(),
87+
updatedAt: serverTimestamp(),
7388
userIds: roomUsers.map((u) => u.id),
7489
userRoles: roomUsers.reduce(
7590
(prev, curr) => ({ ...prev, [curr.id]: curr.role }),
7691
{}
7792
),
78-
})
93+
});
94+
95+
const room = await getDoc(_docRef);
7996

8097
return {
8198
id: room.id,
@@ -94,12 +111,11 @@ export const useRooms = (orderByUpdatedAt?: boolean) => {
94111
) => {
95112
if (!firebaseUser) return
96113

97-
const query = await firestore()
98-
.collection(ROOMS_COLLECTION_NAME)
99-
.where('userIds', 'array-contains', firebaseUser.uid)
100-
.get()
114+
const _collection = collection(db, ROOMS_COLLECTION_NAME);
115+
const _query = query(_collection,where('userIds', 'array-contains', firebaseUser.uid));
116+
const _docs = await getDocs(_query);
101117

102-
const allRooms = await processRoomsQuery({ firebaseUser, query })
118+
const allRooms = await processRoomsQuery({ firebaseUser, query: _docs });
103119

104120
const existingRoom = allRooms.find((room) => {
105121
if (room.type === 'group') return false
@@ -118,18 +134,20 @@ export const useRooms = (orderByUpdatedAt?: boolean) => {
118134

119135
const users = [currentUser].concat(otherUser)
120136

121-
const room = await firestore()
122-
.collection(ROOMS_COLLECTION_NAME)
123-
.add({
124-
createdAt: firestore.FieldValue.serverTimestamp(),
125-
imageUrl: undefined,
126-
metadata,
127-
name: undefined,
128-
type: 'direct',
129-
updatedAt: firestore.FieldValue.serverTimestamp(),
130-
userIds: users.map((u) => u.id),
131-
userRoles: undefined,
132-
})
137+
138+
const _docRef = doc(_collection);
139+
await setDoc(_docRef,{
140+
createdAt: serverTimestamp(),
141+
imageUrl: undefined,
142+
metadata,
143+
name: undefined,
144+
type: 'direct',
145+
updatedAt: serverTimestamp(),
146+
userIds: users.map((u) => u.id),
147+
userRoles: undefined,
148+
})
149+
150+
const room = await getDoc(_docRef);
133151

134152
return {
135153
id: room.id,

0 commit comments

Comments
 (0)