'use client'; import dynamic from 'next/dynamic'; import Link from 'next/link'; import * as React from 'react'; import { AddToCompareButton } from '@/components/comparison/add-to-compare-button'; import { ImageGallery } from '@/components/listings/image-gallery'; import { InquiryModal } from '@/components/listings/inquiry-modal'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { AiEstimateButton } from '@/components/valuation/ai-estimate-button'; import { formatPrice, formatPricePerM2 } from '@/lib/currency'; import type { ListingDetail } from '@/lib/listings-api'; import { PROPERTY_TYPES, DIRECTIONS, TRANSACTION_TYPES } from '@/lib/validations/listings'; const ListingMap = dynamic( () => import('@/components/map/listing-map').then((mod) => mod.ListingMap), { ssr: false, loading: () => (
{'\u0110ang t\u1ea3i b\u1ea3n \u0111\u1ed3...'}
{property.address}, {property.ward}, {property.district}, {property.city}
{formatPrice(listing.priceVND)} VND
{listing.pricePerM2 != null && (~{formatPricePerM2(listing.pricePerM2)}
)} {listing.rentPriceMonthly && (Thu\u00ea: {formatPrice(listing.rentPriceMonthly)}/th\u00e1ng
)}{property.description}
{seller.fullName}
{seller.phone}
Môi giới
{agent.agency &&{agent.agency}
} {listing.commissionPct != null && (Hoa hồng: {listing.commissionPct}%
)}{listing.viewCount}
Lượt xem
{listing.saveCount}
Lượt lưu
{listing.inquiryCount}
Liên hệ
Đăng ngày {new Date(listing.publishedAt).toLocaleDateString('vi-VN')}
)}{label}
{value}
{label}
{value}