it's working? how? 😳
This commit is contained in:
@@ -42,7 +42,7 @@ const MessageForm = ({ contact, setMessages }: MessageFormProps) => {
|
||||
}
|
||||
}, []);
|
||||
|
||||
// Adjust height on content change
|
||||
// Adjust height on message change
|
||||
useEffect(() => {
|
||||
adjustHeight();
|
||||
}, [message, adjustHeight]);
|
||||
@@ -62,7 +62,7 @@ const MessageForm = ({ contact, setMessages }: MessageFormProps) => {
|
||||
formData,
|
||||
{
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data',
|
||||
'message-Type': 'multipart/form-data',
|
||||
},
|
||||
},
|
||||
);
|
||||
@@ -95,11 +95,11 @@ const MessageForm = ({ contact, setMessages }: MessageFormProps) => {
|
||||
}
|
||||
}
|
||||
|
||||
const tempId: string = nanoid(); // Temporary ID for unsent message
|
||||
const tempId: string = nanoid(); // Temporary ID for unsent messag
|
||||
|
||||
const tempMessage: ChatMessages = {
|
||||
sender: username,
|
||||
message: data.message.trim(),
|
||||
content: data.message.trim(),
|
||||
recipient: contact,
|
||||
message_id: 0, // Set to 0 because of key={msg.message_id || msg.tempId} in messages list
|
||||
pending: true,
|
||||
@@ -121,7 +121,7 @@ const MessageForm = ({ contact, setMessages }: MessageFormProps) => {
|
||||
status: string;
|
||||
message_id: number;
|
||||
tempId: number;
|
||||
message: string;
|
||||
content: string;
|
||||
}) => {
|
||||
if (response.status === 'ok') {
|
||||
setMessages((prevMessages) =>
|
||||
@@ -137,7 +137,7 @@ const MessageForm = ({ contact, setMessages }: MessageFormProps) => {
|
||||
setFile(null);
|
||||
}
|
||||
console.log(
|
||||
`status: ${response.status}, tempId: ${response.tempId}, message: ${response.message}`,
|
||||
`status: ${response.status}, tempId: ${response.tempId}, message: ${response.content}`,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -66,7 +66,11 @@ function MessagesArea({
|
||||
sendContact(msg.sender);
|
||||
return [
|
||||
...prevContacts,
|
||||
{ contact_username: msg.sender, read: false },
|
||||
{
|
||||
contact_username: msg.sender,
|
||||
read: false,
|
||||
contact_id: msg.message_id,
|
||||
},
|
||||
];
|
||||
}
|
||||
return prevContacts;
|
||||
@@ -118,7 +122,7 @@ function MessagesArea({
|
||||
}`}
|
||||
key={msg.message_id || msg.tempId}
|
||||
>
|
||||
{msg.sender}: {msg.message}
|
||||
{msg.sender}: {msg.content}
|
||||
{msg.attachment_url ? (
|
||||
<div className="mt-2">
|
||||
{msg.attachment_url.match(/\.(jpg|jpeg|png|gif|bmp|webp)$/i) ? (
|
||||
|
||||
@@ -11,7 +11,7 @@ import { getMessages, setContactStatus } from '../api/contactsApi.tsx';
|
||||
|
||||
export type ChatMessages = {
|
||||
sender: string;
|
||||
message: string;
|
||||
content: string;
|
||||
recipient: string;
|
||||
message_id: number;
|
||||
tempId: string;
|
||||
|
||||
@@ -298,19 +298,9 @@ async function createConversation(senderUsername, receiverUsername) {
|
||||
}
|
||||
}
|
||||
|
||||
async function getMessages(
|
||||
senderUsername,
|
||||
receiverUsername,
|
||||
limit = 50,
|
||||
cursor = 0,
|
||||
) {
|
||||
async function getMessages(user_id, receiverUsername, limit = 50, cursor = 0) {
|
||||
let query = `
|
||||
WITH sender AS (
|
||||
SELECT user_id
|
||||
FROM Accounts
|
||||
WHERE username = $1
|
||||
),
|
||||
recipient AS (
|
||||
WITH recipient AS (
|
||||
SELECT user_id
|
||||
FROM Accounts
|
||||
WHERE username = $2
|
||||
@@ -332,24 +322,34 @@ async function getMessages(
|
||||
AND user_id = (SELECT user_id FROM recipient)
|
||||
)
|
||||
LIMIT 1
|
||||
),
|
||||
sender AS (
|
||||
SELECT user_id
|
||||
FROM Accounts
|
||||
WHERE user_id = $1
|
||||
)
|
||||
SELECT * FROM Messages
|
||||
WHERE conversation_id = (SELECT conversation_id FROM conversation)
|
||||
AND message_id < $3
|
||||
ORDER BY message_id DESC
|
||||
SELECT
|
||||
m.message_id,
|
||||
m.content,
|
||||
m.sent_at,
|
||||
m.attachment_url,
|
||||
a.username AS sender_username,
|
||||
r.username AS recipient_username
|
||||
FROM Messages m
|
||||
JOIN Accounts a ON m.user_id = a.user_id
|
||||
JOIN Memberships mem ON m.conversation_id = mem.conversation_id AND mem.user_id = (SELECT user_id FROM recipient)
|
||||
JOIN Accounts r ON mem.user_id = r.user_id
|
||||
WHERE m.conversation_id = (SELECT conversation_id FROM conversation)
|
||||
AND m.message_id < $3
|
||||
ORDER BY m.message_id DESC
|
||||
LIMIT $4;
|
||||
`;
|
||||
|
||||
let params = [senderUsername, receiverUsername, cursor, limit];
|
||||
let params = [user_id, receiverUsername, cursor, limit];
|
||||
|
||||
if (!cursor) {
|
||||
query = `
|
||||
WITH sender AS (
|
||||
SELECT user_id
|
||||
FROM Accounts
|
||||
WHERE username = $1
|
||||
),
|
||||
recipient AS (
|
||||
WITH recipient AS (
|
||||
SELECT user_id
|
||||
FROM Accounts
|
||||
WHERE username = $2
|
||||
@@ -362,7 +362,7 @@ async function getMessages(
|
||||
SELECT 1
|
||||
FROM Memberships
|
||||
WHERE conversation_id = Conversations.conversation_id
|
||||
AND user_id = (SELECT user_id FROM sender)
|
||||
AND user_id = $1
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
@@ -371,17 +371,36 @@ async function getMessages(
|
||||
AND user_id = (SELECT user_id FROM recipient)
|
||||
)
|
||||
LIMIT 1
|
||||
),
|
||||
sender AS (
|
||||
SELECT user_id
|
||||
FROM Accounts
|
||||
WHERE user_id = $1
|
||||
)
|
||||
SELECT * FROM Messages
|
||||
WHERE conversation_id = (SELECT conversation_id FROM conversation)
|
||||
ORDER BY message_id DESC
|
||||
SELECT
|
||||
m.message_id,
|
||||
m.content,
|
||||
m.sent_at,
|
||||
m.attachment_url,
|
||||
a.username AS sender,
|
||||
r.username AS recipient
|
||||
FROM Messages m
|
||||
JOIN Accounts a ON m.user_id = a.user_id
|
||||
JOIN Memberships mem ON m.conversation_id = mem.conversation_id AND mem.user_id = (SELECT user_id FROM recipient)
|
||||
JOIN Accounts r ON mem.user_id = r.user_id
|
||||
WHERE m.conversation_id = (SELECT conversation_id FROM conversation)
|
||||
ORDER BY m.message_id DESC
|
||||
LIMIT $3;
|
||||
`;
|
||||
params = [senderUsername, receiverUsername, limit];
|
||||
params = [user_id, receiverUsername, limit];
|
||||
}
|
||||
|
||||
try {
|
||||
const results = await client.query(query, params);
|
||||
console.log(
|
||||
`Get messages for user_id: ${user_id}, receiverUsername: ${receiverUsername}: `,
|
||||
results.rows,
|
||||
);
|
||||
let messages = results.rows;
|
||||
if (!cursor) {
|
||||
messages = messages.reverse();
|
||||
|
||||
@@ -272,16 +272,9 @@ app.get("/api/chat/messages/:contact", authorizeUser, async (req, res) => {
|
||||
const limit = parseInt(req.query.limit) || 50;
|
||||
const cursor = parseInt(req.query.cursor) || 0;
|
||||
|
||||
const contactId = await getUserId(req.params.contact);
|
||||
|
||||
// if (!contactId) {
|
||||
// console.log("abcdefg", req.params.contact);
|
||||
// return res.status(400).json({ messaeg: "Invalid contact" });
|
||||
// }
|
||||
|
||||
const messages = await getMessages(
|
||||
req.user.user_id,
|
||||
contactId,
|
||||
req.params.contact,
|
||||
limit,
|
||||
cursor,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user