|
@@ -4,6 +4,7 @@ import { useSelector,useDispatch } from "react-redux";
|
|
|
|
|
|
import ArrowBack from "./ArrowBack";
|
|
import ArrowBack from "./ArrowBack";
|
|
import SendMessage from "./SendMessage";
|
|
import SendMessage from "./SendMessage";
|
|
|
|
+import UnpinBar from "./UnpinBar";
|
|
import MessageLeftText from './Messages/MessageLeftText'
|
|
import MessageLeftText from './Messages/MessageLeftText'
|
|
import MessageLeftImage from './Messages/MessageLeftImage'
|
|
import MessageLeftImage from './Messages/MessageLeftImage'
|
|
import MessageLeftAudio from './Messages/MessageLeftAudio'
|
|
import MessageLeftAudio from './Messages/MessageLeftAudio'
|
|
@@ -24,6 +25,7 @@ import { actionScrollChat } from '../../../../redux/control/action'
|
|
import { asyncGetMessagesById } from '../../../../redux/messages/operations'
|
|
import { asyncGetMessagesById } from '../../../../redux/messages/operations'
|
|
import { asyncGetChatById } from "../../../../redux/chat/operations";
|
|
import { asyncGetChatById } from "../../../../redux/chat/operations";
|
|
import { seenChat } from "../../../../api-data";
|
|
import { seenChat } from "../../../../api-data";
|
|
|
|
+import { TPinnedMessages } from "../../../../typescript/redux/pinnedMessages/types";
|
|
import { timeStampFilter,prodAwsS3,refreshAppTime } from "../../../../helpers";
|
|
import { timeStampFilter,prodAwsS3,refreshAppTime } from "../../../../helpers";
|
|
const debounce = require('lodash.debounce');
|
|
const debounce = require('lodash.debounce');
|
|
|
|
|
|
@@ -75,14 +77,17 @@ const useStyles = makeStyles({
|
|
});
|
|
});
|
|
|
|
|
|
interface IChatBar {
|
|
interface IChatBar {
|
|
- divRef: any | null,
|
|
|
|
|
|
+ chatDivRef: 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>>,
|
|
|
|
+ openPinned: boolean,
|
|
|
|
+ pinnedMessagesMemo: TPinnedMessages,
|
|
|
|
+ handleUnpinAll: () => void
|
|
}
|
|
}
|
|
|
|
|
|
-const ChatBar = ({divRef,selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected}:IChatBar) => {
|
|
|
|
|
|
+const ChatBar = ({chatDivRef,selectedArr,setSelectedArr,isSomeSelected,setIsSomeSelected,openPinned,pinnedMessagesMemo,handleUnpinAll}:IChatBar) => {
|
|
const classes = useStyles();
|
|
const classes = useStyles();
|
|
const dispatch = useDispatch()
|
|
const dispatch = useDispatch()
|
|
const messages = useSelector(getMessagesMemo)
|
|
const messages = useSelector(getMessagesMemo)
|
|
@@ -100,11 +105,11 @@ const ChatBar = ({divRef,selectedArr,setSelectedArr,isSomeSelected,setIsSomeSele
|
|
else setSelectedArr([...selectedArr,_id])
|
|
else setSelectedArr([...selectedArr,_id])
|
|
}
|
|
}
|
|
const handleScrollTo = useCallback(() => {
|
|
const handleScrollTo = useCallback(() => {
|
|
- divRef.current&&divRef.current.scrollTo({
|
|
|
|
- top: divRef.current.scrollHeight,
|
|
|
|
|
|
+ chatDivRef.current&&chatDivRef.current.scrollTo({
|
|
|
|
+ top: chatDivRef.current.scrollHeight,
|
|
behavior: 'smooth'
|
|
behavior: 'smooth'
|
|
})
|
|
})
|
|
- },[divRef])
|
|
|
|
|
|
+ },[chatDivRef])
|
|
|
|
|
|
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)
|
|
@@ -138,22 +143,25 @@ const ChatBar = ({divRef,selectedArr,setSelectedArr,isSomeSelected,setIsSomeSele
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
const handleReset = () => {
|
|
const handleReset = () => {
|
|
- if (divRef.current) {
|
|
|
|
- const { scrollHeight, clientHeight } = divRef.current
|
|
|
|
|
|
+ if (chatDivRef.current) {
|
|
|
|
+ const { scrollHeight, clientHeight } = chatDivRef.current
|
|
if (total !== seen && scrollHeight === clientHeight) seenChat(companionId)
|
|
if (total !== seen && scrollHeight === clientHeight) seenChat(companionId)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
const idInterval = setInterval(handleReset, refreshAppTime);
|
|
const idInterval = setInterval(handleReset, refreshAppTime);
|
|
return () => clearInterval(idInterval);
|
|
return () => clearInterval(idInterval);
|
|
- }, [total, seen, divRef,companionId]);
|
|
|
|
|
|
+ }, [total, seen, chatDivRef, companionId]);
|
|
|
|
+
|
|
|
|
+ const renderArr = !openPinned?messages:pinnedMessagesMemo
|
|
|
|
+
|
|
|
|
|
|
return (
|
|
return (
|
|
<div className={classes.container} >
|
|
<div className={classes.container} >
|
|
<ArrowBack isArrow={isArrow} isNew={isNew} handleScrollTo={handleScrollTo}/>
|
|
<ArrowBack isArrow={isArrow} isNew={isNew} handleScrollTo={handleScrollTo}/>
|
|
- <div id={companionId} ref={divRef} onScroll={debouncedHandleScroll}
|
|
|
|
|
|
+ <div id={companionId} ref={chatDivRef} onScroll={debouncedHandleScroll}
|
|
className={messages.length > 0 ? classes.messagesScroll : classes.messagesEmpty}>
|
|
className={messages.length > 0 ? classes.messagesScroll : classes.messagesEmpty}>
|
|
<div className={classes.messagesBody}>
|
|
<div className={classes.messagesBody}>
|
|
- {messages.length > 0 ? messages.map(({ message, name, lastName, color,pinned,
|
|
|
|
|
|
+ {messages.length > 0 ? renderArr.map(({ message, name, lastName, color,pinned,
|
|
createdAt,number, type,fullType,caption,emoji,emojiCompanion,_id }) => {
|
|
createdAt,number, type,fullType,caption,emoji,emojiCompanion,_id }) => {
|
|
let isTime
|
|
let isTime
|
|
if (!time) {
|
|
if (!time) {
|
|
@@ -324,7 +332,8 @@ const ChatBar = ({divRef,selectedArr,setSelectedArr,isSomeSelected,setIsSomeSele
|
|
}) : <AlertInfo name='You do not have messages yet!' />}
|
|
}) : <AlertInfo name='You do not have messages yet!' />}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <SendMessage isArrow={isArrow} />
|
|
|
|
|
|
+ {!openPinned ? <SendMessage isArrow={isArrow} /> :
|
|
|
|
+ <UnpinBar pinnedMessagesMemo={pinnedMessagesMemo} handleUnpinAll={handleUnpinAll}/>}
|
|
</div>
|
|
</div>
|
|
);
|
|
);
|
|
}
|
|
}
|