|
@@ -1,7 +1,6 @@
|
|
import { makeStyles } from "@material-ui/core/styles";
|
|
import { makeStyles } from "@material-ui/core/styles";
|
|
import { useState, useEffect, useRef, useCallback } from "react";
|
|
import { useState, useEffect, useRef, useCallback } from "react";
|
|
import { useSelector,useDispatch } from "react-redux";
|
|
import { useSelector,useDispatch } from "react-redux";
|
|
-import shortid from 'shortid';
|
|
|
|
|
|
|
|
import SendMessage from "./SendMessage";
|
|
import SendMessage from "./SendMessage";
|
|
import MessageLeftText from './Messages/MessageLeftText'
|
|
import MessageLeftText from './Messages/MessageLeftText'
|
|
@@ -14,6 +13,7 @@ import MessageRightImage from './Messages/MessageRightImage'
|
|
import MessageRightAudio from './Messages/MessageRightAudio'
|
|
import MessageRightAudio from './Messages/MessageRightAudio'
|
|
import MessageRightVideo from './Messages/MessageRightVideo'
|
|
import MessageRightVideo from './Messages/MessageRightVideo'
|
|
import MessageRightFile from "./Messages/MessageRightFile";
|
|
import MessageRightFile from "./Messages/MessageRightFile";
|
|
|
|
+import MessageTime from "./Messages/MessageTime";
|
|
import AlertInfo from "../../../reusableComponents/AlertInfo";
|
|
import AlertInfo from "../../../reusableComponents/AlertInfo";
|
|
import { getMessagesMemo } from '../../../../redux/messages/selector'
|
|
import { getMessagesMemo } from '../../../../redux/messages/selector'
|
|
import { getNumber } from '../../../../redux/authorization/selector'
|
|
import { getNumber } from '../../../../redux/authorization/selector'
|
|
@@ -22,6 +22,7 @@ import { getScroll } from '../../../../redux/control/selector'
|
|
import { actionScroll } from '../../../../redux/control/action'
|
|
import { actionScroll } from '../../../../redux/control/action'
|
|
import { asyncGetMessagesById } from '../../../../redux/messages/operations'
|
|
import { asyncGetMessagesById } from '../../../../redux/messages/operations'
|
|
import { seenChat } from "../../../../api-data";
|
|
import { seenChat } from "../../../../api-data";
|
|
|
|
+import { timeStampFilter } from "../../../../helpers";
|
|
const debounce = require('lodash.debounce');
|
|
const debounce = require('lodash.debounce');
|
|
|
|
|
|
const useStyles = makeStyles({
|
|
const useStyles = makeStyles({
|
|
@@ -53,6 +54,7 @@ const ChatBar = () => {
|
|
const scroll = useSelector(getScroll)
|
|
const scroll = useSelector(getScroll)
|
|
const [isArrow, setIsArrow] = useState<boolean>(false)
|
|
const [isArrow, setIsArrow] = useState<boolean>(false)
|
|
const divRef = useRef<any | null>(null)
|
|
const divRef = useRef<any | null>(null)
|
|
|
|
+ let time:any
|
|
const handleScrollTo = () => {
|
|
const handleScrollTo = () => {
|
|
divRef.current&&divRef.current.scrollTo({
|
|
divRef.current&&divRef.current.scrollTo({
|
|
top: divRef.current.scrollHeight,
|
|
top: divRef.current.scrollHeight,
|
|
@@ -83,79 +85,88 @@ const ChatBar = () => {
|
|
return (
|
|
return (
|
|
<div ref={divRef} className={classes.container} onScroll={debouncedHandleScroll}>
|
|
<div ref={divRef} className={classes.container} onScroll={debouncedHandleScroll}>
|
|
<div className={classes.messagesBody}>
|
|
<div className={classes.messagesBody}>
|
|
- {messages.length > 0 ? messages.map(({message,avatarUrl,name,lastName,color,updatedAt,number,type},i:number) => {
|
|
|
|
|
|
+ {messages.length > 0 ? messages.map(({ message, avatarUrl, name, lastName, color, updatedAt,createdAt, number, type }) => {
|
|
|
|
+ let isTime
|
|
|
|
+ if (!time) {
|
|
|
|
+ isTime = true
|
|
|
|
+ time = updatedAt
|
|
|
|
+ } else if (timeStampFilter(time) !== timeStampFilter(updatedAt)) {
|
|
|
|
+ time = updatedAt
|
|
|
|
+ isTime = true
|
|
|
|
+ }
|
|
if (number !== userNumber) {
|
|
if (number !== userNumber) {
|
|
- if(type === 'text') return (
|
|
|
|
- <MessageLeftText
|
|
|
|
- key={shortid.generate()}
|
|
|
|
- message={message}
|
|
|
|
- updatedAt={updatedAt}
|
|
|
|
- avatarUrl={avatarUrl}
|
|
|
|
- name={name}
|
|
|
|
- lastName={lastName}
|
|
|
|
- color={color}
|
|
|
|
- />)
|
|
|
|
- if(type === 'image') return (
|
|
|
|
- <MessageLeftImage
|
|
|
|
- key={shortid.generate()}
|
|
|
|
- imgUrl={message}
|
|
|
|
- updatedAt={updatedAt}
|
|
|
|
- color={color}
|
|
|
|
- />)
|
|
|
|
- if(type === 'audio') return (
|
|
|
|
- <MessageLeftAudio
|
|
|
|
- key={shortid.generate()}
|
|
|
|
- audioUrl={message}
|
|
|
|
- updatedAt={updatedAt}
|
|
|
|
- />)
|
|
|
|
- if(type === 'video') return (
|
|
|
|
- <MessageLeftVideo
|
|
|
|
- key={shortid.generate()}
|
|
|
|
- audioUrl={message}
|
|
|
|
- updatedAt={updatedAt}
|
|
|
|
- />)
|
|
|
|
- if(type === 'file') return (
|
|
|
|
- <MessageLeftFile
|
|
|
|
- key={shortid.generate()}
|
|
|
|
- audioUrl={message}
|
|
|
|
- updatedAt={updatedAt}
|
|
|
|
- />)
|
|
|
|
|
|
+ if (type === 'text') return (<div key={createdAt}>
|
|
|
|
+ {isTime&&<MessageTime message={timeStampFilter(updatedAt)}/>}
|
|
|
|
+ <MessageLeftText
|
|
|
|
+ message={message}
|
|
|
|
+ updatedAt={updatedAt}
|
|
|
|
+ avatarUrl={avatarUrl}
|
|
|
|
+ name={name}
|
|
|
|
+ lastName={lastName}
|
|
|
|
+ color={color}
|
|
|
|
+ /></div>)
|
|
|
|
+ if (type === 'image') return (<div key={createdAt}>
|
|
|
|
+ {isTime&&<MessageTime message={timeStampFilter(updatedAt)}/>}
|
|
|
|
+ <MessageLeftImage
|
|
|
|
+ imgUrl={message}
|
|
|
|
+ updatedAt={updatedAt}
|
|
|
|
+ color={color}
|
|
|
|
+ /></div>)
|
|
|
|
+ if (type === 'audio') return (<div key={createdAt}>
|
|
|
|
+ {isTime&&<MessageTime message={timeStampFilter(updatedAt)}/>}
|
|
|
|
+ <MessageLeftAudio
|
|
|
|
+ audioUrl={message}
|
|
|
|
+ updatedAt={updatedAt}
|
|
|
|
+ /></div>)
|
|
|
|
+ if (type === 'video') return (<div key={createdAt}>
|
|
|
|
+ {isTime&&<MessageTime message={timeStampFilter(updatedAt)}/>}
|
|
|
|
+ <MessageLeftVideo
|
|
|
|
+ audioUrl={message}
|
|
|
|
+ updatedAt={updatedAt}
|
|
|
|
+ /></div>)
|
|
|
|
+ if (type === 'file') return (<div key={createdAt}>
|
|
|
|
+ {isTime&&<MessageTime message={timeStampFilter(updatedAt)}/>}
|
|
|
|
+ <MessageLeftFile
|
|
|
|
+ audioUrl={message}
|
|
|
|
+ updatedAt={updatedAt}
|
|
|
|
+ /></div>)
|
|
} else {
|
|
} else {
|
|
- if(type === 'text') return (
|
|
|
|
- <MessageRightText
|
|
|
|
- key={shortid.generate()}
|
|
|
|
- message={message}
|
|
|
|
- updatedAt={updatedAt}
|
|
|
|
- avatarUrl={avatarUrl}
|
|
|
|
- name={name}
|
|
|
|
- lastName={lastName}
|
|
|
|
- color={color}
|
|
|
|
- />)
|
|
|
|
- if(type === 'image') return (
|
|
|
|
- <MessageRightImage
|
|
|
|
- key={shortid.generate()}
|
|
|
|
- imgUrl={message}
|
|
|
|
- updatedAt={updatedAt}
|
|
|
|
- color={color}
|
|
|
|
- />)
|
|
|
|
- if(type === 'audio') return (
|
|
|
|
- <MessageRightAudio
|
|
|
|
- key={shortid.generate()}
|
|
|
|
- audioUrl={message}
|
|
|
|
- updatedAt={updatedAt}
|
|
|
|
- />)
|
|
|
|
- if(type === 'video') return (
|
|
|
|
- <MessageRightVideo
|
|
|
|
- key={shortid.generate()}
|
|
|
|
- audioUrl={message}
|
|
|
|
- updatedAt={updatedAt}
|
|
|
|
- />)
|
|
|
|
- if(type === 'file') return (
|
|
|
|
- <MessageRightFile
|
|
|
|
- key={shortid.generate()}
|
|
|
|
- audioUrl={message}
|
|
|
|
- updatedAt={updatedAt}
|
|
|
|
- />)
|
|
|
|
|
|
+ if (type === 'text') return (<div key={createdAt}>
|
|
|
|
+ {isTime&&<MessageTime message={timeStampFilter(updatedAt)}/>}
|
|
|
|
+ <MessageRightText
|
|
|
|
+ message={message}
|
|
|
|
+ updatedAt={updatedAt}
|
|
|
|
+ avatarUrl={avatarUrl}
|
|
|
|
+ name={name}
|
|
|
|
+ lastName={lastName}
|
|
|
|
+ color={color}
|
|
|
|
+ /></div>)
|
|
|
|
+ if (type === 'image') return (<div key={createdAt}>
|
|
|
|
+ {isTime&&<MessageTime message={timeStampFilter(updatedAt)}/>}
|
|
|
|
+ <MessageRightImage
|
|
|
|
+ imgUrl={message}
|
|
|
|
+ updatedAt={updatedAt}
|
|
|
|
+ color={color}
|
|
|
|
+ /></div>)
|
|
|
|
+ if (type === 'audio') return (<div key={createdAt}>
|
|
|
|
+ {isTime&&<MessageTime message={timeStampFilter(updatedAt)}/>}
|
|
|
|
+ <MessageRightAudio
|
|
|
|
+ audioUrl={message}
|
|
|
|
+ updatedAt={updatedAt}
|
|
|
|
+ /></div>)
|
|
|
|
+ if (type === 'video') return (<div key={createdAt}>
|
|
|
|
+ {isTime&&<MessageTime message={timeStampFilter(updatedAt)}/>}
|
|
|
|
+ <MessageRightVideo
|
|
|
|
+ audioUrl={message}
|
|
|
|
+ updatedAt={updatedAt}
|
|
|
|
+ /></div>)
|
|
|
|
+ if (type === 'file') return (<div key={createdAt}>
|
|
|
|
+ {isTime&&<MessageTime message={timeStampFilter(updatedAt)}/>}
|
|
|
|
+ <MessageRightFile
|
|
|
|
+ key={updatedAt}
|
|
|
|
+ audioUrl={message}
|
|
|
|
+ updatedAt={updatedAt}
|
|
|
|
+ /></div>)
|
|
}
|
|
}
|
|
}) : <AlertInfo name='You do not have messages yet!' />}
|
|
}) : <AlertInfo name='You do not have messages yet!' />}
|
|
</div>
|
|
</div>
|