60 lines
1.9 KiB
React
60 lines
1.9 KiB
React
import connectDB from '@/config/database';
|
|
import Message from '@/models/Message';
|
|
import MessageCard from '@/components/MessageCard';
|
|
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;
|
|
console.log(userId);
|
|
|
|
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 (
|
|
<section className='bg-blue-50'>
|
|
<div className='container m-auto py-24 max-w-6xl'>
|
|
<div className='bg-white px-6 py-8 mb-4 shadow-md rounded-md border m-4 md:m-0'>
|
|
<h1 className='text-3xl font-bold mb-4'>Your Messages</h1>
|
|
|
|
<div className='space-y-4'>
|
|
{messages.length === 0 ? (
|
|
<p>You have no messages</p>
|
|
) : (
|
|
messages.map((message) => (
|
|
<MessageCard key={message._id} message={message} />
|
|
))
|
|
)}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
);
|
|
};
|
|
export default MessagePage;
|