improved ContactsList.tsx UI, return last message id for
This commit is contained in:
@@ -631,40 +631,22 @@ async function insertContact(initiatorId, receiverId, contactUsername, read) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Retrieve the last message, last active time, and last message sender
|
||||
const lastMessageQuery = `
|
||||
SELECT DISTINCT ON (m.conversation_id)
|
||||
m.content AS last_message,
|
||||
m.sent_at AS last_message_time,
|
||||
a.username AS last_message_sender
|
||||
FROM Messages m
|
||||
JOIN Accounts a ON m.user_id = a.user_id
|
||||
WHERE m.conversation_id = $1
|
||||
ORDER BY m.conversation_id, m.sent_at DESC
|
||||
`;
|
||||
const lastMessageResult = await client.query(lastMessageQuery, [
|
||||
conversation_id,
|
||||
]);
|
||||
let lastMessage, lastMessageTime, lastMessageSender;
|
||||
// Retrieve the last message and related information
|
||||
const latestMessage = await getLatestMessage(conversation_id);
|
||||
|
||||
if (lastMessageResult.rows.length > 0) {
|
||||
lastMessage = lastMessageResult.rows[0].last_message;
|
||||
lastMessageTime = lastMessageResult.rows[0].last_message_time;
|
||||
lastMessageSender = lastMessageResult.rows[0].last_message_sender;
|
||||
}
|
||||
|
||||
// Return formatted result with contact's user_id, last message, last active time, and last message sender
|
||||
// Return formatted result with all message information including message_id
|
||||
return {
|
||||
id: contact.contact_id,
|
||||
user_id: receiverId, // Now using the contact's user_id instead of the initiator's
|
||||
user_id: receiverId,
|
||||
username: contactUsername,
|
||||
last_active: contact.last_active,
|
||||
conversation_id: contact.conversation_id,
|
||||
type: "direct",
|
||||
read: contact.read,
|
||||
last_message: lastMessage || null,
|
||||
last_message_time: lastMessageTime || null,
|
||||
last_message_sender: lastMessageSender || null,
|
||||
last_message_id: latestMessage.message_id,
|
||||
last_message: latestMessage.last_message,
|
||||
last_message_time: latestMessage.last_message_time,
|
||||
last_message_sender: latestMessage.last_message_sender,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Failed to insert contact:", error);
|
||||
@@ -675,6 +657,7 @@ async function insertContact(initiatorId, receiverId, contactUsername, read) {
|
||||
async function getLatestMessage(conversation_id) {
|
||||
const query = `
|
||||
SELECT DISTINCT ON (m.conversation_id)
|
||||
m.message_id,
|
||||
m.content AS last_message,
|
||||
m.sent_at AS last_message_time,
|
||||
a.username AS last_message_sender
|
||||
@@ -689,13 +672,15 @@ async function getLatestMessage(conversation_id) {
|
||||
const result = await client.query(query, [conversation_id]);
|
||||
|
||||
return {
|
||||
last_message: result.rows[0].last_message || null,
|
||||
last_message_time: result.rows[0].last_message_time || null,
|
||||
last_message_sender: result.rows[0].last_message_sender || null,
|
||||
message_id: result.rows[0]?.message_id || null,
|
||||
last_message: result.rows[0]?.last_message || null,
|
||||
last_message_time: result.rows[0]?.last_message_time || null,
|
||||
last_message_sender: result.rows[0]?.last_message_sender || null,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Failed to get latest message:", error);
|
||||
return {
|
||||
message_id: null,
|
||||
last_message: null,
|
||||
last_message_time: null,
|
||||
last_message_sender: null,
|
||||
@@ -764,11 +749,9 @@ async function getContacts(user_id) {
|
||||
`;
|
||||
|
||||
try {
|
||||
// Execute the query with the user_id parameter
|
||||
const contactsResult = await client.query(contactsQuery, [user_id]);
|
||||
console.log(contactsResult.rows); // Debugging: log the results to verify
|
||||
|
||||
// Map the results to a more friendly format and fetch the latest message for each conversation
|
||||
// Map the results to include the latest message and message_id
|
||||
const contacts = await Promise.all(
|
||||
contactsResult.rows.map(async (row) => {
|
||||
const latestMessage = await getLatestMessage(row.conversation_id);
|
||||
@@ -780,9 +763,10 @@ async function getContacts(user_id) {
|
||||
conversation_id: row.conversation_id,
|
||||
type: row.type,
|
||||
read: row.read,
|
||||
last_message: latestMessage.last_message || null,
|
||||
last_message_time: latestMessage.last_message_time || null,
|
||||
last_message_sender: latestMessage.last_message_sender || null,
|
||||
last_message_id: latestMessage.message_id,
|
||||
last_message: latestMessage.last_message,
|
||||
last_message_time: latestMessage.last_message_time,
|
||||
last_message_sender: latestMessage.last_message_sender,
|
||||
};
|
||||
}),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user