import fs from 'fs' import path from 'path' import React, { useEffect, useState } from 'react' import Image from 'next/image' import AppContainer from './appContainer' const shimmer = (width, height) => ` ` const toBase64 = value => typeof window === 'undefined' ? Buffer.from(value).toString('base64') : window.btoa(value) const galleryBannerLoader = () => '/resource/parallax/Gallery.jpg' const Gallery = ({ images }) => { const [selectedImage, setSelectedImage] = useState(null) const closeLightbox = () => setSelectedImage(null) const showPreviousImage = () => { setSelectedImage(current => (current === 0 ? images.length - 1 : current - 1)) } const showNextImage = () => { setSelectedImage(current => (current === images.length - 1 ? 0 : current + 1)) } useEffect(() => { if (selectedImage === null) return undefined const handleKeyDown = event => { if (event.key === 'Escape') setSelectedImage(null) if (event.key === 'ArrowRight') { setSelectedImage(current => (current === images.length - 1 ? 0 : current + 1)) } if (event.key === 'ArrowLeft') { setSelectedImage(current => (current === 0 ? images.length - 1 : current - 1)) } } const previousOverflow = document.body.style.overflow document.body.style.overflow = 'hidden' window.addEventListener('keydown', handleKeyDown) return () => { document.body.style.overflow = previousOverflow window.removeEventListener('keydown', handleKeyDown) } }, [selectedImage, images.length]) return ( گالری بیمارستان گالری تصاویر تصاویر بیمارستان مهر ایرانیان پرند {images.map((image, index) => ( setSelectedImage(index)} > ))} {selectedImage !== null && ( × { event.stopPropagation() showPreviousImage() }} > ‹ event.stopPropagation()} /> { event.stopPropagation() showNextImage() }} > › {selectedImage + 1} از {images.length} )} ) } export async function getStaticProps() { const galleryDirectory = path.join(process.cwd(), 'public', 'resource', 'images', 'gallery') const fileNames = fs .readdirSync(galleryDirectory) .filter(fileName => /\.(jpe?g|png|webp)$/i.test(fileName)) .sort((first, second) => first.localeCompare(second, undefined, { numeric: true })) const images = fileNames.map((fileName, index) => ({ id: fileName, image: `/resource/images/gallery/${encodeURIComponent(fileName)}`, title: `تصویر ${index + 1} از بیمارستان مهر ایرانیان پرند` })) return { props: { images } } } export default Gallery
تصاویر بیمارستان مهر ایرانیان پرند
{selectedImage + 1} از {images.length}