-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathuseRoomsData.js
41 lines (38 loc) · 1.53 KB
/
useRoomsData.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import {useEffect, useRef} from "react";
import { useStateValue } from "./StateProvider";
import db from "./firebase";
export default function useRoomsData() {
const [{ roomsData: initRoomsData }, dispatch] = useStateValue();
const roomsData = useRef(initRoomsData)
useEffect(() => {
roomsData.current = initRoomsData;
}, [initRoomsData])
return [function setRoomsData(userID, roomID) {
if (!roomsData.current[roomID]) {
const lastMessageListener = db.collection("rooms").doc(roomID).onSnapshot(doc => {
//console.log("last message listener executed with room id: ", roomID)
dispatch({
type: "update_rooms_data",
dataType: "lastMessage",
data: doc.data()?.lastMessage,
roomID
});
});
const onlineStateListener = db.collection("users").doc(userID).onSnapshot(doc => {
//console.log("onlineState listener executed with room id: ", roomID)
dispatch({
type: "update_rooms_data",
dataType: "onlineState",
data: doc.data()?.state,
roomID
});
});
dispatch({
type: "add_rooms_data",
roomID,
lastMessageListener: lastMessageListener,
onlineStatelistener: onlineStateListener
});
};
}];
};