https://github.com/metehankurucu/firebase-chat
A small package for one-to-one messaging with Firebase.
https://github.com/metehankurucu/firebase-chat
chat firebase firebase-chat typescript
Last synced: 5 months ago
JSON representation
A small package for one-to-one messaging with Firebase.
- Host: GitHub
- URL: https://github.com/metehankurucu/firebase-chat
- Owner: metehankurucu
- Created: 2021-08-08T14:11:04.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2022-02-15T15:47:07.000Z (over 4 years ago)
- Last Synced: 2025-10-10T22:25:51.904Z (8 months ago)
- Topics: chat, firebase, firebase-chat, typescript
- Language: JavaScript
- Homepage:
- Size: 1.3 MB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
- [Install](#getting-started)
- [Usage](#usage)
- [API](#api)
## Getting started
Install the library:
```
yarn add @metehankurucu/firebase-chat
```
or npm:
```
npm install --save @metehankurucu/firebase-chat
```
## Usage
#### Step 1 - Initialize FirebaseChat
```js
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.
```js
if (!FirebaseChat.isInitialized) {
FirebaseChat.initialize({}, firebaseConfig);
}
```
#### Step 2 - Set Current User Id
```js
import FirebaseChat from '@metehankurucu/firebase-chat';
FirebaseChat.setUser(userId);
// Or you can combine two steps
FirebaseChat.initialize({}, firebaseConfig).setUser(userId);
```
#### Rooms
```js
const rooms = FirebaseChat.rooms();
```
Listen current user's rooms
```js
const unsubscribe = rooms.listenRooms(async (items) => {
// Do some stuff
});
```
Get a room
```js
// 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
```js
rooms.deleteRoom(room.id);
```
Create a room
```js
rooms.createRoom(otherUserId);
```
Note: Recommended way to create a room using getRoom with createIfNotExists option.
```js
const room = rooms.getRoom(otherUserId, { createIfNotExists: true });
```
Get collection. If you want to use collection to run custom operations.
```js
// Firestore collection instance
const roomsCollection = rooms.collection();
```
#### Messages
```js
const room = await rooms.getRoom(otherUserId, { createIfNotExists: true });
const messages = FirebaseChat.messages(room.id);
```
Send message
```js
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
```js
// For example listen messages with first get last 50 messages
const unsubscribe = messages.listenMessages({ limit: 50 }, (items) => {});
```
Get this room's messages
```js
const messagesList = await messages.getMessages({ limit: 50 });
```
Get other user id
```js
const otherUserId = messages.getOtherUserId();
```
On read a message. This will update this message's `read` field as `true`.
```js
await messages.onReadMessage(messageId);
```
On read all messages. This will update all messages sent by other user `read` field as `true`.
```js
await messages.onReadAllMessages();
```
Delete a message
```js
await messages.deleteMessage(messageId);
```
Delete all messages of room
```js
await messages.deleteMessage(messageId);
```
Get collection. If you want to use collection to run custom operations.
```js
// Firestore collection instance
const messagesCollection = messages.collection();
```
## API
TODO