displays no more messages found message from server

This commit is contained in:
slawk0
2024-11-14 22:17:14 +01:00
parent ef8df113e4
commit 5ba57cefac
3 changed files with 40 additions and 22 deletions

View File

@@ -31,6 +31,7 @@ type MessagesAreaProps = {
messageHandler: (msg: ChatMessages) => void; messageHandler: (msg: ChatMessages) => void;
setContactsList: React.Dispatch<React.SetStateAction<ContactsProps[]>>; setContactsList: React.Dispatch<React.SetStateAction<ContactsProps[]>>;
fetchPreviousMessages: (contact: string | null) => Promise<void>; fetchPreviousMessages: (contact: string | null) => Promise<void>;
errorMessage: string | null;
}; };
function MessagesArea({ function MessagesArea({
@@ -40,6 +41,7 @@ function MessagesArea({
setContactsList, setContactsList,
messageHandler, messageHandler,
fetchPreviousMessages, fetchPreviousMessages,
errorMessage,
}: MessagesAreaProps) { }: MessagesAreaProps) {
const messagesEndRef = useRef<HTMLDivElement>(null); const messagesEndRef = useRef<HTMLDivElement>(null);
const containerRef = useRef<HTMLDivElement>(null); const containerRef = useRef<HTMLDivElement>(null);
@@ -56,7 +58,10 @@ function MessagesArea({
setIsFetchingHistory(true); setIsFetchingHistory(true);
fetchPreviousMessages(currentContact) fetchPreviousMessages(currentContact)
.then(() => setIsLoading(false)) .then(() => setIsLoading(false))
.catch((e) => console.error('Failed to fetch messages: ', e)); .catch((e) => {
console.error('Failed to fetch messages: ', e);
setIsLoading(false);
});
} }
}; };
@@ -128,6 +133,7 @@ function MessagesArea({
return ( return (
<div ref={containerRef} className="flex flex-col h-full overflow-y-auto"> <div ref={containerRef} className="flex flex-col h-full overflow-y-auto">
<p className="text-center text-gray-400">{errorMessage}</p>
<ul className="flex-grow list-none"> <ul className="flex-grow list-none">
{isLoading ? <LoadingWheel /> : null} {isLoading ? <LoadingWheel /> : null}
{messageList} {messageList}

View File

@@ -31,6 +31,7 @@ function Chat() {
const [currentContact, setCurrentContact] = useState<string | null>(null); const [currentContact, setCurrentContact] = useState<string | null>(null);
const [cursor, setCursor] = useState<number>(0); const [cursor, setCursor] = useState<number>(0);
const [messages, setMessages] = useState<ChatMessages[]>([]); const [messages, setMessages] = useState<ChatMessages[]>([]);
const [errorMessage, setErrorMessage] = useState<string | null>(null);
useEffect(() => { useEffect(() => {
const token = Cookies.get('token'); const token = Cookies.get('token');
@@ -62,32 +63,42 @@ function Chat() {
} }
const fetchMessages = async (currentContact: string | null) => { const fetchMessages = async (currentContact: string | null) => {
const messages = await getMessages(currentContact);
console.log('Fetching messages for: ', currentContact); console.log('Fetching messages for: ', currentContact);
setCursor(() => { try {
return Math.min( const messages = await getMessages(currentContact);
...messages.messages.map((message) => message.message_id),
); setCursor(() => {
}); return Math.min(
messages.messages.forEach(messageHandler); ...messages.messages.map((message) => message.message_id),
);
});
messages.messages.forEach(messageHandler);
} catch (e) {
setErrorMessage(e.response.data.message);
}
}; };
const fetchPreviousMessages = async (contact: string | null) => { const fetchPreviousMessages = async (contact: string | null) => {
console.log('Fetching messages for: ', contact, 'with cursor: ', cursor); console.log('Fetching messages for: ', contact, 'with cursor: ', cursor);
const messages = await getMessages(contact, cursor, 50); try {
messages.messages.forEach((msg) => { const messages = await getMessages(contact, cursor, 50);
setMessages((prevMessages) => { messages.messages.forEach((msg) => {
if (!prevMessages.some((m) => m.message_id === msg.message_id)) { setMessages((prevMessages) => {
return [msg, ...prevMessages]; if (!prevMessages.some((m) => m.message_id === msg.message_id)) {
} return [msg, ...prevMessages];
return prevMessages; }
return prevMessages;
});
}); });
}); setCursor(() => {
setCursor(() => { return Math.min(
return Math.min( ...messages.messages.map((message) => message.message_id),
...messages.messages.map((message) => message.message_id), );
); });
}); } catch (e) {
setErrorMessage(e.response.data.message);
}
}; };
function messageHandler(msg: ChatMessages) { function messageHandler(msg: ChatMessages) {
@@ -152,6 +163,7 @@ function Chat() {
messageHandler={messageHandler} messageHandler={messageHandler}
setContactsList={setContactsList} setContactsList={setContactsList}
fetchPreviousMessages={fetchPreviousMessages} fetchPreviousMessages={fetchPreviousMessages}
errorMessage={errorMessage}
/> />
</div> </div>
<div className="flex-shrink-0 mb-2 mt-0"> <div className="flex-shrink-0 mb-2 mt-0">

View File

@@ -196,7 +196,7 @@ app.get("/api/chat/messages/:contact", authorizeUser, async (req, res) => {
cursor, cursor,
); );
if (messages && messages.length < limit) { if (messages && messages.length < limit) {
return res.status(404).json({ message: "No more messages" }); return res.status(404).json({ message: "No more messages found" });
} }
console.log("MESSAGESLENGTH: ", messages.length, limit); console.log("MESSAGESLENGTH: ", messages.length, limit);