|
@@ -1,5 +1,5 @@
|
|
import { makeStyles } from "@material-ui/core/styles";
|
|
import { makeStyles } from "@material-ui/core/styles";
|
|
-import { useState, useEffect, useRef, useCallback } from "react";
|
|
|
|
|
|
+import { useState, useEffect, useCallback } from "react";
|
|
import { useSelector,useDispatch } from "react-redux";
|
|
import { useSelector,useDispatch } from "react-redux";
|
|
|
|
|
|
import ArrowBack from "./ArrowBack";
|
|
import ArrowBack from "./ArrowBack";
|
|
@@ -75,13 +75,14 @@ const useStyles = makeStyles({
|
|
});
|
|
});
|
|
|
|
|
|
interface IChatBar {
|
|
interface IChatBar {
|
|
|
|
+ divRef: any | null,
|
|
selectedArr: string[] | [],
|
|
selectedArr: string[] | [],
|
|
setSelectedArr: React.Dispatch<React.SetStateAction<string[] | []>>,
|
|
setSelectedArr: React.Dispatch<React.SetStateAction<string[] | []>>,
|
|
isSomeSelected: boolean,
|
|
isSomeSelected: boolean,
|
|
setIsSomeSelected: React.Dispatch<React.SetStateAction<boolean>>,
|
|
setIsSomeSelected: React.Dispatch<React.SetStateAction<boolean>>,
|
|
}
|
|
}
|
|
|
|
|
|
-const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:IChatBar) => {
|
|
|
|
|
|
+const ChatBar = ({divRef,selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:IChatBar) => {
|
|
const classes = useStyles();
|
|
const classes = useStyles();
|
|
const dispatch = useDispatch()
|
|
const dispatch = useDispatch()
|
|
const messages = useSelector(getMessagesMemo)
|
|
const messages = useSelector(getMessagesMemo)
|
|
@@ -90,7 +91,6 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
const scrollChat = useSelector(getScrollChat)
|
|
const scrollChat = useSelector(getScrollChat)
|
|
const [isArrow, setIsArrow] = useState<boolean>(false)
|
|
const [isArrow, setIsArrow] = useState<boolean>(false)
|
|
const [isNew, setIsNew] = useState<{new:number,mute:boolean}>({new:0,mute:false})
|
|
const [isNew, setIsNew] = useState<{new:number,mute:boolean}>({new:0,mute:false})
|
|
- const divRef = useRef<any | null>(null)
|
|
|
|
let time: any
|
|
let time: any
|
|
const isSelected = (_id: string) => selectedArr.some((el: string) => el === _id)
|
|
const isSelected = (_id: string) => selectedArr.some((el: string) => el === _id)
|
|
const handleSelected = (_id: string) => {
|
|
const handleSelected = (_id: string) => {
|
|
@@ -99,12 +99,12 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
setSelectedArr(selectedArr.filter((el:string) => el !== _id))
|
|
setSelectedArr(selectedArr.filter((el:string) => el !== _id))
|
|
else setSelectedArr([...selectedArr,_id])
|
|
else setSelectedArr([...selectedArr,_id])
|
|
}
|
|
}
|
|
- const handleScrollTo = () => {
|
|
|
|
|
|
+ const handleScrollTo = useCallback(() => {
|
|
divRef.current&&divRef.current.scrollTo({
|
|
divRef.current&&divRef.current.scrollTo({
|
|
top: divRef.current.scrollHeight,
|
|
top: divRef.current.scrollHeight,
|
|
behavior: 'smooth'
|
|
behavior: 'smooth'
|
|
})
|
|
})
|
|
- }
|
|
|
|
|
|
+ },[divRef])
|
|
|
|
|
|
const handleScroll = useCallback(({ target:{scrollHeight,scrollTop,clientHeight}}: any) => {
|
|
const handleScroll = useCallback(({ target:{scrollHeight,scrollTop,clientHeight}}: any) => {
|
|
const different = scrollHeight - Math.floor(scrollTop)
|
|
const different = scrollHeight - Math.floor(scrollTop)
|
|
@@ -120,7 +120,7 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
dispatch(asyncGetMessagesById(companionId, handleScrollTo))
|
|
dispatch(asyncGetMessagesById(companionId, handleScrollTo))
|
|
dispatch(actionScrollChat(false))
|
|
dispatch(actionScrollChat(false))
|
|
}
|
|
}
|
|
- }, [dispatch, scrollChat, companionId])
|
|
|
|
|
|
+ }, [dispatch,handleScrollTo, scrollChat, companionId])
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
const handleReset = () => {
|
|
const handleReset = () => {
|
|
@@ -145,7 +145,7 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
}
|
|
}
|
|
const idInterval = setInterval(handleReset, refreshAppTime);
|
|
const idInterval = setInterval(handleReset, refreshAppTime);
|
|
return () => clearInterval(idInterval);
|
|
return () => clearInterval(idInterval);
|
|
- }, [total, seen, companionId]);
|
|
|
|
|
|
+ }, [total, seen, divRef,companionId]);
|
|
|
|
|
|
return (
|
|
return (
|
|
<div className={classes.container} >
|
|
<div className={classes.container} >
|
|
@@ -165,7 +165,7 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
}
|
|
}
|
|
const url = `${prodAwsS3}/${message}`
|
|
const url = `${prodAwsS3}/${message}`
|
|
if (number !== userNumber) {
|
|
if (number !== userNumber) {
|
|
- if (type === 'text') return (<div key={createdAt}>
|
|
|
|
|
|
+ if (type === 'text') return (<div key={createdAt} id={_id} style={{borderRadius: 7}}>
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
<MessageLeftText
|
|
<MessageLeftText
|
|
message={message}
|
|
message={message}
|
|
@@ -181,7 +181,7 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
handleSelected={handleSelected}
|
|
handleSelected={handleSelected}
|
|
_id={_id}
|
|
_id={_id}
|
|
/></div>)
|
|
/></div>)
|
|
- if (type === 'image') return (<div key={createdAt}>
|
|
|
|
|
|
+ if (type === 'image') return (<div key={createdAt} id={_id} style={{borderRadius: 7}}>
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
<MessageLeftImage
|
|
<MessageLeftImage
|
|
url={url}
|
|
url={url}
|
|
@@ -197,7 +197,7 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
handleSelected={handleSelected}
|
|
handleSelected={handleSelected}
|
|
_id={_id}
|
|
_id={_id}
|
|
/></div>)
|
|
/></div>)
|
|
- if (type === 'audio') return (<div key={createdAt}>
|
|
|
|
|
|
+ if (type === 'audio') return (<div key={createdAt} id={_id} style={{borderRadius: 7}}>
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
<MessageLeftAudio
|
|
<MessageLeftAudio
|
|
url={url}
|
|
url={url}
|
|
@@ -212,7 +212,7 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
handleSelected={handleSelected}
|
|
handleSelected={handleSelected}
|
|
_id={_id}
|
|
_id={_id}
|
|
/></div>)
|
|
/></div>)
|
|
- if (type === 'video') return (<div key={createdAt}>
|
|
|
|
|
|
+ if (type === 'video') return (<div key={createdAt} id={_id} style={{borderRadius: 7}}>
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
<MessageLeftVideo
|
|
<MessageLeftVideo
|
|
url={url}
|
|
url={url}
|
|
@@ -227,7 +227,7 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
handleSelected={handleSelected}
|
|
handleSelected={handleSelected}
|
|
_id={_id}
|
|
_id={_id}
|
|
/></div>)
|
|
/></div>)
|
|
- if (type) return (<div key={createdAt}>
|
|
|
|
|
|
+ if (type) return (<div key={createdAt} id={_id} style={{borderRadius: 7}}>
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
<MessageLeftFile
|
|
<MessageLeftFile
|
|
url={url}
|
|
url={url}
|
|
@@ -243,7 +243,7 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
_id={_id}
|
|
_id={_id}
|
|
/></div>)
|
|
/></div>)
|
|
} else {
|
|
} else {
|
|
- if (type === 'text') return (<div key={createdAt}>
|
|
|
|
|
|
+ if (type === 'text') return (<div key={createdAt} id={_id} style={{borderRadius: 7}}>
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
<MessageRightText
|
|
<MessageRightText
|
|
message={message}
|
|
message={message}
|
|
@@ -259,7 +259,7 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
handleSelected={handleSelected}
|
|
handleSelected={handleSelected}
|
|
_id={_id}
|
|
_id={_id}
|
|
/></div>)
|
|
/></div>)
|
|
- if (type === 'image') return (<div key={createdAt}>
|
|
|
|
|
|
+ if (type === 'image') return (<div key={createdAt} id={_id} style={{borderRadius: 7}}>
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
<MessageRightImage
|
|
<MessageRightImage
|
|
url={url}
|
|
url={url}
|
|
@@ -275,7 +275,7 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
handleSelected={handleSelected}
|
|
handleSelected={handleSelected}
|
|
_id={_id}
|
|
_id={_id}
|
|
/></div>)
|
|
/></div>)
|
|
- if (type === 'audio') return (<div key={createdAt}>
|
|
|
|
|
|
+ if (type === 'audio') return (<div key={createdAt} id={_id} style={{borderRadius: 7}}>
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
<MessageRightAudio
|
|
<MessageRightAudio
|
|
url={url}
|
|
url={url}
|
|
@@ -290,7 +290,7 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
handleSelected={handleSelected}
|
|
handleSelected={handleSelected}
|
|
_id={_id}
|
|
_id={_id}
|
|
/></div>)
|
|
/></div>)
|
|
- if (type === 'video') return (<div key={createdAt}>
|
|
|
|
|
|
+ if (type === 'video') return (<div key={createdAt} id={_id} style={{borderRadius: 7}}>
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
<MessageRightVideo
|
|
<MessageRightVideo
|
|
url={url}
|
|
url={url}
|
|
@@ -305,7 +305,7 @@ const ChatBar = ({selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:I
|
|
handleSelected={handleSelected}
|
|
handleSelected={handleSelected}
|
|
_id={_id}
|
|
_id={_id}
|
|
/></div>)
|
|
/></div>)
|
|
- if (type) return (<div key={createdAt}>
|
|
|
|
|
|
+ if (type) return (<div key={createdAt} id={_id} style={{borderRadius: 7}}>
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
{isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}
|
|
<MessageRightFile
|
|
<MessageRightFile
|
|
url={url}
|
|
url={url}
|