Estoy usando firestore para mi aplicación de chat.
Tengo 2 pestañas, la primera es para mostrar todos los usuarios registrados y otra segunda pestaña para mostrar todos los usuarios con los que he chateado.
he creado 2 colecciones en firestore
He combinado la identificación de 2 usuarios para identificar al remitente y al receptor y lo he almacenado en mensajes.
Código:
1. //get all registered users const querySanp = await firestore() .collection('users') .where('uid', '!=', user.uid) .get(); const allusers = querySanp.docs.map(docSnap => docSnap.data()); setUsers(allusers); 2. //get all registered users const docid = uid > user.uid ? user.uid + '-' + uid : uid + '-' + user.uid; const messageRef = firestore() .collection('chatrooms') .doc(docid) .collection('messages') .orderBy('createdAt', 'desc'); const unSubscribe = messageRef.onSnapshot(querySnap => { const allmsg = querySnap.docs.map(docSanp => { const data = docSanp.data(); if (data.createdAt) { return { ...docSanp.data(), createdAt: docSanp.data().createdAt.toDate(), }; } else { return { ...docSanp.data(), createdAt: new Date(), }; } }); setMessages(allmsg); });
¿Cómo conseguir usuarios con los que he chateado?
Puedes crear una colección:
Conversations: { user1, user2 }
Y en tu colección de mensajes:
messages : { conversationId, sender, receiver }
Entonces, en su aplicación (supongo que tiene una pantalla de chats
), solo obtiene todas las conversaciones en las que es user1
o user2
.