***0. Firebase*** This application requires you to have firebase setup, from there you specify at what location you want to store chat ``` import FireChat from '../fire-chat'; const chat = new Firechat(db.ref("chat")); ``` ***1. Register events*** Before interacting with FireChat it is best to register to the socket events, you likely only want to do this once per application. ``` chat.on(``'rooms-changed'``, (rooms)=>{ //{room1:{name"",id:"",lastMessage:{}}} }); chat.on('message-add', (room, message)=>{ //{name:"Sender",message:"Hello World", typing:{user1:"Name"}} }); ``` ***2. Get rooms*** Use an authorized firebase user and defined username to get rooms *You will need to call this before receiving ``'rooms-changed'`` events* ``` chat.setUser(id, username); ``` You will receive an updated room collection from the rooms-changed event when the following events occur: - setUser was successful - The lastMessage changes - You leave a room - You enter a room - A user is typing ***3. Enter room*** This will subscribe you to the room messages, and also make you a member of the room if you aren't already. *you can only be subscribed into 1 room at a time* ``` chat.enterRoom(id, (room)=>{ //{name:"", id:""} }) ``` You will receive new messages via the ```message-add``` event for the room you are subscribed to ***4. Leave room*** This will remove the room from your list of rooms ``` chat.enterRoom(id, (room)=>{ //{name:"", id:""} }) ``` ***5. Send typing notification*** Whenever you receive a keyup event call this, the lib will handle the rest ``` chat.userTyping(roomId) ``` ***6. Read receipts*** Let the library know when the user is viewing a chat (e.g. chat is showing, app is active) and when the user isn't (e.g navigated away) ``` chat.startedViewing(roomId) chat.stoppedViewing(roomId) ```