@pubuduth-aplicy/chat-ui 2.1.49 → 2.1.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,31 +17,31 @@ const Messages = () => {
17
17
  const lastMessageRef = useRef<HTMLDivElement>(null);
18
18
 
19
19
  const { data, fetchNextPage, isFetchingNextPage } =
20
- useInfiniteQuery({
21
- queryKey: ["messages", selectedConversation?._id, userId],
22
- queryFn: ({ pageParam = 1 }) =>
23
- fetchMessages(selectedConversation?._id, userId, pageParam),
24
- getNextPageParam: (lastPage) => {
25
- return lastPage.nextPage; // Use the nextPage from API response
26
- },
27
- initialPageParam: 1,
28
- })
29
-
30
-
31
- useEffect(() => {
32
- if (inView) {
33
- fetchNextPage();
34
- }
35
- }, [fetchNextPage, inView]);
36
-
37
-
38
- useEffect(() => {
39
- if (data) {
40
- console.log('message fetching data',data);
41
-
42
- const allMessages = data.pages.flatMap(page => page.messages).reverse();
43
- setMessages(allMessages);
44
- }
20
+ useInfiniteQuery({
21
+ queryKey: ["messages", selectedConversation?._id, userId],
22
+ queryFn: ({ pageParam = 1 }) =>
23
+ fetchMessages(selectedConversation?._id, userId, pageParam),
24
+ getNextPageParam: (lastPage) => {
25
+ return lastPage.nextPage; // Use the nextPage from API response
26
+ },
27
+ initialPageParam: 1,
28
+ })
29
+
30
+
31
+ useEffect(() => {
32
+ if (inView) {
33
+ fetchNextPage();
34
+ }
35
+ }, [fetchNextPage, inView]);
36
+
37
+
38
+ useEffect(() => {
39
+ if (data) {
40
+ console.log('message fetching data', data);
41
+
42
+ const allMessages = data.pages.flatMap(page => page.messages).reverse();
43
+ setMessages(allMessages);
44
+ }
45
45
  }, [data]);
46
46
 
47
47
  // Listen for new messages from the server
@@ -54,15 +54,15 @@ useEffect(() => {
54
54
  setMessages((prevMessages) => [...prevMessages, newMessage[1]]);
55
55
  };
56
56
 
57
- // const handleNewMessage = (newMessage: any) => {
58
- // newMessage.shouldShake = true;
59
- // console.log("📩 New message received:", newMessage);
60
- // setMessages((prevMessages) => {
61
- // const updatedMessages = [...prevMessages, newMessage];
62
- // return [...new Map(updatedMessages.map(m => [m._id, m])).values()]; // Prevent duplicates
63
- // });
64
- // };
65
-
57
+ // const handleNewMessage = (newMessage: any) => {
58
+ // newMessage.shouldShake = true;
59
+ // console.log("📩 New message received:", newMessage);
60
+ // setMessages((prevMessages) => {
61
+ // const updatedMessages = [...prevMessages, newMessage];
62
+ // return [...new Map(updatedMessages.map(m => [m._id, m])).values()]; // Prevent duplicates
63
+ // });
64
+ // };
65
+
66
66
 
67
67
  const handleStatusUpdate = ({
68
68
  messageId,
@@ -87,10 +87,10 @@ useEffect(() => {
87
87
 
88
88
  useEffect(() => {
89
89
  if (messages.length > 0) {
90
- setTimeout(() => {
91
- lastMessageRef.current?.scrollIntoView({ behavior: "smooth" });
92
- }, 100);
93
- }
90
+ setTimeout(() => {
91
+ lastMessageRef.current?.scrollIntoView({ behavior: "smooth" });
92
+ }, 100);
93
+ }
94
94
  }, [messages.length]);
95
95
 
96
96
  useEffect(() => {
@@ -134,27 +134,26 @@ useEffect(() => {
134
134
  // }
135
135
  // }, [handleScroll]);
136
136
 
137
- // useEffect(() => {
138
- // const scrollContainer = scrollContainerRef.current;
139
- // if (scrollContainer) {
140
- // scrollContainer.addEventListener("scroll", handleScroll);
141
- // return () => scrollContainer.removeEventListener("scroll", handleScroll);
142
- // }
143
- // }, [handleScroll]);
144
-
137
+ // useEffect(() => {
138
+ // const scrollContainer = scrollContainerRef.current;
139
+ // if (scrollContainer) {
140
+ // scrollContainer.addEventListener("scroll", handleScroll);
141
+ // return () => scrollContainer.removeEventListener("scroll", handleScroll);
142
+ // }
143
+ // }, [handleScroll]);
145
144
 
146
- console.log("📩 Messages:", messages);
145
+
146
+ console.log("📩 Messages:", messages);
147
147
  console.log("📩 Messages Length:", messages?.length);
148
148
 
149
149
 
150
150
 
151
151
  return (
152
152
  <div className="chatMessages"
153
+ style={{ overflowY: 'auto', height: '100%', position: 'relative' }}
154
+ >
153
155
 
154
- style={{ overflowY: 'auto', height: '100%', position: 'relative' }}
155
- >
156
-
157
- <div ref={ref} className="my-8">
156
+ <div ref={ref} className="my-8">
158
157
  {isFetchingNextPage ? <Loader /> : null}
159
158
  </div>
160
159
  {messages?.length > 0 ? (
@@ -162,8 +161,8 @@ console.log("📩 Messages:", messages);
162
161
  // Check if the message object is valid and has an _id before rendering
163
162
  message ? (
164
163
  <div key={message._id} ref={lastMessageRef}
165
- style={{ flex: 1, minHeight: 0, overflowY: 'auto' }}
166
- >
164
+ style={{ flex: 1, minHeight: 0, overflowY: 'auto' }}
165
+ >
167
166
  <Message message={message} />
168
167
  </div>
169
168
  ) : null
@@ -46,40 +46,37 @@ const Conversation = ({ conversation, lastIdx }: ConversationProps) => {
46
46
  onlineUsers?.includes(conversation.participantDetails._id);
47
47
  return (
48
48
  <>
49
- <div
50
- className={` chatSidebarConversationMain
51
- `}
52
- onClick={handleSelectConversation}
53
- >
54
- <img
55
- className="chatSidebarConversationImg"
56
- src={
57
- conversation.participantDetails?.profilePic ||
58
- conversation.participantDetails?.idpic
59
- }
60
- />
61
- <p className="text-sm text-[#12bbb5]">
62
- {isUserOnline ? "Online" : "Offline"}
63
- </p>
64
- <div className="chatSidebarConversationContainer">
65
- {/* <div className="chatSidebarConversationInnerDiv"> */}
66
- <p className="text-sm text-gray-500">
67
- {conversation.participantDetails?.firstname}
68
- </p>
69
- <p className="chatSidebarConversationOuterDiv">
70
- {conversation.lastMessage.message}
49
+ <div className="conversation-container" onClick={handleSelectConversation}>
50
+ <div className="conversation-avatar">
51
+ <img
52
+ className="conversation-img"
53
+ src={conversation.participantDetails?.profilePic || conversation.participantDetails?.idpic}
54
+ alt="User Avatar"
55
+ />
56
+ <span className={`chatSidebarStatusDot ${isUserOnline ? "online" : "offline"}`}></span>
57
+ </div>
58
+
59
+ <div className="conversation-info">
60
+ <div className="conversation-header">
61
+ <p className="conversation-name">
62
+ {conversation.participantDetails?.firstname}
63
+ </p>
64
+ <span className="conversation-time">
65
+ {new Date(conversation.lastMessage.createdAt).toLocaleTimeString([], {
66
+ hour: "2-digit",
67
+ minute: "2-digit",
68
+ })}
69
+ </span>
70
+ </div>
71
+ <p className="conversation-message">
72
+ {conversation.lastMessage.message.length > 50
73
+ ? conversation.lastMessage.message.slice(0, 50) + "..."
74
+ : conversation.lastMessage.message}
71
75
  </p>
72
- {/* </div> */}
73
76
  </div>
74
- <span className="text-xs text-gray-500">
75
- {new Date(conversation.lastMessage.createdAt).toLocaleTimeString([], {
76
- hour: "2-digit",
77
- minute: "2-digit",
78
- })}
79
- </span>
80
77
  </div>
81
78
 
82
- {!lastIdx && <div className="divider my-0 py-0 h-1" />}
79
+ {/* {!lastIdx && <div className="divider my-0 py-0 h-1" />} */}
83
80
  </>
84
81
  );
85
82
  };
@@ -50,10 +50,6 @@ const {userId} =useChatContext()
50
50
  </div>
51
51
  </form>
52
52
  </>
53
-
54
-
55
-
56
-
57
53
  )
58
54
  }
59
55
 
@@ -2,12 +2,12 @@ import Conversations from "./Conversations";
2
2
  import SearchInput from "./SearchInput";
3
3
 
4
4
  export const Sidebar = () => {
5
- return (
6
- <div className='chatSidebarMain'>
5
+ return (
6
+ <div className='chatSidebarMain'>
7
7
  <SearchInput />
8
8
  <div className='divider px-3'></div>
9
9
  <Conversations />
10
-
11
- </div>
12
- )
10
+
11
+ </div>
12
+ )
13
13
  }
@@ -1,5 +1,5 @@
1
1
  export const Path = {
2
- getconversation: "/chat/getConversation",
3
- getmessage: "/chat/getMessage",
4
- sendmessage:"/chat"
2
+ getconversation: "api/chat/getConversation",
3
+ getmessage: "api/chat/getMessage",
4
+ sendmessage:"api/chat"
5
5
  };