bazar/app/(root)/adt/[id]/page.tsx

133 lines
6.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// "use client"
import React from 'react';
// import { useParams } from 'next/navigation';
import { MapPin, Calendar, Phone, MessageCircle, Share2, Flag, Heart, Tag, Building, ChevronRight, Pencil } from 'lucide-react';
import { prisma } from '@/prisma/prisma-client';
import { notFound } from 'next/navigation';
import { ShowNumberModal } from '@/components/shared/modals/show-number';
import { getUserSession } from '@/lib/get-user-session';
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbSeparator } from "@/components/ui/breadcrumb";
import { BreadcrumbsCategory } from '@/components/shared/breadcrumbs-category';
import Link from 'next/link';
type Params = Promise<{ id: string }>
export default async function AdtPage(props: { params: Params }) {
const params = await props.params;
const session = await getUserSession();
const adt = await prisma.adt.findFirst({
where: {
id: Number(params.id),
},
include: {
user: true,
category: {
include: {
parent: true
}
},
city: true
}
})
if (!adt) {
return notFound();
}
const user = adt.user
const isOwner = session?.id === String(adt.userId);
return (
<>
<main className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<div className="flex justify-between items-start mb-4">
<div>
<h1 className="text-2xl font-semibold">{adt.title}</h1>
<BreadcrumbsCategory category={adt.category} />
</div>
</div>
<div className="grid grid-cols-1 lg:grid-cols-3 gap-8">
<div className="lg:col-span-2">
<div className="bg-white rounded-xl shadow-sm overflow-hidden">
<img src={String(adt.image)} alt={adt.title} className="w-full h-[400px] object-cover" />
<div className="p-6">
<div className="flex items-center gap-4 text-gray-500 mb-6">
<div className="flex items-center gap-1">
<MapPin className="h-5 w-5" />
<span>{adt.address || 'Адрес не указан'}</span>
</div>
<div className="flex items-center gap-1">
<Building className="h-5 w-5" />
<span>{adt.city?.nameEn}</span>
</div>
<div className="flex items-center gap-1">
<Calendar className="h-5 w-5" />
<span>{new Date(adt.createdAt).toLocaleDateString()}</span>
</div>
<span className="text-2xl font-bold text-indigo-600 ml-auto">{adt.price ? `${adt.price}` : 'Цена не указана'}</span>
</div>
<h2 className="font-semibold text-lg mb-3">Описание</h2>
<p className="text-gray-600 mb-6">
{adt.description || 'Описание отсутствует'}
</p>
<div className="flex gap-3">
{isOwner && (
<Link
href={`/adt/edit/${adt.id}`}
className="flex items-center gap-2 px-4 py-2 rounded-lg border border-gray-200 hover:bg-gray-50"
>
<Pencil className="h-5 w-5" />
<span>Редактировать</span>
</Link>
)}
<button className="flex items-center gap-2 px-4 py-2 rounded-lg border border-gray-200 hover:bg-gray-50">
<Share2 className="h-5 w-5" />
<span>Поделиться</span>
</button>
<button className="flex items-center gap-2 px-4 py-2 rounded-lg border border-gray-200 hover:bg-gray-50">
<Flag className="h-5 w-5" />
<span>Пожаловаться</span>
</button>
</div>
</div>
</div>
</div>
<div className="lg:col-span-1">
<div className="bg-white rounded-xl shadow-sm p-6 sticky top-24">
<div className="flex items-center gap-4 mb-6">
<img
src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?auto=format&fit=crop&w=100"
alt="Seller"
className="w-12 h-12 rounded-full"
/>
<div>
<h3 className="font-semibold">{user?.name || 'Пользователь'}</h3>
<p className="text-sm text-gray-500">На сайте с {new Date(user?.createdAt || '').toLocaleDateString()}</p>
</div>
</div>
<div className="space-y-3">
<ShowNumberModal phoneNumber={String(adt.user?.email)} session={session} />
<button className="w-full flex items-center justify-center gap-2 bg-white border border-indigo-600 text-indigo-600 px-4 py-2 rounded-lg hover:bg-indigo-50">
<MessageCircle className="h-5 w-5" />
<span>Написать сообщение (В разработке)</span>
</button>
<button className="w-full flex items-center justify-center gap-2 bg-white border border-gray-200 px-4 py-2 rounded-lg hover:bg-gray-50">
<Heart className="h-5 w-5" />
<span>Добавить в избранное (В разработке)</span>
</button>
</div>
</div>
</div>
</div>
</main>
</>
);
}