import React, { useEffect, useRef, useState } from 'react';
//Import Firbase component
import firebase from 'firebase/app';
//Import FirebaseAuth component
import { useCollectionData } from 'react-firebase-hooks/firestore';
// Import FontAwesomeIcon component
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faPaperPlane } from '@fortawesome/free-solid-svg-icons';
// Importing Component
import ChatMessage from './ChatMessage';
function ChatRoom() {
const auth = firebase.auth()
const firestore = firebase.firestore();
const dummy = useRef();
const messagesRef = firestore.collection('messages');
const query = messagesRef.orderBy('createdAt');
const [messages] = useCollectionData(query, { idField: 'id' });
const [formValue, setFormValue] = useState('');
const scrollToBottom = () =>{
dummy.current?.scrollIntoView({behavior: "smooth"})
}
useEffect(()=>{
scrollToBottom();
})
const sendMessage = async (e) => {
e.preventDefault();
const { uid, photoURL } = auth.currentUser;
await messagesRef.add({
text: formValue,
createdAt: firebase.firestore.FieldValue.serverTimestamp(),
uid,
photoURL
})
setFormValue('');
scrollToBottom();
}
return (<>
<main>
{messages && messages.map((msg, index, pool) => {
const prev = pool[index-1];
const next = pool[index+1]
return <ChatMessage key={msg.id} message={msg} neighbour={{prev, next}} />
})}
<span ref={dummy}></span>
</main>
<form onSubmit={sendMessage}>
<input value={formValue} onChange={(e) => setFormValue(e.target.value)} placeholder="Type a message" />
<button className="chat-message-button" type="submit" disabled={!formValue}>
<FontAwesomeIcon icon={faPaperPlane} />
</button>
</form>
</>)
}
export default ChatRoom
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}