Skip to content

A small package for one-to-one messaging with Firebase.

Notifications You must be signed in to change notification settings

metehankurucu/firebase-chat

Repository files navigation



firebase-chat


npm package downloads license typescript

A small package for one-to-one messaging with Firebase.


Getting started

Install the library:

yarn add @metehankurucu/firebase-chat

or npm:

npm install --save @metehankurucu/firebase-chat

Usage

Step 1 - Initialize FirebaseChat

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);
}

Step 2 - Set Current User Id

import FirebaseChat from '@metehankurucu/firebase-chat';

FirebaseChat.setUser(userId);

// Or you can combine two steps
FirebaseChat.initialize({}, firebaseConfig).setUser(userId);

Rooms

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();

Messages

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();

API

TODO