'use client' import React from 'react' import Image from 'next/image' import { useNavigationService } from '@/services/navigationService' interface ObjectData { object_id: string title: string description: string image: string | null location: string floors?: number area?: string type?: string status?: string } interface ObjectCardProps { object: ObjectData onSelect?: (objectId: string) => void isSelected?: boolean } // Иконка редактирования const EditIcon = ({ className }: { className?: string }) => ( ) const ObjectCard: React.FC = ({ object, onSelect, isSelected = false }) => { const navigationService = useNavigationService() const handleCardClick = () => { if (onSelect) { onSelect(object.object_id) } // Навигация к дашборду с выбранным объектом navigationService.selectObjectAndGoToDashboard(object.object_id, object.title) } const handleEditClick = (e: React.MouseEvent) => { e.stopPropagation() console.log('Edit object:', object.object_id) // Логика редактирования объекта } // Возврат к тестовому изображению, если src отсутствует/некорректен; нормализация относительных путей const resolveImageSrc = (src?: string | null): string => { if (!src || typeof src !== 'string') return '/images/test_image.png' let s = src.trim() if (!s) return '/images/test_image.png' // Нормализуем обратные слеши в стиле Windows s = s.replace(/\\/g, '/') const lower = s.toLowerCase() // Обрабатываем явный плейсхолдер test_image.png только как заглушку if (lower === 'test_image.png' || lower.endsWith('/test_image.png') || lower.includes('/public/images/test_image.png')) { return '/images/test_image.png' } // Абсолютные URL if (s.startsWith('http://') || s.startsWith('https://')) return s // Пути, относительные к сайту if (s.startsWith('/')) { // Преобразуем /public/images/... в /images/... if (/\/public\/images\//i.test(s)) { return s.replace(/\/public\/images\//i, '/images/') } return s } // Нормализуем относительные имена ресурсов до путей сайта под /images // Убираем ведущий 'public/', если он присутствует s = s.replace(/^public\//i, '') return s.startsWith('images/') ? `/${s}` : `/images/${s}` } const imgSrc = resolveImageSrc(object.image) return (
{ if (e.key === 'Enter' || e.key === ' ') { handleCardClick() } }} >

{object.title}

{object.description}

{/* Изображение объекта */}
{object.title} { // Заглушка при ошибке загрузки изображения const target = e.target as HTMLImageElement target.src = '/images/test_image.png' }} />
) } export default ObjectCard export type { ObjectData, ObjectCardProps }