import React, { useState, useEffect } from 'react'; interface Props { images: Array<{ src: string; alt?: string; id?: string | number; }>; } export default function ImageGalleryGrid({ images }: Props) { const [selectedIndex, setSelectedIndex] = useState(null); const closeModal = () => setSelectedIndex(null); const showPrev = (e: React.MouseEvent) => { e.stopPropagation(); setSelectedIndex((prev) => (prev !== null && prev > 0 ? prev - 1 : prev)); }; const showNext = (e: React.MouseEvent) => { e.stopPropagation(); setSelectedIndex((prev) => prev !== null && prev < images.length - 1 ? prev + 1 : prev ); }; useEffect(() => { function handleKeyDown(event: KeyboardEvent) { if (selectedIndex === null) return; if (event.key === 'Escape') { closeModal; } else if (event.key === 'ArrowLeft') { setSelectedIndex((prev) => (prev && prev > 0 ? prev - 1 : prev)); } else if (event.key === 'ArrowRight') { setSelectedIndex((prev) => prev !== null && prev < images.length - 1 ? prev + 1 : prev ); } } window.addEventListener('keydown', handleKeyDown); return () => window.removeEventListener('keydown', handleKeyDown); }, [selectedIndex, images.length]); return ( <>
{images.map((image, idx) => (
setSelectedIndex(idx)} > {image.alt
))}
{/* Overlay */} {selectedIndex !== null && (
{/* Prev arrow */} {images[selectedIndex].alt {/* Next arrow */}
)} ); }