Install the library:
yarn add @metehankurucu/firebase-chat
or npm:
npm install --save @metehankurucu/firebase-chat
import FirebaseChat from '@metehankurucu/firebase-chat';
// Optional. Use if firebase not initialized before
const firebaseConfig = {
apiKey: '',
authDomain: '',
projectId: '',
storageBucket: '',
messagingSenderId: '',
appId: '',
measurementId: '',
};
const options = {
collectionPrefix: 'chat', // optional. collection names will be 'chatmessages' and 'chatrooms'
};
FirebaseChat.initialize({}, firebaseConfig);
// Or set collection prefixes
FirebaseChat.initialize(options, firebaseConfig);
// Or give custom firestore instance (for example using library in React Native)
import firestore from '@react-native-firebase/firestore';
FirebaseChat.initialize({}, firebaseConfig, firestore());
FirebaseChat must initialize only one time. You can check if it is initialized.
if (!FirebaseChat.isInitialized) {
FirebaseChat.initialize({}, firebaseConfig);
}
import FirebaseChat from '@metehankurucu/firebase-chat';
FirebaseChat.setUser(userId);
// Or you can combine two steps
FirebaseChat.initialize({}, firebaseConfig).setUser(userId);
const rooms = FirebaseChat.rooms();
Listen current user's rooms
const unsubscribe = rooms.listenRooms(async (items) => {
// Do some stuff
});
Get a room
// Get a room with other user id
const room = rooms.getRoom(otherUserId);
// Or room can create if not exists
const room = rooms.getRoom(otherUserId, { createIfNotExists: true });
Delete a room
rooms.deleteRoom(room.id);
Create a room
rooms.createRoom(otherUserId);
Note: Recommended way to create a room using getRoom with createIfNotExists option.
const room = rooms.getRoom(otherUserId, { createIfNotExists: true });
Get collection. If you want to use collection to run custom operations.
// Firestore collection instance
const roomsCollection = rooms.collection();
const room = await rooms.getRoom(otherUserId, { createIfNotExists: true });
const messages = FirebaseChat.messages(room.id);
Send message
const message = messages.sendMessage('Hey!');
// Optional mediaURL
const message = messages.sendMessage('Did you see this meme?', 'pic-url');
Note: Sending message will update current room's lastMessage
field.
Listen this room's messages
// For example listen messages with first get last 50 messages
const unsubscribe = messages.listenMessages({ limit: 50 }, (items) => {});
Get this room's messages
const messagesList = await messages.getMessages({ limit: 50 });
Get other user id
const otherUserId = messages.getOtherUserId();
On read a message. This will update this message's read
field as true
.
await messages.onReadMessage(messageId);
On read all messages. This will update all messages sent by other user read
field as true
.
await messages.onReadAllMessages();
Delete a message
await messages.deleteMessage(messageId);
Delete all messages of room
await messages.deleteMessage(messageId);
Get collection. If you want to use collection to run custom operations.
// Firestore collection instance
const messagesCollection = messages.collection();
TODO