diff --git a/app/actions/checkBookmarkStatus.jsx b/app/actions/checkBookmarkStatus.jsx new file mode 100644 index 0000000..978634a --- /dev/null +++ b/app/actions/checkBookmarkStatus.jsx @@ -0,0 +1,27 @@ +'use server'; + +const { default: connectDB } = require('@/config/database'); +const { default: User } = require('@/models/User'); +const { getSessionUser } = require('@/utils/getSessionUser'); + +async function checkBookmarkStatus(propertyId) { + await connectDB(); + + const sessionUser = await getSessionUser(); + + if (!sessionUser || !sessionUser.userId) { + return { error: 'User ID is required' }; + } + + const { userId } = sessionUser; + + // Find user in database + const user = await User.findById(userId); + + // Check if property is bookmarked + let isBookmarked = user.bookmarks.includes(propertyId); + + return { isBookmarked }; +} + +export default checkBookmarkStatus; diff --git a/components/BookmarkButton.jsx b/components/BookmarkButton.jsx index aad485e..4dfa0e2 100644 --- a/components/BookmarkButton.jsx +++ b/components/BookmarkButton.jsx @@ -3,6 +3,7 @@ import { useState, useEffect } from 'react'; import { FaBookmark } from 'react-icons/fa'; import { useSession } from 'next-auth/react'; import bookmarkProperty from '@/app/actions/bookmarkProperty'; +import checkBookmarkStatus from '@/app/actions/checkBookmarkStatus'; import { toast } from 'react-toastify'; const BookmarkButton = ({ property }) => { @@ -18,9 +19,12 @@ const BookmarkButton = ({ property }) => { return; } - //@todo: Run action to check if property is bookmarked - setLoading(false); - }, [property._id, userId]); + checkBookmarkStatus(property._id).then((res) => { + if (res.error) toast.error(res.error); + if (res.isBookmarked) setIsBookmarked(res.isBookmarked); + setLoading(false); + }); + }, [property._id, userId, checkBookmarkStatus]); const handleClick = async () => { if (!userId) { @@ -28,30 +32,28 @@ const BookmarkButton = ({ property }) => { return; } - try { - const res = await bookmarkProperty(property._id); - if (res.error) { - toast.error(res.error); - } else { - toast.success(res.message); - } - } catch (error) { - console.error('Error bookmarking property:', error); - toast.error('Failed to bookmark property'); - } finally { - setLoading(false); - } + bookmarkProperty(property._id).then((res) => { + if (res.error) return toast.error(res.error); + setIsBookmarked(res.isBookmarked); + toast.success(res.message); + }); }; if (loading) return

Loading...

; - return ( + return isBookmarked ? ( + + ) : ( ); };