В этом задании мы создадим фотогалерею с модальным окном для просмотра изображений и навигацией с клавиатуры.
Галерея изображений - это сетка миниатюр, при клике на которые открывается полноэкранный просмотр. Это популярный паттерн на сайтах с фотографиями, портфолио, интернет-магазинах.
В отличие от простой модалки с булевым состоянием (true/false), здесь нам нужно знать, какое именно изображение открыто. Для этого используем :
addEventListener добавляет обработчик события на весь window. Важно удалить его в cleanup функции, иначе обработчики накопятся и будут вызываться многократно.
Свойство e.key содержит название нажатой клавиши: 'Escape', 'ArrowRight', 'ArrowLeft', 'Enter' и т.д.
Задание
Необходимо создать галерею изображений с модальным просмотром и навигацией. Создайте состояние selectedImageIndex (число или null, начальное значение null). Реализуйте функции: openModal(index) устанавливает индекс выбранного изображения, closeModal() устанавливает null, goToNext() увеличивает индекс (если не последнее изображение), goToPrev() уменьшает индекс (если не первое). В useEffect с зависимостью [selectedImageIndex] добавьте обработчик клавиш на window: Escape закрывает модалку, ArrowRight переключает на следующее, ArrowLeft на предыдущее. Не забудьте удалить обработчик в cleanup функции. Отобразите сетку изображений, при клике на которые открывается модалка. В модалке покажите выбранное изображение, информацию о нём, кнопки навигации "Предыдущее" и "Следующее", кнопку закрытия. Модалка должна закрываться при клике на затемнённый фон, но не при клике на контент (используйте stopPropagation).