diff --git a/app/messages/page.jsx b/app/messages/page.jsx new file mode 100644 index 0000000..49a86af --- /dev/null +++ b/app/messages/page.jsx @@ -0,0 +1,57 @@ +import connectDB from '@/config/database'; +import Message from '@/models/Message'; +import '@/models/Property'; +import { convertToSerializeableObject } from '@/utils/convertToObject'; +import { getSessionUser } from '@/utils/getSessionUser'; + +const MessagePage = async () => { + await connectDB(); + + const sessionUser = await getSessionUser(); + + const { userId } = sessionUser; + + const readMessages = await Message.find({ recipient: userId, read: true }) + .sort({ createdAt: -1 }) // Sort read messages in asc order + .populate('sender', 'username') + .populate('property', 'name') + .lean(); + + const unreadMessages = await Message.find({ + recipient: userId, + read: false, + }) + .sort({ createdAt: -1 }) // Sort read messages in asc order + .populate('sender', 'username') + .populate('property', 'name') + .lean(); + + // Convert to serializable object so we can pass to client component. + const messages = [...unreadMessages, ...readMessages].map((messageDoc) => { + const message = convertToSerializeableObject(messageDoc); + message.sender = convertToSerializeableObject(messageDoc.sender); + message.property = convertToSerializeableObject(messageDoc.property); + return message; + }); + + return ( +
+
+
+

Your Messages

+ +
+ {messages.length === 0 ? ( +

You have no messages

+ ) : ( + messages.map((message) => ( +

{message.name}

+ )) + )} +
+
+
+
+ ); +}; +export default MessagePage;