import React, { useState, useCallback, useEffect, useRef } from "react"; interface ProductImageGalleryProps { imageUrl?: string; images?: string[]; // если появятся несколько картинок partsIndexImages?: string[]; // изображения из Parts Index } export default function ProductImageGallery({ imageUrl, images, partsIndexImages }: ProductImageGalleryProps) { // Убираем defaultImage - больше не используем заглушку // const defaultImage = "/images/image-10.png"; // Объединяем все доступные изображения const allImages = [ ...(partsIndexImages && partsIndexImages.length > 0 ? partsIndexImages : []), ...(images && images.length > 0 ? images : []), ...(imageUrl ? [imageUrl] : []) ]; // Если нет изображений, показываем заглушку с текстом const galleryImages = allImages.length > 0 ? allImages : []; const [selectedImage, setSelectedImage] = useState(galleryImages[0] || ''); const [isOverlayOpen, setIsOverlayOpen] = useState(false); // Обновляем selectedImage при изменении galleryImages useEffect(() => { if (galleryImages.length > 0 && !selectedImage) { setSelectedImage(galleryImages[0]); } }, [galleryImages, selectedImage]); // Закрытие overlay по ESC useEffect(() => { if (!isOverlayOpen) return; const handleKeyDown = (e: KeyboardEvent) => { if (e.key === "Escape") setIsOverlayOpen(false); }; window.addEventListener("keydown", handleKeyDown); return () => window.removeEventListener("keydown", handleKeyDown); }, [isOverlayOpen]); // Клик вне картинки const overlayRef = useRef(null); const handleOverlayClick = useCallback((e: React.MouseEvent) => { if (e.target === overlayRef.current) setIsOverlayOpen(false); }, []); // Если нет изображений, показываем заглушку if (galleryImages.length === 0) { return (

Изображения товара не найдены

); } return (
{/* Основная картинка */}
setIsOverlayOpen(true)} tabIndex={0} aria-label="Открыть изображение в полный экран" role="button" onKeyDown={e => (e.key === 'Enter' || e.key === ' ') && setIsOverlayOpen(true)}> Изображение товара
{/* Миниатюры */}
{galleryImages.map((img, idx) => ( {`Миниатюра { setSelectedImage(img); setIsOverlayOpen(true); }} tabIndex={0} aria-label={`Показать изображение ${idx + 1}`} onKeyDown={e => { if (e.key === 'Enter' || e.key === ' ') { setSelectedImage(img); setIsOverlayOpen(true); } }} /> ))}
{/* Overlay для просмотра картинки */} {isOverlayOpen && selectedImage && (
Просмотр товара
)}
); }