11import { Avatar } from "@chakra-ui/avatar" ;
22import { Tooltip } from "@chakra-ui/tooltip" ;
3+ import { Spinner } from "@chakra-ui/react" ;
34import ScrollableFeed from "react-scrollable-feed" ;
45import {
56 isLastMessage ,
@@ -9,55 +10,79 @@ import {
910} from "../config/ChatLogics" ;
1011import { ChatState } from "../Context/ChatProvider" ;
1112
12- const ScrollableChat = ( { messages } ) => {
13+ const ScrollableChat = ( { messages, pendingMessages = [ ] } ) => {
1314 const { user } = ChatState ( ) ;
1415
16+ // Combine regular messages with pending messages
17+ const allMessages = [ ...messages , ...pendingMessages ] ;
18+
1519 return (
1620 < ScrollableFeed >
17- { messages &&
18- messages . map ( ( m , i ) => (
19- < div
20- style = { { display : "flex" , backgroundColor : "#0f1924" , padding : "1px 10px" } }
21- key = { m . _id }
22- >
23- { ( isSameSender ( messages , m , i , user . _id ) ||
24- isLastMessage ( messages , i , user . _id ) ) && (
25- < Tooltip label = { m . sender . name } placement = "bottom-start" hasArrow >
26- < Avatar
27- mt = "7px"
28- mr = { 1 }
29- size = "sm"
30- cursor = "pointer"
31- name = { m . sender . name }
32- src = { m . sender . pic }
33- />
34- </ Tooltip >
35- ) }
36- < span
21+ < div className = " bg-[#0f1924] " >
22+ { allMessages &&
23+ allMessages . map ( ( m , i ) => (
24+ < div
3725 style = { {
38- backgroundColor : `${
39- m . sender . _id === user . _id ? " #153454ff" : "#21364a"
40- } `,
41- marginLeft : isSameSenderMargin ( messages , m , i , user . _id ) ,
42- marginTop : isSameUser ( messages , m , i , user . _id ) ? 3 : 10 ,
43- borderBottomRightRadius : "10px" ,
44- borderBottomLeftRadius : "10px" ,
45- borderTopLeftRadius : `${
46- m . sender . _id === user . _id ? "10px" : "0"
47- } `,
48- borderTopRightRadius : `${
49- m . sender . _id !== user . _id ? "10px" : "0"
50- } `,
51-
52- padding : "5px 15px" ,
53- maxWidth : "75%" ,
54- color : "white" ,
26+ display : "flex" ,
27+ backgroundColor : "#0f1924" ,
28+ padding : "1px 10px" ,
5529 } }
30+ key = { m . _id }
5631 >
57- { m . content }
58- </ span >
59- </ div >
60- ) ) }
32+ { ( isSameSender ( allMessages , m , i , user . _id ) ||
33+ isLastMessage ( allMessages , i , user . _id ) ) && (
34+ < Tooltip
35+ label = { m . sender . name }
36+ placement = "bottom-start"
37+ hasArrow
38+ >
39+ < Avatar
40+ mt = "7px"
41+ mr = { 1 }
42+ size = "sm"
43+ cursor = "pointer"
44+ name = { m . sender . name }
45+ src = { m . sender . pic }
46+ />
47+ </ Tooltip >
48+ ) }
49+ < span
50+ style = { {
51+ backgroundColor : `${
52+ m . sender . _id === user . _id ? " #153454ff" : "#21364a"
53+ } `,
54+ marginLeft : isSameSenderMargin ( allMessages , m , i , user . _id ) ,
55+ marginTop : isSameUser ( allMessages , m , i , user . _id ) ? 3 : 10 ,
56+ borderBottomRightRadius : "10px" ,
57+ borderBottomLeftRadius : "10px" ,
58+ borderTopLeftRadius : `${
59+ m . sender . _id === user . _id ? "10px" : "0"
60+ } `,
61+ borderTopRightRadius : `${
62+ m . sender . _id !== user . _id ? "10px" : "0"
63+ } `,
64+ padding : "5px 15px" ,
65+ maxWidth : "75%" ,
66+ color : "white" ,
67+ opacity : m . isPending ? 0.6 : 1 ,
68+ display : "flex" ,
69+ alignItems : "center" ,
70+ gap : "8px" ,
71+ } }
72+ >
73+ { m . content }
74+ { m . isPending && (
75+ < Spinner
76+ size = "xs"
77+ color = "white"
78+ thickness = "2px"
79+ speed = "0.8s"
80+ />
81+ ) }
82+ </ span >
83+ </ div >
84+ ) ) }
85+ </ div >
6186 </ ScrollableFeed >
6287 ) ;
6388} ;
0 commit comments