Files
property-pulse-nextjs/app/profile/page.jsx
T

66 lines
2.2 KiB
React

import Image from 'next/image';
import connectDB from '@/config/database';
import Property from '@/models/Property';
import { getSessionUser } from '@/utils/getSessionUser';
import profileDefault from '@/assets/images/profile.png';
import ProfileProperties from '@/components/ProfileProperties';
import { convertToSerializeableObject } from '@/utils/convertToObject';
const ProfilePage = async () => {
await connectDB();
const sessionUser = await getSessionUser();
const { userId } = sessionUser;
if (!userId) {
throw new Error('User ID is required');
}
const propertiesDocs = await Property.find({ owner: userId }).lean();
const properties = propertiesDocs.map(convertToSerializeableObject);
return (
<section className='bg-blue-50'>
<div className='container m-auto py-24'>
<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 Profile</h1>
<div className='flex flex-col md:flex-row'>
<div className='md:w-1/4 mx-20 mt-10'>
<div className='mb-4'>
<Image
className='h-32 w-32 md:h-48 md:w-48 rounded-full mx-auto md:mx-0'
src={sessionUser.user.image || profileDefault}
width={200}
height={200}
alt='User'
/>
</div>
<h2 className='text-2xl mb-4'>
<span className='font-bold block'>Name: </span>{' '}
{sessionUser.user.name}
</h2>
<h2 className='text-2xl'>
<span className='font-bold block'>Email: </span>{' '}
{sessionUser.user.email}
</h2>
</div>
<div className='md:w-3/4 md:pl-4'>
<h2 className='text-xl font-semibold mb-4'>Your Listings</h2>
{properties.length === 0 ? (
<p>You have no property listings</p>
) : (
<ProfileProperties properties={properties} />
)}
</div>
</div>
</div>
</div>
</section>
);
};
export default ProfilePage;