From bfbcca7c63fb14a44b31199bd156f7100e14c8b1 Mon Sep 17 00:00:00 2001 From: Brad Traversy Date: Mon, 15 Jul 2024 08:21:02 -0400 Subject: [PATCH] Mark message as read --- app/actions/markMessageAsRead.js | 36 ++++++++++++++++++++++++++++++++ components/MessageCard.jsx | 26 +++++++++++++++++++++-- 2 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 app/actions/markMessageAsRead.js diff --git a/app/actions/markMessageAsRead.js b/app/actions/markMessageAsRead.js new file mode 100644 index 0000000..6b363fe --- /dev/null +++ b/app/actions/markMessageAsRead.js @@ -0,0 +1,36 @@ +'use server'; +import connectDB from '@/config/database'; +import Message from '@/models/Message'; +import { getSessionUser } from '@/utils/getSessionUser'; +import { revalidatePath } from 'next/cache'; + +async function markMessageAsRead(messageId) { + await connectDB(); + + const sessionUser = await getSessionUser(); + + if (!sessionUser || !sessionUser.user) { + throw new Error('User ID is required'); + } + + const { userId } = sessionUser; + + const message = await Message.findById(messageId); + + if (!message) throw new Error('Message not found'); + + // Verify ownership + if (message.recipient.toString() !== userId) { + return new Response('Unauthorized', { status: 401 }); + } + + message.read = !message.read; + + revalidatePath('/messages', 'page'); + + await message.save(); + + return message.read; +} + +export default markMessageAsRead; diff --git a/components/MessageCard.jsx b/components/MessageCard.jsx index 8e1da26..7865030 100644 --- a/components/MessageCard.jsx +++ b/components/MessageCard.jsx @@ -1,8 +1,25 @@ 'use client'; +import { useState } from 'react'; +import { toast } from 'react-toastify'; +import markMessageAsRead from '@/app/actions/markMessageAsRead'; const MessageCard = ({ message }) => { + const [isRead, setIsRead] = useState(message.read); + + const handleReadClick = async () => { + const read = await markMessageAsRead(message._id); + + setIsRead(read); + toast.success(`Marked as ${read ? 'read' : 'new'}`); + }; + return (
+ {!isRead && ( +
+ New +
+ )}

Property Inquiry:{' '} {message.property.name} @@ -27,8 +44,13 @@ const MessageCard = ({ message }) => { {new Date(message.createdAt).toLocaleString()} -