|
|
|
|
|
|
|
|
import { chatActions } from "../store/chat-slice"; |
|
|
import { chatActions } from "../store/chat-slice"; |
|
|
import { BsCircleFill } from "react-icons/bs"; |
|
|
import { BsCircleFill } from "react-icons/bs"; |
|
|
import TypingBar from "./TypingBar"; |
|
|
import TypingBar from "./TypingBar"; |
|
|
|
|
|
import {getDate,getMonth} from '../helpers' |
|
|
|
|
|
|
|
|
const ChatWindow = ({ room }) => { |
|
|
const ChatWindow = ({ room }) => { |
|
|
const messagesEndRef = useRef(null); |
|
|
const messagesEndRef = useRef(null); |
|
|
|
|
|
|
|
|
const activeRoom = useSelector((state) => state.chat.activeRoom); |
|
|
const activeRoom = useSelector((state) => state.chat.activeRoom); |
|
|
const messages = useSelector((state) => state.chat.messages); |
|
|
const messages = useSelector((state) => state.chat.messages); |
|
|
const dispatch = useDispatch(); |
|
|
const dispatch = useDispatch(); |
|
|
|
|
|
const [proba,setProba] = useState([]) |
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
|
showDate() |
|
|
|
|
|
},[messages]) |
|
|
|
|
|
|
|
|
|
|
|
const showDate = () => { |
|
|
|
|
|
let temp = [...messages]; |
|
|
|
|
|
if(temp[0] !== undefined){ |
|
|
|
|
|
let date = getDate(temp[0].createdAtUtc) |
|
|
|
|
|
let d = date.getDate(); |
|
|
|
|
|
let m = date.getMonth(); |
|
|
|
|
|
let y = date.getFullYear(); |
|
|
|
|
|
temp.splice(0,0,{ |
|
|
|
|
|
content:getMonth(m) + " " + d.toString() + ", " + y.toString(), |
|
|
|
|
|
senderId:undefined, //is information about date not message |
|
|
|
|
|
username:undefined, |
|
|
|
|
|
id:null, |
|
|
|
|
|
createdAtUtc: undefined, |
|
|
|
|
|
}) |
|
|
|
|
|
for (let index = 0; index < temp.length; index++) { |
|
|
|
|
|
const element = temp[index]; |
|
|
|
|
|
let day = getDate(element.createdAtUtc).getDate(); |
|
|
|
|
|
if(temp[index + 1] !== undefined){ |
|
|
|
|
|
if(temp[index + 1].createdAtUtc !== undefined) |
|
|
|
|
|
{ |
|
|
|
|
|
if(temp[index].isAccessMessage === undefined){ |
|
|
|
|
|
if(getDate(temp[index + 1].createdAtUtc).getDate() > day ){ |
|
|
|
|
|
let elem = temp[index + 1].createdAtUtc; |
|
|
|
|
|
let d = getDate(elem).getDate() |
|
|
|
|
|
let m = getDate(elem).getMonth() |
|
|
|
|
|
let y = getDate(elem).getFullYear() |
|
|
|
|
|
temp.splice(index+1,0,{ |
|
|
|
|
|
content:getMonth(m) + " " + d.toString() + ", " + y.toString(), |
|
|
|
|
|
senderId:undefined, //is information about date not message |
|
|
|
|
|
username:undefined, |
|
|
|
|
|
id:null, |
|
|
|
|
|
createdAtUtc: undefined, |
|
|
|
|
|
}) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
setProba(temp) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
useEffect(() => { |
|
|
dispatch(chatActions.setMessages(room.messages)); |
|
|
dispatch(chatActions.setMessages(room.messages)); |
|
|
|
|
|
|
|
|
<div className="overlay p-3 px-4 d-flex flex-column-reverse"> |
|
|
<div className="overlay p-3 px-4 d-flex flex-column-reverse"> |
|
|
{/* mapirane poruke */} |
|
|
{/* mapirane poruke */} |
|
|
{user && |
|
|
{user && |
|
|
messages |
|
|
|
|
|
|
|
|
proba |
|
|
.map((n, index) => ( |
|
|
.map((n, index) => ( |
|
|
<div |
|
|
<div |
|
|
key={index} |
|
|
key={index} |
|
|
className={ |
|
|
className={ |
|
|
n.isAccessMessage === true |
|
|
|
|
|
|
|
|
n.isAccessMessage === true || n.senderId === undefined |
|
|
? "d-flex flex-column align-items-center" |
|
|
? "d-flex flex-column align-items-center" |
|
|
: n.senderId === user.id |
|
|
: n.senderId === user.id |
|
|
? "d-flex flex-column align-items-end" |
|
|
? "d-flex flex-column align-items-end" |
|
|
: "d-flex flex-column align-items-start" |
|
|
: "d-flex flex-column align-items-start" |
|
|
} |
|
|
} |
|
|
> |
|
|
> |
|
|
{console.log("Message", n, "User id", user.id)} |
|
|
|
|
|
<p |
|
|
|
|
|
className={`p-2 px-4 mb-0 rounded message ${ |
|
|
|
|
|
n.isAccessMessage === true |
|
|
|
|
|
|
|
|
<div |
|
|
|
|
|
className={`p-2 px-3 mb-0 rounded message ${ |
|
|
|
|
|
n.isAccessMessage === true || n.senderId === undefined |
|
|
? "text-muted small" |
|
|
? "text-muted small" |
|
|
: n.senderId !== user.id |
|
|
: n.senderId !== user.id |
|
|
? "bg-main-primary text-light chatMsg" |
|
|
? "bg-main-primary text-light chatMsg" |
|
|
: "bg-light text-dark chatMsg" |
|
|
: "bg-light text-dark chatMsg" |
|
|
}`} |
|
|
}`} |
|
|
> |
|
|
> |
|
|
|
|
|
<div style={{display:'flex',flexDirection:'column'}}> |
|
|
{n.content} |
|
|
{n.content} |
|
|
</p> |
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
n.senderId !== undefined ? |
|
|
|
|
|
<div style={{fontSize:12,alignSelf:'flex-end'}}> |
|
|
|
|
|
{(new Date(Date.parse(n.createdAtUtc))).getHours().toString()} |
|
|
|
|
|
: |
|
|
|
|
|
{(new Date(Date.parse(n.createdAtUtc))).getMinutes().toString()} |
|
|
|
|
|
</div> : '' |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
<p className="text-muted small m-0 p-0 mb-4"> |
|
|
<p className="text-muted small m-0 p-0 mb-4"> |
|
|
{n.senderId !== user?.id && !n.isAccessMessage ? ( |
|
|
|
|
|
|
|
|
{n.senderId !== user?.id && !n.isAccessMessage && n.senderId !== undefined ? ( |
|
|
activeUsers.some((m) => m === n.senderId) ? ( |
|
|
activeUsers.some((m) => m === n.senderId) ? ( |
|
|
<BsCircleFill className="me-2 text-success" /> |
|
|
<BsCircleFill className="me-2 text-success" /> |
|
|
) : ( |
|
|
) : ( |