import { useEffect, useRef } from 'react'; import { Photo } from 'models'; import useEvent from 'lib/useEvent'; import styles from './Gallery.module.css'; interface Props { currentPhoto: Photo; handleClose: () => void; handlePhotoChange: (direction: boolean) => void; } export default function Gallery({ currentPhoto, handleClose, handlePhotoChange, }: Props): JSX.Element { const wrapperRef = useRef(null); useEffect(() => { function handleClickOutside(e: MouseEvent) { if ( wrapperRef.current && !wrapperRef.current.contains(e.target) && (e.target as Node).nodeName !== 'BUTTON' ) { handleClose(); } } document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, [wrapperRef]); useEvent('keydown', (e: KeyboardEvent) => { if (e.key === 'ArrowLeft') { handlePhotoChange(false); } else if (e.key === 'ArrowRight') { handlePhotoChange(true); } else if (e.key === 'Escape') { handleClose(); } }); return (